Najpierw PreparedStatement
symbole zastępcze (te ?
rzeczy) dotyczą wartości kolumn nie dotyczy tylko nazw tabel, nazw kolumn, funkcji/klauzul SQL itp. Lepiej użyj String#format()
zamiast. Po drugie, nie zacytuj symbole zastępcze, takie jak '?'
, zniekształciłoby to tylko końcowe zapytanie. PreparedStatement
setery już wykonują za Ciebie cytowanie (i ucieczkę).
Oto poprawiony SQL:
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");
Oto jak z niego korzystać:
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%");
Zobacz też :
- Samouczek Sun JDBC:Korzystanie z przygotowanych instrukcji
- Formatuj składnię ciągu znaków