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);

现在的问题是,名称字符串包含法语中的重音字符,但是在存储时,字符串 èüÀÔàéu¨A以扭曲的方式存储为 e O^a`e´。但如果我真的去通过 SQL 管理工作室执行 SP,它会正确保存。我不知道我哪里错了。请帮忙。

提前致谢, 纳兰

4

1 回答 1

0

免责声明:我不是java程序员

问题可能出在这一行

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

由于您使用的是VARCHAR类型,因此可能无法正确转换非 ASCII 字符。

也许您应该使用以下内容?

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

编辑

如果您不能使用该NVARCHAR类型,一种解决方法可能是将字符串转换为十六进制,然后将其作为Types.VARBINARY(或类似的东西)传递给数据库 - 数据库应该正确处理类型转换。我不知道 Spring 是否会让你这样做。

于 2011-05-19T07:10:40.953 回答