JavaでSQLのテーブル名を引数にする方法

JavaでSQLのテーブル名を引数にする方法 SQL

今回JavaでSQLのテーブル名を引数にしようとしたらはまったのでメモ

はまった内容

今回はまったのはこのようなコード

String DEL_SQL = "DELETE FROM ? WHERE LOCATION LIKE ?)";
String table_name = "TABLE_A"
String country = "JP"

delPs = conn.prepareStatement(DEL_SQL);
delPs.setString(1, table_name);
delPs.setString(2, country + "%");
int delCnt = delPs.executeUpdate();
conn.commit();

これを実行すると、以下のエラーが出ます。

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1" 

$1なんてどこでも使ってないのに…

ここで実際にどのようなSQLが流れているか見てみます。

DELETE FROM 'TABLE_A' WHERE LOCATION LIKE 'JP%')

テーブル名にシングルクォートが入っているのが原因でした。

解決策

以下のようにコードを書き直すと解決します。

String DEL_SQL = "DELETE FROM $tablename WHERE LOCATION LIKE ?)";
String table_name = "TABLE_A"
String country = "JP"

DEL_SQL = DEL_SQL.replace("$tablename", table_name);
delPs = conn.prepareStatement(DEL_SQL);
delPs.setString(1, table_name);
delPs.setString(2, country + "%");
int delCnt = delPs.executeUpdate();
conn.commit();
タイトルとURLをコピーしました