JTDS:使用CallableStatement和sendStringParametersAsUnicode = false的Unicode参数

时间:2012-09-07 14:02:10

标签: java sql-server unicode jtds

我们遇到了有关索引扫描(SQL Server 2000及更高版本)的JTDS文档中描述的性能问题,因此必须将sendStringParametersAsUnicode参数设置为false

对于99.9%的情况,这是好的,但是,我们有一个应用程序依赖于ntext字段中的unicode数据。我们使用存储过程写入上述表,该存储过程具有NTEXT参数。由于更改了上面的设置,我们的unicode字符串被转换为'?'字符,这不是特别有用。

我摆弄了各种各样的东西,包括:

  • setObject(1, unicode_string, Types.NCLOB); //as well as NVARCHAR

  • stmt.setUnicodeStream(1, new ByteArrayInputStream(unicode_string.getBytes("UTF16")), unicode_string.length());

  • setNClob(1, unicode_string);

然而,这些都不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一种解决方法(虽然不是正确答案)是使用声明而不是 CallableStatement

stmt = cn.createStatement();
stmt.execute("INSERT INTO test_unicode (my_unicode) VALUES (N'" + input + "')");

然而,这会带来显着的性能开销。