Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData_Java_Mysql_Jsf_Serialization_Jdbc - Fatal编程技术网

java.io.NotSerializableException:com.mysql.jdbc.DatabaseMetaData

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

我正在使用JSF 1.2,并试图使用
,但我不断遇到以下错误:

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个“请参阅”链接。它已起作用。谢谢,我们将开始应用此新方法。