我遇到了以下代码,我觉得它做错了:
(请注意,这是 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());
这是我关心的:
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));
}
但是我注意到数据库中有一些对应的数据类型(字段)是整数,还有日期,这样可以吗?
最佳答案
考虑使用 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);
}
}
关于java - PreparedStatement setString(...) for all,即使对应的数据类型是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610950/