SQL Server 2012 getClob():将varchar(nvarchar)转换为CLOB不受支持。

8
我想知道在以下场景中我做错了什么。 我正在评估一些SQL Server版本,以便在简单的Java设置中尝试不同的DB类型。 我使用Eclipse,Java 6(1.6u45),驱动程序sqljdbc4.jar,Sql Server 2012(默认安装),Windows 7,并尝试从测试数据库/表中写入和读取不同的DB类型。 对于NVARCHAR(n或max)和/或VARCHAR(n或max)类型的列,可以使用setClob()和setCharacterStream()方法将其写入DB而无需任何问题。 但是,当我尝试读回Clobs时,我只能使用getCharacterStream()。由于我无法理解的原因,我不能使用上述任何一种DB类型的getClob()。我得到以下异常堆栈:
com.microsoft.sqlserver.jdbc.SQLServerException: The conversion from varchar to CLOB is unsupported.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.DataTypes.throwConversionError(DataTypes.java:1117)
at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:2419)
at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:176)
at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getClob(SQLServerResultSet.java:2488)
at main.com.test.Test.main(Test.java:77) 

我找不到关于这个异常的任何参考资料。微软的文档声称getClob()支持NVARCAHR/VARCHAR列。代码非常简单,一个插入操作,然后是"Select * from table",最后是位置定位的resultset.getxxx(position)调用。

提前感谢您的任何建议或想法。


你找到解决方案了吗? - Aqeel Ashiq
2个回答

1

请尝试在您的连接字符串中添加 useLOBs=false

<dataSource
    driver="net.sourceforge.jtds.jdbc.Driver"
        url="jdbc:jtds:sqlserver://server/database;useLOBs=false" 
    user="user" 
    password="password" />

请注意,我使用的驱动程序不是来自Microsoft。它是来自JTDS的http://jtds.sourceforge.net/

0

也许你应该发布Java代码。
例如: Clob clob = rs.getClob(1);

应该可以解决问题....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接