1

私がやろうとしているのは、SQL ステートメントから ResultSet を取得し、そこから特定の値を導き出すことです。私が問題を抱えているように見えるのは、この行で発生する準備済みステートメントの準備です。

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

変数 conn が null でないことは既に確認済みです。ステートメント内のすべての値が null ではなく、スタック トレースがこれを示しています。


org.sqlite.PrepStmt.(PrepStmt.java:37) のjava.lang.NullPointerException
org.sqlite.Conn.prepareStatement(Conn.java:231)
org.sqlite.Conn.prepareStatement(Conn.java:224)
でorg.utilities.storagemethods.SQLiteMethod.load(SQLiteMethod.java:223) で org.utilities.DataManager.load(DataManager.java:97) で org.utilities
で org.sqlite.Conn.prepareStatement(Conn.java:213) .Test.main(Test.java:21)

sql ステートメントを印刷すると、これが得られることがわかります。

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

指定された文字列から値を確認できます。

私が理解できないのは、これを引き起こすために私が間違っていることです.私が使用しているsqliteシステムに興味がある場合は、ここでホームページを見つけることができます: http://www.zentus.com/ sqlitejdbc/

これについて何か助けてくれてありがとう。私は完全に困惑しています。

注: リソースを節約するために、接続をキャッシュし、後で再利用していました。接続を再取得しようとすると、完全に機能します。それらをキャッシュする方法はありますか、または使用するたびにロードする必要がありますか?

4

2 に答える 2

3

このエラーが発生していましたが、接続を閉じたことが原因でした。接続は null ではなく、閉じられただけです。あらっぐっ!OPが示唆したように、Zentusのサンプルコードから始めました(Zentusがシャットダウンしたように見えるため、現在はXerialです)。サンプル コードには、接続を閉じる finally ブロックがあります。finally ブロックを削除すると、エラーが消えました。プログラムを終了する前に、接続を閉じることを忘れないでください。

同じ問題があるかどうかを確認するには、エラーが発生した行の直前に追加してみてください

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

間違っていなければ、「;」のせいだと思います あなたのSQL文の中に。削除してからやり直してください。

よろしく、コードビハインド

于 2012-04-18T02:30:50.730 に答える