java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData
我正在使用JSF 1.2,并试图使用java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData,java,mysql,jsf,serialization,jdbc,Java,Mysql,Jsf,Serialization,Jdbc,我正在使用JSF 1.2,并试图使用,但我不断遇到以下错误: HTTP状态500 原因:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1183 我尝试使用,因为当我搜索特定的报表,然后尝试对数据表中的数据进行排序时,它似乎丢失了数据表中的所有数据 原因:java.io.NotSeri
,但我不断遇到以下错误:
HTTP状态500
原因:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1183 我尝试使用
,因为当我搜索特定的报表,然后尝试对数据表中的数据进行排序时,它似乎丢失了数据表中的所有数据
原因:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData 当您获得
java.sql.Connection
或甚至直接将DatabaseMetaData
作为可序列化类的实例变量时,就会发生这种情况,如下所示
public class ReportController implements Serializable {
private Connection connection; // BAD!!
private DatabaseMetaData metadata; // BAD!!
// ...
}
您不应该声明和获取外部资源,如java.sql.Connection
,语句
和结果集
,也不应该将其属性声明和获取为类的实例变量。您应该尽快获取、使用并关闭它们,只在方法本地范围内。清除这些实例变量b从ReportController
bean中删除,将它们移动到方法本地范围,此问题将消失。只有DataSource
(服务器管理的连接池)作为实例变量才可以
public class ReportController implements Serializable {
@Resource("jdbc/someDB")
private DataSource dataSource;
public void someMethod() {
try (Connection connection = dataSource.getConnection()) { // OK.
// ...
}
}
// ...
}
原因:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData
当您获得java.sql.Connection
或甚至直接将DatabaseMetaData
作为可序列化类的实例变量时,就会发生这种情况,如下所示
public class ReportController implements Serializable {
private Connection connection; // BAD!!
private DatabaseMetaData metadata; // BAD!!
// ...
}
您不应该声明和获取外部资源,如java.sql.Connection
,语句
和结果集
,也不应该将其属性声明和获取为类的实例变量。您应该尽快获取、使用并关闭它们,只在方法本地范围内。清除这些实例变量b从ReportController
bean中删除,将它们移动到方法本地范围,此问题将消失。只有DataSource
(服务器管理的连接池)作为实例变量才可以
public class ReportController implements Serializable {
@Resource("jdbc/someDB")
private DataSource dataSource;
public void someMethod() {
try (Connection connection = dataSource.getConnection()) { // OK.
// ...
}
}
// ...
}
500是一个内部服务器错误。请查看由以下原因引起的日志文件:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1183使用edit funktion将stacktrace和相关代码添加到您的问题中。500是一个内部服务器错误。请查看您的日志文件,原因是:java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData位于java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183使用编辑函数将stacktrace和相关代码添加到您的问题中。我有一个DbUtil类,该类有一个返回连接对象的方法,以便我使用一个类处理连接。public Connection getConnection(){}异常表示您将它作为实例变量保存在某个地方,如第1个代码段所示。这是一个糟糕的设计。如果您想了解更多详细信息,请参阅第1个“另请参阅”已经成功了。谢谢,我将开始应用这种新方法。我有一个DbUtil类,它有一个返回连接对象的方法,这样我就可以使用一个类来处理连接。public Connection getConnection(){}异常表示您将它作为实例变量保存在某个地方,如第1个代码段中所示。这是一个糟糕的设计。如果您想了解更多详细信息,请参阅第1个“请参阅”链接。它已起作用。谢谢,我们将开始应用此新方法。