Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除查询抛出一个错误_Java_Mysql_Sql_Database_Jdbc - Fatal编程技术网

Java 删除查询抛出一个错误

Java 删除查询抛出一个错误,java,mysql,sql,database,jdbc,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

在执行查询时,我在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);
        } 

    }

});

为了避免这种语法错误和SQL注入,您必须改用以下方法,例如:

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


就像他在评论中提到的:

任何运算符(除
为空/不为空
)都将返回
,如果有 其操作数为
NULL
。这使得
=
比较以及
返回
NULL
,WHERE子句将
NULL
转换为
FALSE
,如下所示 标准SQL

因此,如果要删除非空值,必须先检查值是否为非空值,然后再使用它

否则,要获得col为null的位置,可以使用is null而不是equal运算符
=

,在和和之前的和之间没有空格。另请参见关于空比较关于
NULL
处理如何?@sagi whis preparedStatement它不是必需的,因此例如,我可以删除id=1且name=NULL;)的MovieRecords这不会导致任何问题,那么OP应该在使用它之前检查该值@sagi这是逻辑任何运算符(除了
为NULL
/
为非NULL
)都将返回
NULL
,如果其任何操作数为
NULL
。这使得
=
比较,
返回
NULL
,以及
WHERE
子句根据标准SQL将
NULL
转换为
FALSE
,这很好,谢谢。
String sql = "delete from MovieRecords where id = " + l_id.getText() + " and name='" + j_name.getName()+"'";
//--------------------------------------------------------------------------------^----------------------^