PreparedStatement有一个
setObject(int parameterIndex,Object x,int targetSqlType)
方法。何时需要第三个参数?你能举个具体的例子吗?
答案 0 :(得分:0)
我确实找到了一个有用的情况。默认情况下,sql server驱动程序将字符串作为unicode发送到服务器。所以,假设你有一张桌子:
create table1 (x varchar(128) primary key);
现在我形成一个sql:
String sql = select * from table1 where x = ?;
PreparedStatement ps = conn.prepareStatment(sql);
ps.setObject(1, "hello");
字符串hello作为unicode发送,就像发出
一样select * from table1 where x = N'hello'
然而,这不是想要的,因为sql server不会使用x上的主键索引来搜索。如果MS JDBC驱动程序将setSendStringParametersAsUnicode设置为true,则会发生这种情况。如果将setSendStringParametersAsUnicode设置为false,则上述操作将起作用,但不适用于unicode。所以你需要做ps.setObject(1,“hello”,Types.NVARCHAR)。