删除查询会引发错误

时间:2017-08-20 07:51:26

标签: java mysql sql database jdbc

我在执行查询时遇到Netbeans中的这种错误:

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的'name = null'附近使用正确的语法

我的代码:

enterbtn.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {

        Connection con = null;
        Statement stmt = null;

        try {
            //STEP 2: Register JDBC driver
            Class.forName(JDBC_DRIVER);

            con = DriverManager.getConnection(CONN, USERNAME, PASSWORD);
            stmt = con.createStatement();
            String sql = "delete from MovieRecords where id=" + l_id.getText() + "and name=" + j_name.getName();

            stmt.executeUpdate(sql);

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println(e);
        } 

    }

});

1 个答案:

答案 0 :(得分:2)

要避免此语法错误和SQL注入,您必须使用PreparedStatement代替:

String sql = "delete from MovieRecords where id= ? and name = ?";
PreparedStatement pstm = ccon.prepareStatement(sql);
pstm.setInt(1, Integer.parseInt(l_id.getText()));
pstm.setString(2, j_name.getName());
stmt.executeUpdate();

你真正的问题是字符串应该在两个''之间(但我不建议使用这种方式,而是使用PreparedStatement

String sql = "delete from MovieRecords where id = " + l_id.getText() + " and name='" + j_name.getName()+"'";
//--------------------------------------------------------------------------------^----------------------^

就像Usagi Miyamoto在评论中提到的那样:

  

任何运算符(IS NULL/IS NOT NULL除外)都将返回NULL(如果有的话)   它的操作数是NULL。这使得=比较以及AND   返回NULL,WHERE子句将NULL转换为 FALSE ,按照   标准SQL ..

因此,如果要删除非null,则必须在使用之前检查值是否为null 如果col为null,则可以使用IS NULL而不是等于运算符=