3

JDBC で prepareStatement を使用してクエリを実行しています。実際の数字の代わりに「数字のウォルドカード」を挿入することがあります。

次のようなクエリを考えてみましょう。 Domains: a int, b text;

pStatement = 
    dbConnection.prepareStatement("SELECT * FROM R1 WHERE a LIKE ? AND b LIKE ?");

時々私はしたいと思います:

pStatement.setInt(1, 10);
pStatement.setString(2,"%");
pStatement.exequteQuery();

ワイルドカードは文字列なので問題ありません。

その他の場合:

pStatement.setInt(1, ANY_INT_SHOULD_BE_VALID);
pStatement.setString(2, "Hello");
pStatement.exequteQuery();

それはうまくいきません。クエリを変更して「a <> 0」などを使用することもできますが、これには追加のコードが必要で、prepareStatement の使用が不要になります。

実際のクエリを変更せずに、挿入された値のみを変更してこれを解決する方法はありますか?

4

1 に答える 1

2

クエリを変更して、「a <> 0」などを使用できます

あなたの要件では、これは である必要がありますa IS NOT NULL

ただし、これには追加のコードが必要であり、prepareStatement の使用が不要になります。

PreparedStatement は VARCHAR 列に最も必要であり、すべてのシナリオに存在するようです。

pStatement.setString(2,"%");

特別な意味を得るにLIKEは演算子が必要なため、これはすべての文字列と一致するわけではありません。%

実際のクエリを変更せずに、挿入された値のみを変更してこれを解決する方法はありますか?

いいえ、IMO、要件が根本的に異なるため、それに応じてクエリが必要になります。

于 2012-11-29T16:37:45.290 に答える