2016-12-01 17 views
1

JavaアプリケーションからFirebirdデータベースを照会しようとしています。このクエリには、2つの整数変数と1つの文字列が含まれます。クエリは次のようになります。jdbcファイヤーバード接続のSQLクエリに文字列変数を追加する方法

Statement statement = conn.createStatement(); 

ResultSet rs = statement.executeQuery("select * from table where 
    column1 < " + intvariable1 + " and ( 
    column2 > " + intvariable2 +" or column2 = 0) and 
    column3 = '" + stringvariable + "' "; 

Rs.next(); 
syso(rs.getInt(1)); 

ResultSetが空であることが表示されますが、私は、変数の代わりにハードコーディングされた文字列の値を使用するときに私が期待される結果を得ます。

私は同じ結果でpreparedstatementsでこれを試しました。これは文字列変数なしでしか動作しません。

私が間違っていることは何ですか?

EDIT:問題解決済み! StringvariableはBLOBフィールドから来て、その中に空の値がいくつかあります。トリム機能を呼び出すと削除されました。

+0

をあなたは文字列値を中心に、大手やクエリの末尾の空白を持つ – developer

+1

変数を通過したデータの問題のように思えます。準備されたステートメントを使用する方法を学んでください。 –

+0

使用する値と、返される予定のテーブルのデータを表示してください。そして、準備されたステートメントを使用して(正しく使用してください)、値をクエリ文字列に連結しないでください。 –

答えて

0

「column3」行には、開始見積りの後と終了見積りの前にスペースがあることに気付きました。空白で開始および終了する文字列と意図的に一致させようとしない限り、結果は見つかりません。ない場合は、スペースを切り出す:

column3 = '" + stringvariable + "' "; 
+0

これは私の電話でこれを書いたとき、「と」の違いを見るのはかなり難しいようですが、これは目的にかかっていました。 –

関連する問題