この形式でテーブル名を挿入できますか
String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);
挿入文と削除文も同じですか?
この形式でテーブル名を挿入できますか
String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);
挿入文と削除文も同じですか?
短い答えはノーです。しかし、あなたはこの方法でそれを行うことができます:
String update = "UPDATE " + tableName + " SET Status = ? WHERE Name = ?";
...
stmt.setString(1,status);
stmt.setString(2,name);
ただし、SQL インジェクションには注意してください。tableName が安全なソースからのものであることを確認してください。
通常、これは以下のように行います...
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();
}
}
いいえ、準備済みステートメントを確実に使用しているため、これを行うことはできません。これを行うことができない理由は、PreparedStatement が事前にコンパイルされているため、変更するテーブル (DML を使用するデータ) または構造的に (DDL を使用する) 必要があるためです。テーブルのテーブル名に言及しない場合、ステートメントはどのようにプリコンパイルされるのでしょうか?
必要に応じて動的 SQL を使用できますが、その場合は PreparedStatement を使用する必要はなく、より単純な実装ステートメントを使用して使用できます。
これが役に立てば幸いです!!