1

我正在尝试序列化准备好的语句并将其作为对象存储在文件中,但是我的 sql 驱动程序创建的对象的类型为“SQLServerPreparedStatement”并且不可序列化,因此我尝试扩展它,但是在覆盖它时它给了我一个错误构造函数说构造函数不可见。关于如何解决这个问题的任何想法?PS:我的主要目标是将准备好的语句对象存储在文件中,然后将它们作为准备好的语句检索。下面是我的代码:

public class WMPreparedStatements extends SQLServerPreparedStatement
{

WMPreparedStatements(SQLServerConnection arg0, String arg1, int arg2,
        int arg3) throws SQLServerException {
    super(arg0, arg1, arg2, arg3);
    // TODO Auto-generated constructor stub
}

}
4

2 回答 2

2

JDBC 对象(Connection、PreparedStatement、ResultSet 等)未声明为扩展 Serializable。程序中的 PreparedStatement 是 JDBC 驱动程序提供的实现。

使这个 PreparedStatement 可序列化意味着您将能够将其保存在一个文件中,然后从该文件中恢复它。但是您也应该对创建它的连接执行相同的操作(在您的情况下为 SQLServerConnection)。JDBC 连接强烈依赖于底层网络通信。使 PreparedStatement 可序列化意味着在某个场景中,您将在事务中执行 PreparedStatement,然后您将序列化 PreparedStatement 而无需提交,之后您将能够反序列化 PreparedStatement 并提交。这样的场景是不可能的。

为什么要序列化 ​​PreparedStatement?存储 SQL 字符串和参数,然后从文件中读取它们,打开一个新连接,使用您读取的语句创建一个新的 PreparedStatement 对象,设置它的参数并执行它,这还不够吗?

于 2013-05-20T18:59:28.600 回答
0

好吧,不可能将准备好的语句对象存储在文件中并以这种方式维护数据,我不得不采取一种解决方法。我存储了我构建但尚未设置的语句(具有“?”)以及附加到它的参数,这些参数由一组特殊且唯一的字符分隔,因此当我下次读取文件时,每个查询及其参数在单独的行上,我解析每一行以获取值,然后将查询存储在准备好的语句中并设置其参数。

于 2013-05-22T14:07:45.437 回答