0

この形式でテーブル名を挿入できますか

String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);

挿入文と削除文も同じですか?

4

4 に答える 4

3

短い答えはノーです。しかし、あなたはこの方法でそれを行うことができます:

String update = "UPDATE " + tableName + " SET Status = ? WHERE Name = ?";
...
stmt.setString(1,status);
stmt.setString(2,name);

ただし、SQL インジェクションには注意してください。tableName が安全なソースからのものであることを確認してください。

于 2013-03-13T12:36:27.730 に答える
1

通常、これは以下のように行います...

    String sql = "UPDATE " + tableName " SET Status = ? WHERE Name = ?";

    PreparedStatement stmt = null;

    try {
        stmt = connection.prepareStatement(sql);
        stmt.setString(1, status);
        stmt.setString(2, name);
        stmt.executeUpdate();
    } finally {
        if (stmt != null) {
            stmt.close();
        }
    }
于 2013-03-13T12:36:01.200 に答える
0

いいえ、準備済みステートメントを確実に使用しているため、これを行うことはできません。これを行うことができない理由は、PreparedStatement が事前にコンパイルされているため、変更するテーブル (DML を使用するデータ) または構造的に (DDL を使用する) 必要があるためです。テーブルのテーブル名に言及しない場合、ステートメントはどのようにプリコンパイルされるのでしょうか?

必要に応じて動的 SQL を使用できますが、その場合は PreparedStatement を使用する必要はなく、より単純な実装ステートメントを使用して使用できます。

これが役に立てば幸いです!!

于 2013-03-13T12:59:20.583 に答える