Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kann eine LIKE-Abfrage nicht in einem JDBC PreparedStatement verwenden?

Zuerst das PreparedStatement Platzhalter (diese ? Dinge) sind für Spaltenwerte nur, nicht für Tabellennamen, Spaltennamen, SQL-Funktionen/-Klauseln usw. Verwenden Sie besser String#format() stattdessen. Zweitens sollten Sie nicht zitieren Sie die Platzhalter wie '?' , würde es nur die letzte Abfrage verfälschen. Das PreparedStatement Setter erledigen bereits die Zitier- (und Escape-) Arbeit für Sie.

Hier ist das feste 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");

So verwenden Sie es:

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%");

Siehe auch :

  • Sun JDBC-Lernprogramm:Vorbereitete Anweisungen verwenden
  • Zeichenkettensyntax formatieren