sql >> Base de Datos >  >> RDS >> Oracle

¿No puede usar una consulta LIKE en un JDBC PreparedStatement?

Primero, el PreparedStatement marcadores de posición (esos ? cosas) son para valores de columna solo, no para nombres de tablas, nombres de columnas, funciones/cláusulas de SQL, etcétera. Mejor usa String#format() en cambio. En segundo lugar, no cita los marcadores de posición como '?' , solo deformaría la consulta final. La PreparedStatement los setters ya hacen el trabajo de citar (y escapar) por usted.

Aquí está el SQL fijo:

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

Así es como se usa:

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

Ver también :

  • Tutorial de Sun JDBC:Uso de declaraciones preparadas
  • Sintaxis de cadena de formato