Hai Saya bertanya-tanya apakah mungkin untuk menjalankan sesuatu seperti ini menggunakan JDBC karena saat ini memberikan pengecualian meskipun mungkin di browser kueri MySQL.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Meskipun saya menyadari bahwa itu mungkin dengan memiliki string kueri SQL yang dipisahkan dan pernyataan dieksekusi dua kali tetapi saya bertanya-tanya apakah ada pendekatan satu kali untuk ini.
String url = "jdbc:mysql://localhost:3306/";
String dbName = "databaseinjection";
String driver = "com.mysql.jdbc.Driver";
String sqlUsername = "root";
String sqlPassword = "abc";
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);
allowMultiQueries=true
.Jawaban:
Saya bertanya-tanya apakah mungkin untuk mengeksekusi sesuatu seperti ini menggunakan JDBC.
Ya itu mungkin. Ada dua cara, sejauh yang saya tahu. Mereka
Contoh berikut menunjukkan dua kemungkinan di atas.
Contoh 1 : (Untuk mengizinkan banyak kueri):
Saat mengirim permintaan koneksi, Anda perlu menambahkan properti koneksi
allowMultiQueries=true
ke url database. Ini adalah properti koneksi tambahan untuk mereka jika sudah ada beberapa, sepertiautoReConnect=true
, dll .. nilai yang dapat diterima untukallowMultiQueries
properti yangtrue
,false
,yes
, danno
. Nilai lain apa pun ditolak pada waktu proses denganSQLException
.Kecuali instruksi seperti itu diberikan, an
SQLException
dilempar.Anda harus menggunakan
execute( String sql )
atau varian lainnya untuk mengambil hasil eksekusi kueri.Untuk mengulangi dan memproses hasil, Anda memerlukan langkah-langkah berikut:
Contoh 2 : Langkah-langkah untuk diikuti:
select
, danDML
kueri.CallableStatement
.ResultSet
dieksekusi dalam prosedur.Hasil DML tidak dapat ditangkap tetapi dapat mengeluarkan hasil lain
select
untuk menemukan bagaimana baris terpengaruh dalam tabel.
Tabel sampel dan prosedur :
Prosedur Panggilan dari Java :
sumber
Anda dapat menggunakan pembaruan Batch tetapi kueri harus berupa kueri tindakan (yaitu menyisipkan, memperbarui, dan menghapus)
sumber
Petunjuk: Jika Anda memiliki lebih dari satu properti koneksi, pisahkan dengan:
Untuk memberi Anda sesuatu seperti:
Saya harap ini membantu seseorang.
Salam,
Glyn
sumber
Berdasarkan pengujian saya, bendera yang benar adalah "allowMultiQueries = true"
sumber
Mengapa Anda tidak mencoba dan menulis
Stored Procedure
untuk ini?Anda bisa
Result Set
keluar dan dalam hal yang samaStored Procedure
Anda bisa mendapatkanInsert
apa yang Anda inginkan.Satu-satunya hal adalah Anda mungkin tidak mendapatkan baris yang baru disisipkan di
Result Set
jika AndaInsert
setelahSelect
.sumber
Saya rasa ini adalah cara termudah untuk multy selection / update / insert / delete. Anda dapat menjalankan pembaruan / sisipkan / hapus sebanyak yang Anda inginkan setelah memilih (Anda harus membuat pilihan terlebih dahulu (dummy jika diperlukan)) dengan mengeksekusiUpdate (str) (cukup gunakan int baru (count1, count2, ...)) dan jika Anda membutuhkan pilihan baru, tutup 'pernyataan' dan 'koneksi' dan buat yang baru untuk pilihan berikutnya. Seperti contoh:
Saya harap ini membantu
sumber