0

我正在创建一个具有登录页面的应用程序,要求用户输入详细信息。用户可以查看他/她输入的详细信息,管理员可以查看所有输入的详细信息。我为此使用 MYSQL 并使用 NetBeans 创建所需的表单。

现在,我想将数据从名为tenderdetails 的数据库中导入到我的表单中的表中,并带有一个名为details 的表。我最初将三个字段的数据类型设置为 BLOB。在导入数据时,我在这些字段中得到了垃圾值。

所以,我尝试将这些字段的数据类型更改为 TEXT。这会引发异常。像这样(问题是一个字段,AAI 包)

org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B]. Exception in thread "AWT-EventQueue-0" 

javax.persistence.PersistenceException: Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE ], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B].

并且,

org.eclipse.persistence.exceptions.ConversionException Exception Description: The object [DATA THAT I ENTERED FOR FIELD ISSUE ], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[issue-->tenderdetails.calldetails.Issue]] with descriptor [RelationalDescriptor(AAI.Calldetails --> [DatabaseTable(tenderdetails.calldetails)])], could not be converted to [class [B]. at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:75) at org.eclipse.persistence.internal.helper.Helper.buildBytesFromHexString(Helper.java:265) 

当我对这些字段使用数据类型 BLOB 时,这些异常再次被删除。当我将此数据类型更改为 VARCHAR 时,仍然会引发异常。

即使我使用 TEXT 并且不显示这三个字段,也没有看到异常。

这件事也影响了我代码的另一部分。我正在将 jTable 中的数据传输到 Excel。当然,在使用 blob 时,垃圾值会被传输到 Excel 文件中。在使用 TEXT 时,“\n”在我的代码中以某种方式弄乱了,并且新行被赋予了相同的记录,因此整个对称性被弄乱了。在使用 BLOB 时,对称性非常好。

我在网上的某个地方看到,有时这个垃圾值实际上意味着什么,所以作为参考,我得到这个:

[B@5c1b24db
[B@deae877
[B@77e427db
[B@6351149e
[B@7191f56d
[B@7c59b580

那么,这里到底有什么问题呢?

4

2 回答 2

1

如果您不小心用 注释了实体关系,也会引发此错误@Basic

于 2015-06-17T18:32:39.463 回答
-1

一个常见的问题。您正在保留toString()Java 对象的值,而不是它的序列化形式。

为了将序列化的对象持久化到数据库中,您需要使用 Java 序列化框架。

如果您使用BLOB数据类型,则需要将 an 的字节写入ObjectOutputStreamBLOB如下所示:

    final Object thing = new Object();

    try (final ObjectOutputStream oos = new ObjectOutputStream(blob.setBinaryStream(1))) {
        oos.writeObject(thing);
    }

    final Object myNewThing;
    try(final ObjectInputStream ois = new ObjectInputStream(blob.getBinaryStream())) {
        myNewThing = ois.readObject();
    }

从您的例外看来,您正在使用 EclipseLink 将数据保存到 MySQL。如果是这种情况,那么您应该能够将字段映射为serializable数据类型,EclipseLink 将为您处理序列化/反序列化。

于 2013-08-01T13:26:32.993 回答