SQL Server 2012 getClob():不支持从varchar(nvarchar)到CLOB的转换

时间:2014-04-22 17:28:10

标签: sql sql-server clob

我想知道在下面描述的场景中我做错了什么。我为一个项目评估一些SQL Server版本,并在简单的Java设置中使用不同的DB类型。我使用Eclipse,Java 6(1.6u45),驱动程序sqljdbc4.jar,Sql Server 2012(默认安装),Windows 7,并尝试从测试数据库/表中编写和读回不同的数据库类型。 对于NVARCHAR(n或max)和/或VARCHAR(n或max)类型的列,使用setClob()和setCharacterStream()方法写入DB时没有任何问题。但是,当我尝试回读Clobs时,我只能使用getCharacterStream()。由于我无法理解的原因,我不能将getClob()与上面列出的任何一种DB类型一起使用。我得到以下异常堆栈:

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) 

我找不到此异常的任何参考。 MS文档声称NVARCAHR / VARCHAR列支持getClob()。代码非常简单,一个插入然后"选择*来自表"然后定位resultset.getxxx(位置)调用。 提前感谢任何建议或想法。

2 个答案:

答案 0 :(得分:0)

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

应该有用......

答案 1 :(得分:0)

请在连接字符串中尝试 useLOBs = false

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

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

的JTDS