sql >> Database >  >> RDS >> Oracle

Kunt u een LIKE-query niet gebruiken in een JDBC PreparedStatement?

Eerst de PreparedStatement tijdelijke aanduidingen (die ? dingen) zijn voor kolomwaarden alleen, niet voor tabelnamen, kolomnamen, SQL-functies/clausules, enzovoort. Gebruik beter String#format() in plaats van. Ten tweede moet u niet citeer de tijdelijke aanduidingen zoals '?' , het zou alleen de laatste query misvormen. De PreparedStatement zetters doen het citeren (en ontsnappen) al voor je.

Hier is de vaste 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");

Hier is hoe het te gebruiken:

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

Zie ook :

  • Sun JDBC-zelfstudie:voorbereide verklaringen gebruiken
  • Syntaxis voor tekenreeksen opmaken


  1. MySQL LIKE IN()?

  2. Dichtstbijzijnde match, deel 1

  3. MySQL - FOUT 1045 - Toegang geweigerd

  4. Hoe kom ik erachter of een Oracle-database is ingesteld op autocommit?