67,512
社区成员
发帖
与我相关
我的任务
分享
StrSql = "update mem_netport set LongNUMa=? where ID=? and desc=?"
String []aStrtParams = String[3];
aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
PreparedStatement ps = _CONN.prepareStatement(sSQL);
if (aStrtParams != null) {
for (int i = 0; i < aStrtParams.length; i++) {
ps.setString(i + 1, aStrtParams[i]);
}
}
result = ps.executeUpdate();
aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
分别要幅值给big int ,big int和nvarchar[/quote]
理论上你给PraparedStatement赋值的过程是这样的:
ps.setLong(1, Long.parseLong("12345678901")); //big int
ps.setLong(2, Long.parseLong("999")); //big int
ps.setString(3, "this is a test"); //nvarchar
如果你用setObject的话,那么Object类型没有办法直接的转换成Long类型,所以就报错。
你上面说你用ps.setLong(i + 1, Long.parseLong(sParams[i].toString())); , 那你第三个字符串怎么办?肯定也是不行的。
所以就要判断参数对象的类型,然后分情况处理就OK了。你写一下类似于下面这样的代码:
if(sParams[i] intanceof xxx){
setXxxx....
}
能看懂吧?根据不同的类型,去set其匹配的对象类型。[/quote]非常感谢!要的就是这个结果!instanceof 很管用aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
分别要幅值给big int ,big int和nvarchar[/quote]
理论上你给PraparedStatement赋值的过程是这样的:
ps.setLong(1, Long.parseLong("12345678901")); //big int
ps.setLong(2, Long.parseLong("999")); //big int
ps.setString(3, "this is a test"); //nvarchar
如果你用setObject的话,那么Object类型没有办法直接的转换成Long类型,所以就报错。
你上面说你用ps.setLong(i + 1, Long.parseLong(sParams[i].toString())); , 那你第三个字符串怎么办?肯定也是不行的。
所以就要判断参数对象的类型,然后分情况处理就OK了。你写一下类似于下面这样的代码:
if(sParams[i] intanceof xxx){
setXxxx....
}
能看懂吧?根据不同的类型,去set其匹配的对象类型。aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
分别要幅值给big int ,big int和nvarchar[/quote]
CSDN抽风。刚打了一堆发不出去。现在又没了。aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
分别要幅值给big int ,big int和nvarcharps.setLong(i + 1, Long.parseLong(sParams[i].toString()));
Object[]aStrtParams = Object[3];aStrtParams[0] = 12345678901L;
aStrtParams[1] = "999";
ps.setObject(i + 1, aStrtParams[i]);