如何处理Java PrepareStatement中的特殊字符?

phi*_*ill 2 java string special-characters

在以下使用PreparedStatement该类的SQL查询中:

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();       
Run Code Online (Sandbox Code Playgroud)

我有时在项目描述中得到撇号和单引号和双引号.例如,我的一个项目的后期问题是"Planar 22"监视器".当然,字符串被误解并认为描述值只是"Planar 22".处理字符串中特殊字符的最佳方法是什么?

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

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

提前致谢

Mic*_*rdt 15

由于您使用的是PreparedStatement,因此您无需执行任何操作,它将由JDBC驱动程序为您处理.您唯一需要注意的是非ASCII字符,特别是您必须确保数据库表使用文本列的编码来处理您将要使用的所有字符.但这是一个SQL问题,而不是Java问题.

  • 是否有更新版本的JDBC驱动程序?没有逃脱的报价将是一个绝对的显示阻止错误使驱动程序完全无价值.我几乎不相信微软会发布这样一个明显破碎的版本.或者也许这是你的代码的问题,虽然上面的例子看起来还不错,我不知道如何滥用会导致这样的问题的PreparedStatements.让我有点怀疑的是,当无法解析其余值时,中间字符串被解释为值终止符应该导致SQLException.那会发生吗? (5认同)