1

これは失敗します:
db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE '?%'");

?は値のプレースホルダーとして認識されないためです。これをどのように回避する必要がありますか?

4

3 に答える 3

6

次のように、ステートメントではなく、変数にワイルドカードを入力します。

stmt = db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?");
stmt.setString(1, "myterm%");
于 2012-12-28T20:25:34.100 に答える
0

LIKEパラメーターの一部としてパーセント記号を含めてみてください。

db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?"); 

クエリはあまり好きではありません。このようにテーブルと列を連結することで、あまり節約できないと思います。

于 2012-12-28T20:27:42.730 に答える
0

CONCAT()値を関数に渡します。

db.prepareStatement("SELECT * FROM " + table 
    + " WHERE " + column 
  + " LIKE CONCAT(?, '%')");

この方法の利点は、呼び出しを行うコードがパラメーターがLIKEで使用されていることを知る必要がないため、他の非LIKEクエリで同じパラメーター値を使用できることです。

于 2012-12-28T20:47:26.410 に答える