1

我想要做的是从 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)
在 org.utilities.storagemethods.SQLiteMethod.load(SQLiteMethod.java:223)
在 org.utilities.DataManager.load(DataManager.java:97)
在 org.utilities .Test.main(Test.java:21)

sql 语句的打印显示它给出了这个。

SELECT testString, testBool, testObj FROM testTable WHERE testInt=?;

您可以从给定的字符串中确定值。

我想不通的是我做错了什么,如果你对我使用的 sqlite 系统感到好奇,你可以在这里找到主页:http ://www.zentus.com/ sqlitejdbc/

提前感谢您对此的任何帮助。我完全被难住了。

注意:为了节省资源,我缓存了我的连接,并在以后重新使用它们。当我尝试重新获得连接时,它工作得很好。有没有办法可以缓存它们,或者每次我想使用它时都需要加载它们?

4

2 回答 2

3

我收到此错误,这是因为我关闭了连接。连接不是空的,它只是关闭了。阿雷格!就像 OP 暗示的那样,我从 Zentus 的示例代码开始(现在是 Xerial,因为 Zentus 似乎已经关闭)。示例代码有一个 finally 块,他在其中关闭连接。一旦我取出 finally 块,我的错误就消失了。请记住在退出程序之前关闭连接。

要查看您是否有同样的问题,在给出错误的行之前,尝试添加

System.out.println("isClosed = " + conn.isClosed());
于 2012-09-17T20:53:38.417 回答
0

如果没有错,我认为是因为';' 在您的 SQL 语句中。请删除并重试?

问候,背后的代码

于 2012-04-18T02:30:50.730 回答