【问题标题】:Error in my code?我的代码错误?
【发布时间】:2013-08-01 13:19:52
【问题描述】:

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

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

所以,我尝试将这些字段的数据类型更改为 TEXT。这会引发异常。像这样的东西(Issue 是一个字段,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

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

【问题讨论】:

  • 你说的那个垃圾hashcode!!
  • toString() 方法。
  • 那我该怎么解决呢?我在 Java 代码中将问题用作字符串。
  • 如果您发布 EclipseLink 映射文件或带注释的类,我们可以提供更多帮助。
  • 我是 Java 新手,基本上添加了我的 MYSQL 数据库(tenderdetails),其中添加了以下内容:EclipseLink (JPA 2.1):eclipselink.jar; javax.persistence_2.1.0.v201304241213.jar; org.eclipse.persistence.jpa.jpql_2.5.0.v20130507-3faac2b.jar。这有什么帮助吗?

标签: java mysql database jtable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

        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 将为您处理序列化/反序列化。

    【讨论】:

    • 其实我对序列化一无所知。只是在读它。 Java 的新手。
    • 你能解释一下你上面写的代码吗?说,我有字段问题,正如我上面所说的......如何使用您编写的代码实现序列化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2021-08-15
    • 2011-07-06
    相关资源
    最近更新 更多