これは失敗します:db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE '?%'");
?
は値のプレースホルダーとして認識されないためです。これをどのように回避する必要がありますか?
これは失敗します:db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE '?%'");
?
は値のプレースホルダーとして認識されないためです。これをどのように回避する必要がありますか?
次のように、ステートメントではなく、変数にワイルドカードを入力します。
stmt = db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?");
stmt.setString(1, "myterm%");
LIKEパラメーターの一部としてパーセント記号を含めてみてください。
db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?");
クエリはあまり好きではありません。このようにテーブルと列を連結することで、あまり節約できないと思います。
CONCAT()
値を関数に渡します。
db.prepareStatement("SELECT * FROM " + table
+ " WHERE " + column
+ " LIKE CONCAT(?, '%')");
この方法の利点は、呼び出しを行うコードがパラメーターがLIKEで使用されていることを知る必要がないため、他の非LIKEクエリで同じパラメーター値を使用できることです。