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