Oh *_*oon 8 java jdbc prepared-statement
我遇到过以下代码,我觉得它做错了:
(请注意,这是JDK 1.4.2,因此列表未键入)
StringBuffer queryBuffer = new StringBuffer();
ArrayList temp = new ArrayList();
...
queryBuffer.append("and sb.POSTCODE = ? ");
temp.add(postcode);
...
conn = ConnectionManager.getConnection();
pstmt = conn.prepareStatement(queryBuffer.toString());
Run Code Online (Sandbox Code Playgroud)
这就是我所关注的:
for(int i=0; i<temp.size(); i++) {
log.debug("setString("+ (i+1) + "," + (String)temp.get(i) + ")");
pstmt.setString(i+1, (String)temp.get(i));
}
Run Code Online (Sandbox Code Playgroud)
但我已经注意到数据库中的一些相应的数据类型(字段)是整数,而日期,这样会好吗?
考虑使用PreparedStatement setObject()方法而不是setString().
如果在编译时类型未知,PreparedStatement setObject()将尝试为您转换任何java.lang类型.
所以使用更新的for循环(假设你有java 5.0)和泛型null处理:
int i = 0;
for(Object value : temp) {
if (value == null) {
// set null parameter if value type is null and type is unknown
pstmt.setNull(++i, Integer.MIN_VALUE);
} else {
pstmt.setObject(++i, value);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果已知,setNull()可以接受类型作为第二个参数.
| 归档时间: |
|
| 查看次数: |
6472 次 |
| 最近记录: |