在这个 Java 项目上工作,我需要能够根据用户的请求从数据库中删除数据



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);

相关内容

  • 没有找到相关文章

最新更新