プリペアドステートメントを使用してデータベースからエントリを削除するにはどうすればよいですか?私は次のコードを書かなければならないことに気づきました
String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?
しかし、複数の変数を持つ句を指定したいと思います。演算子を使用しましたAND
が、機能しないようです。
プリペアドステートメントを使用してデータベースからエントリを削除するにはどうすればよいですか?私は次のコードを書かなければならないことに気づきました
String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?
しかし、複数の変数を持つ句を指定したいと思います。演算子を使用しましたAND
が、機能しないようです。
構文が正しくない場合の例を次に示します。
DELETE DBUSER WHERE USER_ID = ? and USER_NAME = ?;
より多くの演算子を使用して、where 句にさらに条件を追加できますAND ...
。
または、単一のクエリで削除する USER_ID が複数ある場合..
DELETE DBUSER WHERE USER_ID in (?, ?, ?, ?);
動作する必要があります/たとえば
Select from Employee e where e.ID < ? and e.ID >= ? order by e.ID
値を設定するには、これを使用します。
int id1 = 1;
int id2 = 10;
preparedStatement.setInt(2, id1);
preparedStatement.setInt(1, id2);
削除には、次のコードを使用します。
public synchronized boolean deleteNewsById(Integer[] idList)
throws NewsManagerException {
DatabaseConnection connection = pool.getConnection();
StringBuffer buffer = new StringBuffer();
buffer.append("(");
buffer.append(idList[0]);
for (int i = 1; i < idList.length; i++) {
buffer.append(",");
buffer.append(idList[i]);
}
buffer.append(")");
PreparedStatement statement = connection
.getPreparedStatement(DELETE_NEWS_BY_ID + buffer);
}
SQLクエリは次のようになります
private static final String DELETE_NEWS_BY_ID = "delete from NEWS where ID in ";
または、最初の例のように単純な書き込みdelete from NEWS where ID in (?,?,?)
と値の設定
Aleksei Bulgak からの応答は正しいと思いますが、おそらくもっと簡単に言うと...次のようにパラメーターを設定できます。
String stmt = "DELETE DBUSER WHERE USER_ID = ? and (USER_NAME = ? or USER_NAME = ?)";
preparedStatement.setInt(1, firstParam);
preparedStatement.setString(2, secondParam);
preparedStatement.setString(3, thirdParam);
...そして、SQL 内のパラメーター (疑問符) の数に関係なく (IN を使用しているか、必要なものを使用しているかに関係なく)、ここで多くのパラメーターを設定する必要があります (int には setInt、String には setString を使用するなど)。これは、選択クエリと削除クエリに当てはまります。
私の例のように、WHERE 句で複数の値を指定できるIN演算子を探していますか。
String deleteSQL = "DELETE DBUSER WHERE USER_ID IN (?)"
ただし、PreparedStatement IN 句の代替案には、さまざまなバッチ処理アプローチの長所と短所について説明しているJDBC のバッチ ステートメントなど、見たいと思う有用な回答とリンクがいくつかあります。IN
私が提案しているアプローチは、その議論の一部です。最終的に、データベースへのトリップは削除ごとに 1 回ではなく 1 回だけになり、必要なネットワーク アクティビティが減少するため、パフォーマンスが向上します。