Rumah >pangkalan data >tutorial mysql >Mengapa Kod MySQL JDBC Java Saya Membuang \'Operasi Tidak Dibenarkan Selepas ResultSet Ditutup\'?

Mengapa Kod MySQL JDBC Java Saya Membuang \'Operasi Tidak Dibenarkan Selepas ResultSet Ditutup\'?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 13:56:09245semak imbas

Why Does My Java JDBC MySQL Code Throw

Pengecualian MySQL JDBC Java: "Operasi Tidak Dibenarkan Selepas ResultSet Ditutup"

Ralat ini biasanya berlaku apabila cuba untuk beroperasi pada ResultSet tertutup. Mari analisa kod yang disediakan untuk mengenal pasti punca pengecualian.

Permulaan Pangkalan Data

Kelas MySQLDatabase mewujudkan sambungan ke pangkalan data dalam kaedah connect(). Pembolehubah pernyataan dimulakan dengan connection.createStatement(). Walau bagaimanapun, penyata ini dikongsi merentas semua operasi pangkalan data, termasuk pertanyaan pilih dan kemas kini.

Pemprosesan Derma

Kelas MySQLDonation berputar melalui jadual 'derma' dan memproses derma rekod. Gelung while berulang pada ResultSet yang diperolehi daripada pertanyaan("SELECT * FROM gieli436_purchases.donations") pernyataan.

Exception Cause

Ralat berlaku kerana pernyataan yang digunakan untuk mendapatkan semula ResultSet juga digunakan untuk melaksanakan pertanyaan padam, yang menutup ResultSet sebelumnya. Akibatnya, next() memanggil pada ResultSet tertutup membuang pengecualian "Operasi Tidak Dibenarkan Selepas ResultSet Ditutup".

Penyelesaian

Untuk menyelesaikan isu ini, buat Penyata baharu untuk setiap pelaksanaan pertanyaan. Ubah suai kelas MySQLDatabase untuk mengalih keluar pernyataan = connection.createStatement(); daripada connect(). Gantikan semua kejadian pernyataan dalam kelas dengan connection.createStatement().

Pembetulan

// MySQLDatabase class
// Remove statement = connection.createStatement();
// Replace statement with connection.createStatement()

// MySQLDonation class
// Remove private variable statement

// Query execution
results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations");

// Delete execution
connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));

Dengan mencipta Penyata berasingan untuk setiap pertanyaan, anda memastikan bahawa ResultSet kekal terbuka semasa pemprosesan, menghalang pengecualian.

Atas ialah kandungan terperinci Mengapa Kod MySQL JDBC Java Saya Membuang \'Operasi Tidak Dibenarkan Selepas ResultSet Ditutup\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn