sql >> Databasteknik >  >> RDS >> Oracle

Kan du inte använda en LIKE-fråga i en JDBC PreparedStatement?

Först, PreparedStatement platshållare (dessa ? saker) är för kolumnvärden endast, inte för tabellnamn, kolumnnamn, SQL-funktioner/-satser, etcetera. Använd bättre String#format() istället. För det andra bör du inte citera platshållarna som '?' , det skulle bara felforma den slutliga frågan. PreparedStatement sättare gör redan offertjobbet (och flykting) åt dig.

Här är den fasta 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");

Så här använder du det:

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

Se även :

  • Sun JDBC handledning:Använda förberedda uttalanden
  • Formatera strängsyntax


  1. TIMESTAMPADD() Exempel – MySQL

  2. SQL Server-stödda versioner Matrix

  3. Hur man gör detta i Laravel, underfråga var i

  4. Installera SQL Server Agent Extension på Azure Data Studio