MySQL内部的查询正在工作:
DELETE FROM f9.yoo
WHERE account_tags = '#8GGGJPUR9'
我可以删除MySQL中的数据,但问题是每当我试图从我的Java应用程序中删除account_tags
时,它会抛出一个错误:
java.sql。sqlsyntaxerroreexception: SQL语法错误;请查阅MySQL服务器版本的手册,了解在DELETE FROM f9.yoo附近使用的正确语法WHERE account_tags = '#8GGGJPUR9 " at line 2
这是我的Java SQL查询:
Statement statement = dbConnection.createStatement();
String sql = "SELECT * FROM "+databaseName+"."+tableName+";n" +
"DELETE FROM "+databaseName+"."+tableName+"n" +
"WHERE account_tags = '"+AccountTag+"';";
statement.executeQuery(sql);
这个错误没有给我太多的工作,所以我真的不知道程序出了什么问题。
您添加allowMultiQueries=true
了吗
如果没有,那么你可以在发送连接请求到数据库时添加它。所以你需要在你的数据库URL中添加allowMultiQueries=true
。
:
String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
String sql = "DELETE FROM "+databaseName+"."+tableName+"n" +
"WHERE account_tags = ?";
try (PreparedStatement statement = dbConnection.prepareStatement(sq)) {
statement.setString(1, AccountTag);
int updateCount = statement.executeUpdate();
System.out.printf("%s: %d records deleted.%n", tableName, updateCount);
}
唯一使用的是DELETE,应该使用executeUpdate
。
肯定一个应该使用PreparedStatement,因为许多代码检查器会发出警告。它转义'
之类的内容,处理参数类型和可能的转换,特别是针对SQL注入的安全特性。.
- 系统。我们的使用方式很糟糕,最好使用记录器。
- try-with-resources自动关闭PreparedStatement,即使引发异常或break/return。
- 当做两个数据库操作时,似乎最好使用两个(准备好的)语句,因为第一个返回ResultSet。
:
String sql = SELECT * FROM "+databaseName+"."+tableName + "n" +
"WHERE account_tags = ?";
try (PreparedStatement statement = dbConnection.prepareStatement(sq)) {
statement.setString(1, AccountTag);
try (ResultSet rs = statement.executeQuery()) {
...
}
}
最好用If条件分隔语句:
String sql1="SELECT * FROM "+databaseName+"."+tableName;
String sql2="DELETE FROM "+databaseName+"."+tableName+" "+
"WHERE account_tags = '"+AccountTag+"';
statement.executeQuery(sql1);
statement.executeUpdate(sql2);