Pertama, PreparedStatement
placeholder (?
hal) adalah untuk nilai kolom saja, bukan untuk nama tabel, nama kolom, fungsi/klausa SQL, dan sebagainya. Lebih baik gunakan String#format()
sebagai gantinya. Kedua, Anda seharusnya tidak kutip placeholder seperti '?'
, itu hanya akan merusak kueri akhir. PreparedStatement
setter sudah melakukan pekerjaan mengutip (dan melarikan diri) untuk Anda.
Inilah SQL yang diperbaiki:
private static final String SQL = "select instance_id, %s from eam_measurement"
+ " where resource_id in (select RESOURCE_ID from eam_res_grp_res_map where"
+ " resource_group_id = ?) and DSN like ? order by 2");
Berikut cara menggunakannya:
String sql = String.format(SQL, "SUBSTR(DSN,27,16)"); // This replaces the %s.
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, defaultWasGroup);
preparedStatement.setString(2, "%Module=jvmRuntimeModule:freeMemory%");
Lihat juga :
- Tutorial Sun JDBC:Menggunakan Pernyataan yang Disiapkan
- Format sintaks string