3

このコードを実行して 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 を使用している場合は動作しません。

4

6 に答える 6

7

代わりに使用executeUpdate()します。

executeQuery()データを返すステートメント専用です。executeUpdate日付を返さないもの用です(更新、挿入、削除、およびテーブルの追加/削除、制約、トリガーなども同様だと思います)。

于 2012-07-30T17:36:43.277 に答える
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() はデータを返すステートメント、通常は選択ステートメントに使用する必要があります。挿入 / 更新 / 削除ステートメントについては、代わりに executeUpdate() を使用する必要があります。

于 2012-07-30T17:38:16.033 に答える
3

DML ステートメント (挿入、作成、または削除) を実行するには、 を使用する必要がありますexecuteUpdate()。違いexecuteQuery()ます。

于 2012-07-30T17:37:20.120 に答える
2

executeUpdateの代わりに使用しexecuteQueryます。JDBC は、delete ステートメントがexecuteQuery期待どおりにレコード セットを返さないため、問題を抱えています。

于 2012-07-30T17:37:18.560 に答える
1

executeの代わりに使用しexecuteQueryます。

私の知る限りexecuteQuery、結果セットを返すクエリを実行している場合は使用する必要があります (selectたとえば)。

于 2012-07-30T17:39:06.593 に答える
0

DELETEステートメントに対する権限が設定されていることを確認してください。特定のユーザーには、セキュリティ上の理由から特定のコマンドが許可されていません。

于 2012-07-30T17:37:03.407 に答える