Oracle
 sql >> Base de données >  >> RDS >> Oracle

Impossible d'utiliser une requête LIKE dans un état préparé JDBC ?

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