Đầu tiên, PreparedStatement
trình giữ chỗ (những ?
thứ) dành cho giá trị cột chỉ, không dành cho tên bảng, tên cột, hàm / mệnh đề SQL, vân vân. Sử dụng tốt hơn String#format()
thay thế. Thứ hai, bạn không nên trích dẫn các trình giữ chỗ như '?'
, nó sẽ chỉ làm sai định dạng truy vấn cuối cùng. PreparedStatement
setters đã thực hiện công việc trích dẫn (và thoát) cho bạn.
Đây là SQL cố định:
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");
Đây là cách sử dụng nó:
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%");
Xem thêm :
- Hướng dẫn của Sun JDBC:Sử dụng câu lệnh soạn sẵn
- Định dạng cú pháp chuỗi