java - SQLite JDBC Connection.preparedStatement 中的 NullPointerException

标签 java sqlite nullpointerexception prepared-statement

我想要做的是从 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/

相关文章:

java - 如果控制台可以打印大于 2 的值,为什么控制台不会在 FOR 循环中打印小于 2 的 i 值?

java - 在 Windows 上用 Java 监控网络速度

java - 什么是NullPointerException,我该如何解决?

java - 我无法使用java类获取资源。错误: Attempt to invoke virtual method

java - 我们如何在Java中看到编译器生成的用于类型删除的字节码

sqlite - Couchbase Lite 如何使用 SQlite 处理 NoSQL 数据

python-3.x - 为什么我们在 sqlite SELECT 语句中的变量后面需要一个逗号?

android - 使用存储在 android sqlite 数据库中的数据作为 weka 的输入

java - 按钮的新 setText 属性无缘无故出现空指针异常

Java Spring PropertyPlaceholderConfigurer 以及如何修剪属性文件中的空格/制表符