我在执行查询时遇到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);
}
}
});
答案 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而不是等于运算符=