在下面的 SQL 查询中使用 PreparedStatement 班级:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

有时我的项目描述中会出现撇号以及单引号和双引号。例如,我最近发布的一件商品是“Planar 22”显示器。当然,该字符串被误解并认为描述值只是“Planar 22”。处理字符串中特殊字符的最佳方法是什么?

我读到有些人正在使用正则表达式,但是这些似乎是特定于具体情况的。我正在研究的另一种方法是逐个字符读取字符串数组。我希望有一种更有效且资源消耗更少的方法来做到这一点。

更新日期 经过更广泛的测试,发现我的代码中出现了更多问题。这也是一个 URL 编码问题。当 html 表单由 jsp 代码填充时,它会尝试将描述字段移动到在线表单,它会在表单上而不是在查询上截断它。jTDS 还纠正了接收特殊字符的问题。由于 jTDS 是一个 jar,因此它还有助于避免重新启动计算机。我将奖励 jTDS 线程,因为这是我部分使用的。

提前致谢

有帮助吗?

解决方案

由于您使用PreparedStatement的,你不必做任何事情,它会为你通过JDBC驱动程序来处理。你看出来的唯一的事情就是非ASCII字符,特别是你必须确保数据库表使用的编码为文本列,可以处理您要使用的所有字符。但是,这是一个SQL问题,而不是Java的问题。

其他提示

您不需要特别处理这些字符,如果你结合它们作为参数传递到预处理,因为你在做什么。这就是的准备语句方法的主要好处之一。

像其他人所说的,你没有做任何事情来处理的特殊字符。你需要尝试不同的JDBC驱动程序。

请尝试使用 JTDS司机,看看它是否有助于你与你的PreparedStatement。它是SQL Server的一个开放源码的数据库驱动程序。我在现在的工作用它和它的作品像一个冠军,实际上符合不像MS驱动程序的JDBC规范。

我相当确定问题不在于您发布的代码。为了帮助排除故障:

  1. 您是否尝试过在调试器中运行上面的代码片段?在将“itemdescription”传递给数据库调用之前,它的值是多少?
  2. 您实际上如何验证数据库中的值?这是更多的 Java 代码吗?或者你用 SQLCMD 或类似的东西来查看它?
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top