【发布时间】:2018-07-19 08:20:57
【问题描述】:
我有以下 mysql 语句从正在工作的数据库中删除记录。
SET @email = 'delete@mailinator.com';
SET @userID = (SELECT id FROM USER WHERE email = @email);
DELETE FROM user_role_group WHERE user_id = @userID;
DELETE FROM user_client_setup WHERE user_id = @userID;
DELETE FROM USER WHERE id = @userID;
我想通过 jdbc mysql 连接在 Java 中运行相同的查询。我已经尝试了以下
public void deleteCoreUser(String email) {
try{
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con=DriverManager.getConnection(
"jdbc:mysql://db.com:3306/core","username","password");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SET @email = '"+email+"';\n" +
"SET @userID = (SELECT id FROM user WHERE email = @email);\n" +
"DELETE FROM user_role_group WHERE user_id = @userID;\n" +
"DELETE FROM user_client_setup WHERE user_id = @userID;\n" +
"DELETE FROM user WHERE id = @userID;");
con.close();
System.out.println("Deleting user "+email+" from the Core DB");
}catch(Exception e){ System.out.println(e);}
}
运行时出现此错误
java.sql.SQLSyntaxErrorException:您的 SQL 中有错误 句法;检查与您的 MariaDB 服务器相对应的手册 在 'SET @userID = (SELECT id 来自用户 WHERE 电子邮件 = @email);在第 2 行删除 user_role_'
【问题讨论】:
-
寻找“准备好的语句 jdbc”
-
PreparedStatement 将简化相同的查询。它还具有性能优势,因为查询编译一次并执行多次。