首先,
PreparedStatement占位符(那些占位符
?)仅用于 列值
,而不用于表名,列名,SQL函数/子句等。最好
String#format()改用。其次,你应该
不 引用占位符一样
'?',它只会malform最终的查询。的
PreparedStatement制定者已经做了引用(和转义)的工作适合你。
这是固定的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");
使用方法如下:
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%");
另请参阅 :
- Sun JDBC教程:使用准备好的语句
- 格式字符串语法



