2009-07-17 11 views
1

ConnectionはPreparedStatementsをConnectionで実行しているクラスを強調します。SQLException:JZ0S4:空の(長さゼロの)照会を実行できません。準備されたステートメントで

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(); 
     ... 
    } 
} 

例外のSQLExceptionで、私は別のクラスから

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

を呼び出し、これは

ResultSet rs = ps.executeQuery(); 

で投げると例外:JZ0S4:空(長さがゼロ)クエリを実行することはできません。準備された声明に。私は理由を理解できない。誰かがここで間違って何をしているのか分かりますか?

ありがとうございます!

+0

非常に奇妙なことに、ステートメントが本当に空の場合は、最初にsetString()を使うべきではありません。あなたはそれが正しい/完全なコードであると確信していますか? ( "public setPS(..."はコンパイルすべきではありません:戻り値のタイプがありません)どのデータベースを使用しているのか分かりませんが、 "table"はテーブルの名前ではありません。 ) –

答えて

1

この問題は修正されています。データベース権限に問題がありました。スタックトレースをキャッチして印刷すると、クエリによってアクセスされているテーブルが見つからないことが示されました。

私はまだSQLJException理由を把握する必要があります:JZ0S4:空の(長さゼロの)クエリを実行できませんがスローされます。

お時間をいただきありがとうございます。 Rohan

0

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

+0

@rohangter:このAPIはわかりませんが、あなたとは異なるクエリを実行していますか? –

1

元に戻ってソースファイルから直接コードをコピーして、あなたの質問を編集してください。潜在的なあいまいさがあります。最初のフラグメントはprepared prepared statement "preparedStatement"を呼び出し、次に "prepareStatement"( "d"なし)に変更します。あなたのソースコードをきれいに見ることで、問題を簡単に分離することができます。あなたは2つの変数を持っていますか、あるいはあなたの例を誤って入力しましたか?

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

+0

私はオブジェクト名を修正しました。 –

0

varはnullではありませんか? varが正しいタイプ(intと思われる文字列ではなくint)ですか?

関連する問題