我想要做的是从 SQL 语句中获取 ResultSet,然后我可以从中导出某些值。我似乎遇到的麻烦是准备这一行发生的准备好的语句。
String sql = "SELECT " + dataState + " FROM " + table + whereState + ";";
java.sql.PreparedStatement prep = conn.prepareStatement(sql); // Error here
我已经检查过变量 conn 不为空。语句中的所有值都不为空,堆栈跟踪显示了这一点。
java.lang.NullPointerException
at org.sqlite.PrepStmt.(PrepStmt.java:37)
at org.sqlite.Conn.prepareStatement(Conn.java:231)
at org.sqlite.Conn.prepareStatement(Conn.java:224)
at org.sqlite.Conn.prepareStatement(Conn.java:213)
at org.utilities.storagemethods.SQLiteMethod.load(SQLiteMethod.java:223)
at org.utilities.DataManager.load(DataManager.java:97)
at org.utilities.Test.main(Test.java:21)
sql 语句的打印显示它给出了这个。
SELECT testString, testBool, testObj FROM testTable WHERE testInt=?;
您可以确定给定字符串中的值。
我不明白的是我做错了什么导致了这个问题,如果你对我使用的sqlite系统感到好奇,你可以在这里找到主页:http://www.zentus.com/sqlitejdbc/
预先感谢您对此提供的任何帮助。我完全被难住了。
注意:为了节省资源,我缓存了我的连接,并在以后重新使用它们。当我尝试重新建立连接时,它工作得很好。有没有办法可以缓存它们,或者我需要在每次使用时加载它们?
最佳答案
我收到此错误,这是因为我关闭了连接而引起的。连接不为空,只是关闭了。啊啊啊!就像OP暗示的那样,我从Zentus的示例代码开始(现在是Xerial,因为Zentus似乎已经关闭了)。示例代码有一个finally block ,他在其中关闭连接。一旦我取出finally block ,我的错误就消失了。请记住在退出程序之前关闭连接。
要查看您是否有同样的问题,请在出现错误的行之前尝试添加
System.out.println("isClosed = " + conn.isClosed());
关于java - SQLite JDBC Connection.preparedStatement 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201939/