Java 删除查询抛出一个错误
在执行查询时,我在Netbeans中遇到这种类型的错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解第1行“name=null”附近使用的正确语法 我的代码: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
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()+"'";
//--------------------------------------------------------------------------------^----------------------^