sql >> Databáze >  >> RDS >> Oracle

Nemůžete použít dotaz LIKE v JDBC PreparedStatement?

Nejprve PreparedStatement zástupné symboly (tyto ? věci) jsou pro hodnoty sloupců pouze, ne pro názvy tabulek, názvy sloupců, funkce/klauzule SQL atd. Je lepší použít String#format() namísto. Zadruhé, neměli byste citujte zástupné symboly jako '?' , pouze by to poškodilo konečný dotaz. PreparedStatement seteři již za vás dělají práci s citacemi (a escapováním).

Zde je opravený 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");

Zde je návod, jak jej používat:

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

Viz také :

  • Výukový program Sun JDBC:Použití připravených příkazů
  • Formátování syntaxe řetězce


  1. Pochopení skupiny dostupnosti Always ON mezi instancemi SQL Serveru na bázi Linuxu. Část 1

  2. Rozdíl časových razítek v hodinách pro PostgreSQL

  3. Rozdělit řetězec podle pozice oddělovače pomocí Oracle SQL

  4. Nastavení časového pásma relace pomocí jara jdbc oracle