1

Spring Framework のストアド プロシージャ クラスを使用して、ストアド プロシージャを使用して SQL 2005 DB にデータを挿入しています。クラス宣言は次のようになります。

       private class InsertShippingAddress extends StoredProcedure {
    public InsertShippingAddress(final DataSource ds) {
      super(ds, "usp_adiPromoInsertShippingDetail");
      super.declareParameter(new SqlParameter("in_FirstName", Types.VARCHAR));

      compile();
    }
  }

私は次のようにSPを実行しています:

     final InsertShippingAddress insertShippingAddress = new InsertShippingAddress(
            getJdbcTemplate().getDataSource());
    final Map<String, Object> inParams = new HashMap<String, Object>();
    inParams.put("in_FirstName", name);
   insertShippingAddress.execute(inParams);

問題は、フランス語のアクセント付き文字を含む名前文字列ですが、保存中に文字列èüÀÔàéがe u¨AO^a`e´として歪んだ方法で保存されることです。しかし、実際に SQL 管理スタジオを使用して SP を実行すると、正しく保存されます。どこが間違っているのかわかりません。助けてください。

前もってありがとう、ナレイン

4

1 に答える 1

0

免責事項: 私は Java プログラマーではありません

問題はこの行にある可能性があります

  super.declareParameter(new SqlParameter("in_FirstName", Types.VARCHAR));

タイプを使用しているため、VARCHARASCII 以外の文字が正しく変換されない場合があります。

おそらく、次のものを使用する必要がありますか?

  super.declareParameter(new SqlParameter("in_FirstName", Types.NVARCHAR));

編集

型を使用できない場合、NVARCHAR回避策の 1 つは、文字列を 16 進数にキャストしてからTypes.VARBINARY(または同様のものとして) データベースに渡すことです。データベースは型変換を正しく処理する必要があります。Spring がこれを許可するかどうかはわかりません。

于 2011-05-19T07:10:40.953 に答える