【发布时间】:2017-05-13 18:41:54
【问题描述】:
我正在尝试将 CachedRowSet 与 SQLite 和 Xerial 驱动程序 https://bitbucket.org/xerial/sqlite-jdbc 一起使用。
如果我这样调用 execute() 方法:
Connection connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
CachedRowSet crs = new CachedRowSetImpl();
crs.setCommand("select * from person");
crs.execute(connection);
我收到“SQLite JDBC 驱动程序未实现”的 SQLException:
at com.sun.rowset.internal.CachedRowSetReader.readData(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.execute(Unknown Source)
at com.sun.rowset.CachedRowSetImpl.execute(Unknown Source)
at com.oracle.tutorial.jdbc.CachedRowSetSample.testPaging(CachedRowSetSample.java:100)
at com.oracle.tutorial.jdbc.CachedRowSetSample.main(CachedRowSetSample.java:273)
另一方面 ResultSet 和 populate() 而不是 excecute() 工作正常:
Connection connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
statement = connection.createStatement();
ResultSet rs = statement.executeQuery("select * from person");
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(rs);
有人知道execute()有什么问题吗?
【问题讨论】:
-
请发布完整的异常堆栈跟踪。另外:你为什么要使用
CachedRowSet,在我看来它相当有问题,而且很少有用。 -
上述异常来自 oracle 示例,我已经减少了编码,这里是完整的异常,但我认为没有新信息:
Exception in thread "main" java.sql.SQLException: not implemented by SQLite JDBC driver at com.sun.rowset.internal.CachedRowSetReader.readData(Unknown Source) at com.sun.rowset.CachedRowSetImpl.execute(Unknown Source) at First.rowSet1(First.java:33) at First.main(First.java:79) -
我预计会出现异常原因,其中包括在 SQLite 驱动程序中调用了哪个方法,该方法实际抛出“未由 SQLite JDBC 驱动程序实现”,但查看
CachedRowSetReader中的实际代码会抛出一个带有初始异常消息但未设置异常原因的新异常...正如我所说:在我看来,它有很多错误,而且很少有用。 -
非常感谢您的回答,您推荐哪个本地实现断开连接的 RowSet?
-
我认为这个问题可能是特定于 SQLite,oracle 的教程适用于 MySql。通过建立与 SQLite 的连接,某些选项可能很重要?
标签: java sqlite jdbc driver rowset