1

ストアド プロシージャから Nvarchar SQL Server データ型を処理できない Java での Jboss Hibernate の問題を回避しようとしています。マルチバイト文字を格納しているため、データ型を 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();
            }

結果は、ほぼタイトル フィールドから意図的にデコードされた文字列ですが、次の方法でデコードされます。

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

のストレートアウトプットではなく

Design & Planning Director

SQL Server varbinary データ型を Java でデコードするジレンマを手伝ってくれる人はいますか?

あなたの助けやヒントを事前にありがとう.

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 に答える