- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JSF 1.2 并尝试使用 <a4j:keepAlive beanName="reportController">
,但我不断收到此错误:
HTTP Status 500
Caused by: java.io.NotSerializableException: com.mysql.jdbc.DatabaseMetaData at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183
我正在尝试使用<a4j:keepAlive beanName="reportController">
因为当我搜索特定的报表,然后尝试对 dataTable 中的数据进行排序时,似乎会丢失 dataTable 中的所有数据。
最佳答案
Caused by: 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
, Statement
和ResultSet
也不将其属性作为类的实例变量。您应该尽快获取、使用和关闭它们,并且仅在方法本地范围内进行。从 ReportController
中删除这些实例变量bean,将它们移动到方法局部范围中,这个问题就会消失。只有DataSource
(服务器管理的连接池)作为实例变量是可以的。
public class ReportController implements Serializable {
@Resource("jdbc/someDB")
private DataSource dataSource;
public void someMethod() {
try (Connection connection = dataSource.getConnection()) { // OK.
// ...
}
}
// ...
}
<a4j:keepAlive>
并不完全是这个问题的原因。它只记住同一页面上跨 HTTP 回发请求的 HTTP session 中的 bean 实例。 HTTP session 属性本质上通常是序列化的。这个序列化只是触发并暴露了你隐藏的设计问题。 volatile 的一次性资源(例如数据库连接、语句、元数据、输入流、输出流等)绝对不应该是可序列化的,因此会出现此异常。
关于java.io.NotSerializedException : com. mysql.jdbc.DatabaseMetaData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35170752/
我将 JDBC 与 mysql-connector-java-6.0.2.jar 一起使用,并且除非我做错了什么,否则我认为 DatabaseMetaData.ownDeletesAreVisible
我有一个使用 JDBC-OBDC 的 Java 小应用程序的奇怪情况。我正在使用 DatabaseMetaData 类检查数据库。当我执行该程序时,一切正常。但是,当我想调试以查看包含 Databas
我在 Oracle 数据库中有一些用户,假设 UserOne、UserTwo 和 UserTree 具有相同且非空的表,名称为“tableExample”。 就我而言,我需要通过 getColumns
DatabaseMetaData().getTables() - 速度很慢,有什么替代方法吗? 以下是我的实际代码: connection.getMetaData().getTables(null,n
我在使用 Java 和 NetBeans 从本地运行的 Ubuntu 14 MySQL 连接检索元数据时遇到问题。我从 DatabaseMetaData 对象的 getColumns 方法得到一个空的
我正在使用 MySql、JDBC、Java 来编写我的代码。我无法理解 API 中某些术语的含义。它阻止我做下面的工作-要编写检查特定数据库是否存在的代码,然后检查该数据库中是否存在特定表数据库,然后
我知道如何使用 .getTables() 获取 TABLE 和 ALIAS 条目。 final ResultSet rs = dmd.getTables(null, "MySchema", "%",
元数据上的方法 getColumns() 为同义词返回一个空的结果集(对于表和 View ,它正确地返回列列表)。 这发生在 Oracle 11g Express 上并使用最新的 Oracle JDB
我正在研究 DatabaseMetaData 类以了解它是如何工作的。 java 文档注释似乎声明了一个 thing ,而代码却有所不同。我知道它是一个接口(interface),所以真正由提供 JD
我使用数据库元数据获取 SQL Server 上存储过程的列(读取参数): Connection connection = getConnection(); //getting the connect
trace_xe_action_map 和 trace_xe_event_map - 它们是什么以及它们在哪里?我不想归还那些。如何更改参数? 目前我正在使用: databaseMetadata.ge
我正在尝试 this 中解释的此接口(interface)的方法教程: 我来了: DatabaseMetaData dm = con.getMetaData(); System.err.println
我想使用 java DatabaseMetaData 获取外键并尝试过。 但我只得到外键引用 pk 列,无法引用唯一列。 我尝试使用 getCrossReference()、getImportedKe
我使用 oracle 11g,并创建了一个这样的表: create table test1( id int, name varchar(10), inserttime date ) 然后我用jdbc的
我正忙于编写一段代码以从 Oracle 数据库中获取表的所有列名。我想出的代码如下所示: DriverManager.registerDriver (new oracle.jdbc.driver.Or
我有一个 PostgreSQL 表 create table test ( id int, name varchar(2), active boolean, long_id bigint, creat
根据DatabaseMetaData#getFunctionColumns ,COLUMN_TYPE 的结果列可能是 之一 functionColumnUnknown (0) funtionColum
因此,我在一个需要能够编辑表格的项目中使用 Vaadin Java Web 框架。 Vaadin 提供了一种从 SimpleJDBCConnectionPool ( Here's the API )
什么是 Python 等价于 DatabaseMetaData 最佳答案 这不是特定于 python 的答案;事实上我不知道 Python 数据驱动程序是否有这种东西。但也许这些信息会有所帮助。 AN
我正在编写 java 类来获取所有连接数据库对象(表)。我用过 rs = meta.getExportedKeys(conn.getCatalog(), null, "account_adjustme
我是一名优秀的程序员,十分优秀!