0
String xmlSt = '<?xml version="1.0" encoding="utf-16"?><form><control><type>SINGLE</type><row><column><level>1</maxoccurs><minlength>1</minlength><maxlength>250</maxlength&gt';

String query = "insert into daily_diary(xml_val) values('"+ xmlSt + "'");
int result = entityManager.createNativeQuery(query).executeUpdate();

但它抛出如下:

SQL Error: 0, SQLState: null
11:45:04,175 ERROR [JDBCExceptionReporter] The value is not set for the parameter number 1.

当我们传递冗长的字符串值时它会引发错误,否则它会成功插入。需要一种解决方案来utf-8在 db 中插入冗长的字符串。

4

1 回答 1

0

在我看来,您只是想插入一个比列允许的长度更长的字符串。如果可以的话,增加列的长度。如果不能,您可能需要切换到不同的列类型。

(这似乎与 UTF-8 无关,但如果您确实有一个字符串,其中字符编码为多个字节,您可能会发现存储在数据库列中的“字符”(实际上是字节)比有更多原始字符串中的字符。)


我应该注意其他几件事……可能与您的问题有关。

  1. 您的代码示例不是有效的 Java。“字符串”文字使用单引号......编译器将拒绝它。

  2. 如果实际的字符串包含单引号字符或(可能)其他内容,则您通过字符串抨击生成的查询可能是语法上无效的 SQL。(或者更糟糕的是,它可能是有效的,但意味着完全出乎意料的事情。想想 SQL 注入!!!)。建议您使用带有“?”的 PreparedStatement 查询中的占位符,然后将字符串添加为查询参数。这将为您处理任何 SQL 转义(并防止 SQL 注入 ...)。

  3. 您不需要在存储在 SQL 数据库中的字符串中使用 HTML / XML 实体……除非应用程序设计特别要求这样做。

于 2013-04-13T07:41:12.097 回答