何时需要的targetsqltype参数是PreparedStatement.setObject

时间:2015-03-05 15:47:17

标签: java jdbc

PreparedStatement有一个

setObject(int parameterIndex,Object x,int targetSqlType)

方法。何时需要第三个参数?你能举个具体的例子吗?

1 个答案:

答案 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)。