gpt4 book ai didi

java - PreparedStatement setString(...) for all,即使对应的数据类型是整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:36 25 4
gpt4 key购买 nike

我遇到了以下代码,我觉得它做错了:

(请注意,这是 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);
}
}

请注意 setNull()可以接受 type作为第二个参数,如果它是已知的。

关于java - PreparedStatement setString(...) for all,即使对应的数据类型是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com