Проблема при хранении акцентированных символов в базе данных с использованием Spring Framework - PullRequest
1 голос
/ 19 мая 2011

Я использую хранимую процедуру для вставки некоторых данных в базу данных SQL 2005 с помощью класса хранимых процедур Spring Framework. Объявление класса выглядит примерно так:

       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¨A O ^ a`e´ в искаженном виде. Но если я на самом деле пойду и выполню SP через SQL Management Studio, он сохранится правильно. Я не знаю, где я иду не так. Пожалуйста, помогите.

Спасибо заранее, Нарайн

1 Ответ

0 голосов
/ 19 мая 2011

Отказ от ответственности: я не программист Java

Проблема может быть в этой строке

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

, поскольку вы используете тип VARCHAR, символы, не входящие в ASCII, могут быть преобразованы неправильно.

Возможно, вам следует использовать следующее?

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

EDIT

Если вы не можете использовать тип NVARCHAR, одним из возможных решений может быть приведение строки к шестнадцатеричной форме, а затем передача ее в базу данных как Types.VARBINARY (или что-то подобное) - база данных должна правильно обрабатывать преобразование типов , Я понятия не имею, позволит ли Spring вам это сделать.

...