Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Não é possível usar uma consulta LIKE em um JDBC PreparedStatement?


Primeiro, o PreparedStatement espaços reservados (aqueles ? coisas) são para valores de coluna apenas, não para nomes de tabelas, nomes de colunas, funções/cláusulas SQL, etc. Melhor usar String#format() em vez de. Em segundo lugar, você não cite os espaços reservados como '?' , isso apenas malformaria a consulta final. A PreparedStatement os setters já fazem o trabalho de citação (e escape) para você.

Aqui está o SQL fixo:
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");

Aqui está como usá-lo:
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%");

Veja também :
  • Tutorial Sun JDBC:como usar declarações preparadas
  • Sintaxe da string de formato