1

试图绕过 Java 中的 Jboss Hibernate 问题,您无法处理来自存储过程的 Nvarchar SQL Server 数据类型。由于我们存储多字节字符,我无法将数据类型转换或转换为 varchar,因此,数据类型是必须的。但是,我能够在存储过程中将类型转换为 varbinary 并在 Java 中解码

SQL Server 过程:

Convert(varbinary, Tile)  AS Title

在 Java 端,我读取了结果集和字段,现在编码为

更新为实际编码:

0x440065007300690067006E0020002600200050006C0061006E006E006900 

我尝试将此字节数组解析为字符串,如下所示:

            byte[] bytes = (byte[]) dataField[0]; 

            try {

                String varbinaryString = new String(bytes, "UTF-8");
                System.out.println(varbinaryString);



            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

结果几乎是来自 Title 字段的预期解码字符串,只是,它以这种方式解码:

D e s i g n  &  P l a n n i

而不是直接输出

Design & Planning Director

任何人都可以帮助我解决 Java 解码 SQL Server varbinary 数据类型的困境吗?

提前感谢您的帮助或提示。

4

1 回答 1

1

使用 Spring 和 JPA,我无法执行其他建议来扩展 Hibernate Sql Dialect 类,但是,如果您使用的是 hibernate cfg,这是一个很好的解决方案。我在正确的轨道上,但你必须记住不要将 varbinary 限制为 navarchar 的继承长度,即。nvarchar(30)。

Convert(varbinary(max), Tile)  AS Title

这将返回整个编码字符串。最后,我试图解码 UTF-8,虽然它主要是反复试验,但 varbinary 编码为 UTF-16。

s = new String(bytes, "UTF-16LE");
于 2013-03-07T16:52:34.900 回答