插入访问数据库撇号问题

时间:2015-03-17 20:59:31

标签: java ucanaccess

我试图将一些网站的信息存入访问数据库。 我正在从我获得的网站信息中创建一个bean,然后将该bean发送到数据库中。 问题是我被阻止通过异常将某些东西带入数据库。 例外 -

net.ucanaccess.jdbc.UcanaccessSQLException: unexpected token: (token) required:

所以我已经检查了产生此异常的值的共同点。 它是一个撇号。 调用异常的每个值都有一个撇号,我现在无法真正改变它。所以我一直想知道如何让ucanaccess在没有任何例外的情况下将撇号用于访问?

这是查询语句

stmnt = conn.prepareStatement("INSERT INTO Table1(doctorName , description , specialty1 , specialty2 , personalSite , clinic1 , phone1 , clinic2 , phone2 , clinic3, phone3 ,worksWith) VALUES (?,?,?,?,?,?,?,?,?,?,?,?");  

            stmnt.setString(1,tempBean.getDoctorName());
            stmnt.setString(2,tempBean.getDescription());
            stmnt.setString(3,tempBean.getSpeciality1());
            stmnt.setString(4,tempBean.getSpeciality2());
            stmnt.setString(5,tempBean.getPersonalSite());
            stmnt.setString(6,tempBean.getClinic1());
            stmnt.setString(7,tempBean.getPhone1());
            stmnt.setString(8,tempBean.getClinic2());
            stmnt.setString(9,tempBean.getPhone2());
            stmnt.setString(10,tempBean.getClinic3());
            stmnt.setString(11,tempBean.getPhone3());
            stmnt.setString(12,tempBean.getWorksWith());

            stmnt.executeUpdate();

2 个答案:

答案 0 :(得分:2)

您遇到了一个称为sql注入的常见问题。

使用Java,确保不会发生这种情况的方法是使用PreparedStatements。 从另一个问题看一下this answer就是一个很好的例子。

答案 1 :(得分:1)

对于未来的读者:

您应该使用PreparedStatement来避免SQLInjection并避免使用ESCAPE文本值。 在SQL(包含所有dbms'以及所有驱动程序)中,在这种特定情况下,您应该使用另一个撇号来转义撇号:

xxx&x; xxx这个词应该被转换为xxx' xxx。

因为UCanAccess支持Access语法,所以当双引号"使用的是分隔符而不是撇号(在这种情况下,单词中间的双引号必须使用另一个双引号&#34进行转义;)。
如果没有,sql引擎 我不知道撇号是文本分隔符还是它的一部分。 但是如果你使用PreparedStatement,你不必担心它。