日期:2014-05-18  浏览次数:20760 次

如何同时向SQL中用JDBC输入LONG 和String类型?
我正在用PreparedStatement向SQL发出查询命令,相关代码如下
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();

但是这时会报错
引用
SQLServerException: 从数据类型 nvarchar 转换为 bigint 时出错。


请问如何同时输入LONG类型和String类型的数据到SQL呢
------解决方案--------------------
Object[]aStrtParams = Object[3];aStrtParams[0] = 12345678901L;
aStrtParams[1] = "999";
ps.setObject(i + 1, aStrtParams[i]);

------解决方案--------------------
ps.setObject(i?+?1,?aStrtParams[i]);
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

一般动态赋值通常都是setObject类型的参数。

还是报错……SQLServerException: 从数据类型 nvarchar 转换为 bigint 时出错。

那就是你的数据类型和你底层数据库的不一致啊。
你写了3个字符串,那么数据库就是3个varchar类型,而且你第一个很长得,貌似是nvarchar。如果你数据库不是3个varchar那必然报错,类型要对应上。

理论上
引用:
Quote: 引用:

Quote: 引用:

一般动态赋值通常都是setObject类型的参数。

还是报错……SQLServerException: 从数据类型 nvarchar 转换为 bigint 时出错。

那就是你的数据类型和你底层数据库的不一致啊。
你写了3个字符串,那么数据库就是3个varchar类型,而且你第一个很长得,貌似是nvarchar。如果你数据库不是3个varchar那必然报错,类型要对应上。

在数据库里面,
aStrtParams[0] = "12345678901";
aStrtParams[1] = "999";
aStrtParams[2] = "this is a test";
分别要幅值给big int ,big int和nvarchar

理论上你给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其匹配的对象类型。