Tout d'abord, le PreparedStatement
espaces réservés (ceux ?
choses) sont pour les valeurs de colonne uniquement, pas pour les noms de table, les noms de colonne, les fonctions/clauses SQL, etc. Mieux vaut utiliser String#format()
Au lieu. Deuxièmement, vous ne devriez pas citez les espaces réservés comme '?'
, cela ne ferait que malformer la requête finale. Le PreparedStatement
les setters font déjà le travail de citation (et d'échappement) pour vous.
Voici le SQL corrigé :
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");
Voici comment l'utiliser :
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%");
Voir aussi :
- Tutoriel Sun JDBC :Utilisation d'instructions préparées
- Syntaxe de chaîne de format