2012-04-18 83 views
0

我想要做的是從SQL語句中獲取ResultSet,然後從中獲取某些值。我似乎遇到的麻煩是準備在這條線上發生的準備好的聲明。SQLite的Connection.preparedStatement中的NullPointerException JDBC

String sql = "SELECT " + dataState + " FROM " + table + whereState + ";"; 
java.sql.PreparedStatement prep = conn.prepareStatement(sql); // Error here 

我已經檢查過變量conn不是null。語句中的所有值都不爲空,並且堆棧跟蹤顯示了這一點。

顯示java.lang.NullPointerException
在org.sqlite.PrepStmt。(PrepStmt.java:37)
在org.sqlite.Conn.prepareStatement(Conn.java:231)
在org.sqlite .Conn.prepareStatement(Conn.java:224)
在org.sqlite.Conn.prepareStatement(Conn.java:213)
在org.utilities.storagemethods.SQLiteMethod.load(SQLiteMethod.java:223)
在org.utilities.DataStore.load(DataManager.java:97)
at org.utilities.Test.main(Test.j ava:21)

sql語句的打印顯示它給出了這個。

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

您可以確定給定字符串中的值。

我想不通的是什麼,我做錯了造成這一點,如果你想了解什麼,我使用SQLite系統,你可以在這裏找到主頁:http://www.zentus.com/sqlitejdbc/

謝謝提前在這方面提供任何幫助。我完全被難住了。

注:爲了節省資源,我緩存了我的Connection,並在稍後重新使用它們。當我嘗試重新獲得連接時,它可以很好地工作。有沒有一種方法可以緩存它們,或者我是否需要在每次使用它時加載它們?

+0

無法想象你的問題是你要問什麼,有什麼。你的第一個SQL語句是完全錯誤的。你需要發佈一些相關的代碼。 – Lion 2012-04-18 02:48:33

+0

爲什麼你不使用你的SQL語句就像這樣'「SELECT dataState FROM table where State =?」; prep.setString(1,「Some State」);'? – Lion 2012-04-18 02:55:15

+0

變量'conn'不爲空,查看NPE正在發生的源代碼,因爲'conn.db();'返回null。你的連接配置是否正確?在連接創建期間檢查錯誤日誌中的異常。 – 2012-04-18 03:42:19

回答

0

如果沒有錯,我認爲這是因爲';'在你的SQL語句中。請刪除並重試?

問候, 代碼

+0

對不起,對我來說沒有這樣的運氣。 :/感謝您的重播,但。 – Mark 2012-04-18 02:49:05

2

背後,我得到這個錯誤,並且它造成的,因爲我已經關閉了連接。連接不是空的,它剛剛關閉。 ARRRGGG!就像OP暗示的那樣,我開始使用Zentus的示例代碼(現在是Xerial,因爲Zentus似乎已經關閉了)。示例代碼在關閉連接的地方有一個finally塊。一旦我拿出最後一塊,我的錯誤消失了。請記住在退出程序之前關閉連接。

要查看是否有同樣的問題,給出了錯誤的行權之前,嘗試添加

System.out.println("isClosed = " + conn.isClosed());