我正在尝试运行此代码并删除MySQL数据库中的某条记录,但是我收到此错误:
SQLException: Can not issue data manipulation statements with executeQuery().
SQLState: S1009
VendorError: 0
这是我目前的代码:
package stringStuff;
import java.io.File;
import java.util.regex.*;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class REGGY {
/**
* @param args
*/
Connection connection;
public REGGY() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
System.err.println("Unable to find and load driver");
System.exit(1);
}
}
private void displaySQLErrors(SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
public void connectToDB() {
try {
connection = DriverManager
.getConnection("the connection works :P");
} catch (SQLException e) {
displaySQLErrors(e);
}
}
public void executeSQL() {
try {
Statement statement = connection.createStatement();
ResultSet rs = statement
.executeQuery("DELETE FROM content_resource WHERE RESOURCE_ID LIKE '%Hollow%'");
rs.close();
statement.close();
connection.close();
} catch (SQLException e) {
displaySQLErrors(e);
}
}
public static void main(String[] args) {
String cool = new File(
"/group/a45dea5c-ea09-487f-ba1c-be74b781efb1/Lessons/Hollowbody 5.gif")
.getName();
System.out.println(cool);
REGGY hello = new REGGY();
hello.connectToDB();
hello.executeSQL();
// TODO Auto-generated method stub
}
}
我能够运行select *查询没问题,但是当我尝试运行DELETE查询时它不会让我。我已经在MySQL工作台中运行了这个命令并且它可以工作,当我使用Java时它不起作用。
答案 0 :(得分:7)
更改
ResultSet rs = statement.executeQuery("DELETE FROM content_resource WHERE RESOURCE_ID LIKE '%Hollow%'");
要
int deletedRows = statement.executeUpdate("DELETE FROM content_resource WHERE RESOURCE_ID LIKE '%Hollow%'");
正如其他人所说,executeQuery()应该用于返回数据的语句,通常是select语句。对于插入/更新/删除语句,您应该使用executeUpdate()。
答案 1 :(得分:6)
您可以使用executeUpdate()
代替。
executeQuery()
仅适用于返回数据的语句。 executeUpdate
适用于那些不会返回日期的内容(更新,插入,删除,我相信添加/删除表,约束,触发器等等)。
答案 2 :(得分:3)
要执行DML语句(插入,创建或删除),您必须使用executeUpdate()
。不是executeQuery()
。
答案 3 :(得分:2)
使用executeUpdate
代替executeQuery
。 JDBC很糟糕,因为delete语句不会返回记录集,如executeQuery
所期望的那样。
答案 4 :(得分:1)
使用execute
代替executeQuery
。
据我所知,如果您正在执行返回结果集的查询(例如executeQuery
),则必须使用select
。
答案 5 :(得分:-1)
确保您已为DELETE
语句设置了权限。某些用户将出于安全目的而禁止使用某些命令。