1

Connection で PreparedStatements を実行するクラスを次に示します。

public class doSomething {
    private PreparedStatement ps;

    public setPS (Connection conn) throws SQLException {
        String sql = "select * from table where id = ?";
        ps = conn.prepareStatement(sql);
    }

    public void runSomething(String var){
        ps.setString(1,var);
        ResultSet rs = ps.executeQuery();
        ...
    }
}

電話する

doSomethingInstance.setPS(conn);
doSomethingInstance.runSomething(var);

別のクラスから、これは例外をスローし、

 ResultSet rs = ps.executeQuery();

例外は SQLException: JZ0S4: Cannot execute an empty (zero-length) query です。準備されたステートメントで。理由がわかりません。ここで私が間違っていることを誰かが見ていますか?

ありがとう!

4

4 に答える 4

1

この問題は修正されました。データベースのアクセス許可に問題がありました。スタックトレースをキャッチして印刷する

 ResultSet rs = ps.executeQuery();

クエリによってアクセスされているテーブルが見つからなかったことを示しました。SQLException:JZ0S4:空の(長さがゼロの)クエリを実行できない理由がスローされている理由を理解する必要があります。

お手数をおかけしますが、よろしくお願いいたします。ローハン

于 2009-07-17T19:20:24.580 に答える
1

戻ってソース ファイルから直接コードをコピーし、質問を編集します。潜在的なあいまいさがあります。最初のフラグメントは、準備されたステートメント「preparedStatement」を呼び出し、次に「prepareStatement」に変更します (「d」なし)。ソースコードをきれいに見ることで、問題の切り分けが容易になります。2 つの変数がありますか、それとも例のタイプを間違えましたか?

[後で...] コードを更新していただきありがとうございます。明らかな問題は見られません。2 つのメソッドが期待どおりに呼び出されていることを確認するために、デバッガー (Eclipse など) を使用してステップ実行しましたか?

于 2009-07-17T17:05:44.290 に答える
0

クエリを実行する前に sql の内容を出力できますか? 内容が失われていると思います

于 2009-07-17T16:48:03.387 に答える
0

varは非 null ですか? varは正しい型ですか(String ではなく int だと思いますか?)

于 2009-07-17T17:50:55.727 に答える