0

プリペアドステートメントを使用してデータベースからエントリを削除するにはどうすればよいですか?私は次のコードを書かなければならないことに気づきました

String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?

しかし、複数の変数を持つ句を指定したいと思います。演算子を使用しましたANDが、機能しないようです。

4

4 に答える 4

1

構文が正しくない場合の例を次に示します。

DELETE DBUSER WHERE USER_ID = ? and USER_NAME = ?;

より多くの演算子を使用して、where 句にさらに条件を追加できますAND ...

または、単一のクエリで削除する USER_ID が複数ある場合..

DELETE DBUSER WHERE USER_ID in (?, ?, ?, ?);
于 2013-02-21T13:21:31.480 に答える
1

動作する必要があります/たとえば

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 (?,?,?)と値の設定

于 2013-02-21T13:19:13.103 に答える
0

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 を使用するなど)。これは、選択クエリと削除クエリに当てはまります。

于 2013-02-21T13:52:37.550 に答える
0

私の例のように、WHERE 句で複数の値を指定できるIN演算子を探していますか。

String deleteSQL = "DELETE DBUSER WHERE USER_ID IN (?)"

ただし、PreparedStatement IN 句の代替案には、さまざまなバッチ処理アプローチの長所と短所について説明しているJDBC のバッチ ステートメントなど、見たいと思う有用な回答とリンクがいくつかあります。IN私が提案しているアプローチは、その議論の一部です。最終的に、データベースへのトリップは削除ごとに 1 回ではなく 1 回だけになり、必要なネットワーク アクティビティが減少するため、パフォーマンスが向上します。

于 2013-02-21T13:20:32.057 に答える