Java 我的代码中有错误吗?

Java 我的代码中有错误吗?,java,mysql,database,jtable,Java,Mysql,Database,Jtable,我正在创建一个具有登录页面的应用程序,要求用户输入详细信息。用户可以查看他/她输入的详细信息,管理员可以查看输入的所有详细信息。我使用MYSQL来实现这一点,并使用NetBeans来创建所需的表单 现在,我想从一个名为tenderdetails的数据库(带有表calldetails)将数据导入表单中的表中。最初,我将其中三个字段的数据类型设置为BLOB。在导入数据时,我在这些字段中得到了垃圾值 所以,我尝试将这些字段的数据类型更改为文本。这会引发异常。类似这样的内容(问题是一个字段,AAI包)

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

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

所以,我尝试将这些字段的数据类型更改为文本。这会引发异常。类似这样的内容(问题是一个字段,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]. at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:75) at org.eclipse.persistence.internal.helper.Helper.buildBytesFromHexString(Helper.java:265) 
当我为这些字段使用数据类型BLOB时,这些异常再次被删除。当我将此数据类型更改为VARCHAR时,仍然会引发异常

即使我使用文本并且不显示这三个字段,也不会看到异常

这件事也会影响我代码的另一部分。我正在将jTable中的数据传输到Excel。当然,在使用blob时,垃圾值会被传输到Excel文件中。在使用文本时,我的代码中的“\n”不知怎么搞砸了,新行被赋予了同一条记录,因此整个对称性都被搞砸了。使用BLOB时,对称性绝对良好

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

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

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

这是一个常见的问题。您正在持久化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。如果是这种情况,那么您应该能够将字段映射为可序列化的数据类型,EclipseLink将为您处理序列化/反序列化。

如果您意外地将实体关系注释为
@Basic

,您所指的垃圾是
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很陌生。你能解释一下你上面写的代码吗?比如,我有现场问题,正如我上面所说的。。。如何使用您编写的代码实现序列化?
[B@5c1b24db
[B@deae877
[B@77e427db
[B@6351149e
[B@7191f56d
[B@7c59b580
    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();
    }