Innanzitutto, il PreparedStatement
segnaposto (quelli ?
cose) sono per valori di colonna solo, non per nomi di tabelle, nomi di colonne, funzioni/clausole SQL, ecc. Usa meglio String#format()
invece. Secondo, dovresti non cita i segnaposto come '?'
, costituirebbe solo una query finale errata. Il PreparedStatement
i setter fanno già il lavoro di citazione (e di escape) per te.
Ecco l'SQL fisso:
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");
Ecco come usarlo:
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%");
Vedi anche :
- Esercitazione Sun JDBC:utilizzo delle dichiarazioni preparate
- Formatta la sintassi della stringa