字符串输入包含引号时的MySQL语法错误

时间:2014-03-25 18:27:53

标签: java mysql jsp jdbc

当我将表单提交到JDBC连接页面时,它会出错。 我提交了一份包含这样的数据的表格

It's wrong

如下所示出现错误

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便使用附近的错误'在BOOLEAN模式中)和bot2 = 1'在第1行

我的代码是

       String Query="SELECT * FROM ques WHERE MATCH(subject) AGAINST('"+vv+"' IN BOOLEAN MODE)  and bot2=1";
       Class.forName("com.mysql.jdbc.Driver");
       conn=DriverManager.getConnection("jdbc:mysql://localhost:3306                   /wst","manohar","manohar");
       stmt=conn.prepareStatement(Query);
       rs=stmt.executeQuery(Query);
       while(rs.next())
         {
            ....
         }

2 个答案:

答案 0 :(得分:2)

请改为尝试:

String Query="SELECT * FROM ques WHERE MATCH(subject) AGAINST(? IN BOOLEAN MODE)  and bot2=1";
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/wst","manohar","manohar");
stmt=conn.prepareStatement(Query);
stmt.setString(1, vv);
rs=stmt.executeQuery();

该技术称为“参数化查询”,它提供了几个优点,其中之一就是您不必担心在字符串参数中转义特殊字符。

答案 1 :(得分:0)

这是因为您没有在查询中转义字符串。

我认为你可以找到这个帖子有用:Java - escape string to prevent SQL injection