Oracle
 sql >> Database >  >> RDS >> Oracle

Non è possibile utilizzare una query LIKE in una PreparedStatement JDBC?

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