Manakah dari pernyataan berikut yang benar tentang penanganan pengecualian di mysql?

Terkadang lebih mudah menggunakan objek PreparedStatement untuk mengirim pernyataan SQL ke database. Jenis pernyataan khusus ini berasal dari kelas yang lebih umum, String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); 0, yang sudah Anda ketahui

Jika Anda ingin mengeksekusi objek String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); _0 berkali-kali, biasanya akan mengurangi waktu eksekusi untuk menggunakan objek PreparedStatement sebagai gantinya

Fitur utama dari objek PreparedStatement adalah bahwa, tidak seperti objek String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); 0, objek tersebut diberi pernyataan SQL saat dibuat. Keuntungannya adalah bahwa dalam banyak kasus, pernyataan SQL ini dikirim ke DBMS segera, di mana ia dikompilasi. Akibatnya, objek PreparedStatement tidak hanya berisi pernyataan SQL, tetapi juga pernyataan SQL yang telah dikompilasi sebelumnya. Ini berarti bahwa ketika PreparedStatement dieksekusi, DBMS dapat langsung menjalankan pernyataan SQL PreparedStatement tanpa harus mengkompilasinya terlebih dahulu

Meskipun Anda dapat menggunakan objek PreparedStatement_ untuk pernyataan SQL tanpa parameter, Anda mungkin paling sering menggunakannya untuk pernyataan SQL yang menggunakan parameter. Keuntungan menggunakan pernyataan SQL yang mengambil parameter adalah Anda dapat menggunakan pernyataan yang sama dan memberinya nilai yang berbeda setiap kali Anda menjalankannya. Contohnya ada di bagian berikut

Namun, keuntungan terpenting dari pernyataan yang disiapkan adalah bahwa pernyataan tersebut membantu mencegah serangan injeksi SQL. Injeksi SQL adalah teknik untuk secara jahat mengeksploitasi aplikasi yang menggunakan data yang disediakan klien dalam pernyataan SQL. Penyerang menipu mesin SQL untuk mengeksekusi perintah yang tidak diinginkan dengan menyediakan input string yang dibuat khusus, sehingga mendapatkan akses tidak sah ke database untuk melihat atau memanipulasi data yang dibatasi. Semua teknik injeksi SQL mengeksploitasi satu kerentanan dalam aplikasi. Literal string yang salah divalidasi atau tidak divalidasi digabungkan menjadi pernyataan SQL yang dibangun secara dinamis dan ditafsirkan sebagai kode oleh mesin SQL. Pernyataan yang disiapkan selalu memperlakukan data yang disediakan klien sebagai konten parameter dan tidak pernah sebagai bagian dari pernyataan SQL. Lihat bagian di Database PL/SQL Language Reference, bagian dari dokumentasi Oracle Database, untuk informasi lebih lanjut

Metode berikut, String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); _9, menyimpan jumlah pon kopi yang dijual dalam minggu ini di kolom updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 0 untuk setiap jenis kopi, dan memperbarui jumlah total pon kopi yang dijual di kolom updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 1 untuk setiap jenis kopi

public void updateCoffeeSales(HashMap salesForWeek) throws SQLException { String updateString = "update COFFEES set SALES = ? where COF_NAME = ?"; String updateStatement = "update COFFEES set TOTAL = TOTAL + ? where COF_NAME = ?"; try (PreparedStatement updateSales = con.prepareStatement(updateString); PreparedStatement updateTotal = con.prepareStatement(updateStatement)) { con.setAutoCommit(false); for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit(); } } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); if (con != null) { try { System.err.print("Transaction is being rolled back"); con.rollback(); } catch (SQLException excep) { JDBCTutorialUtilities.printSQLException(excep); } } } } _

Berikut ini membuat objek PreparedStatement_ yang mengambil dua parameter masukan

String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString);

Anda harus memberikan nilai sebagai pengganti placeholder tanda tanya (jika ada) sebelum Anda dapat mengeksekusi objek PreparedStatement. Lakukan ini dengan memanggil salah satu metode penyetel yang ditentukan dalam kelas PreparedStatement. Pernyataan berikut melengkapi dua placeholder tanda tanya di PreparedStatement bernama updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 6

updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); _

Argumen pertama untuk masing-masing metode penyetel ini menentukan placeholder tanda tanya. Dalam contoh ini, updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); _7 menentukan placeholder pertama dan updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 8 menentukan placeholder kedua

Setelah parameter ditetapkan dengan nilai, ia mempertahankan nilai itu sampai disetel ulang ke nilai lain, atau metode updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 9 disebut. Menggunakan objek PreparedStatement updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 6, fragmen kode berikut mengilustrasikan penggunaan kembali pernyataan yang telah disiapkan setelah menyetel ulang nilai salah satu parameternya dan membiarkan parameter lainnya tetap sama

// changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate();

Menggunakan Loops untuk Mengatur Nilai

Anda sering dapat membuat pengkodean lebih mudah dengan menggunakan // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 2 loop atau // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 3 loop untuk menetapkan nilai parameter input

Metode String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); 9 menggunakan for-each loop untuk berulang kali menetapkan nilai dalam objek PreparedStatement updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 6 dan // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 7

for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... }

Metode String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); _9 mengambil satu argumen, // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 9. Setiap elemen dalam argumen // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); _9 berisi nama satu jenis kopi dan jumlah pound dari jenis kopi yang terjual selama minggu ini. Perulangan untuk setiap pengulangan melalui setiap elemen argumen // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 9 dan menetapkan placeholder tanda tanya yang sesuai di updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 6 dan // changes SALES column of French Roast //row to 100 updateSales.setInt(1, 100); updateSales.setString(2, "French_Roast"); updateSales.executeUpdate(); // changes SALES column of Espresso row to 100 // (the first parameter stayed 100, and the second // parameter was reset to "Espresso") updateSales.setString(2, "Espresso"); updateSales.executeUpdate(); 7

Seperti objek String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); _0, untuk mengeksekusi objek PreparedStatement, panggil pernyataan eksekusi. for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 6 jika kueri mengembalikan hanya satu for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 7 (seperti pernyataan SQL for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 8), for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 9 jika kueri tidak mengembalikan for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 7 (seperti pernyataan SQL updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit(); 1), atau updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit(); 2 jika kueri mungkin mengembalikan lebih dari satu objek ________20. Kedua objek PreparedStatement di updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit(); 5 berisi updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit(); 1 pernyataan SQL, sehingga keduanya dijalankan dengan memanggil for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 9

updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); updateSales.executeUpdate(); updateTotal.setInt(1, e.getValue().intValue()); updateTotal.setString(2, e.getKey()); updateTotal.executeUpdate(); con.commit();

Tidak ada argumen yang diberikan ke for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } _9 ketika mereka digunakan untuk mengeksekusi updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); 6 dan con.setAutoCommit(false); 0;

Catatan. Di awal String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString); _9, mode auto-commit disetel ke false

con.setAutoCommit(false);

Akibatnya, tidak ada pernyataan SQL yang dilakukan hingga metode con.setAutoCommit(false); 3 dipanggil. Untuk informasi selengkapnya tentang mode komitmen otomatis, lihat Transaksi

Mengembalikan Nilai untuk Metode executionUpdate

Sedangkan for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } _6 mengembalikan objek for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 7 yang berisi hasil kueri yang dikirim ke DBMS, nilai kembalian untuk for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 9 adalah nilai con.setAutoCommit(false); 7 yang menunjukkan berapa banyak baris tabel yang diperbarui. Misalnya, kode berikut menunjukkan nilai balik dari for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 9 yang ditugaskan ke variabel con.setAutoCommit(false); 9

updateSales.setInt(1, 50); updateSales.setString(2, "Espresso"); int n = updateSales.executeUpdate(); // n = 1 because one row had a change in it

Tabel updateSales.setInt(1, 50); updateSales.setString(2, "Espresso"); int n = updateSales.executeUpdate(); // n = 1 because one row had a change in it 0 diperbarui; . Pembaruan itu memengaruhi satu baris dalam tabel, jadi con.setAutoCommit(false); 9 sama dengan 1

Ketika metode for (Map.Entry e : salesForWeek.entrySet()) { updateSales.setInt(1, e.getValue().intValue()); updateSales.setString(2, e.getKey()); // ... } 9 digunakan untuk mengeksekusi pernyataan DDL (bahasa definisi data), seperti dalam membuat tabel, ia mengembalikan nilai con.setAutoCommit(false); 7 dari 0. Akibatnya, dalam fragmen kode berikut, yang mengeksekusi pernyataan DDL yang digunakan untuk membuat tabel updateSales.setInt(1, 50); updateSales.setString(2, "Espresso"); int n = updateSales.executeUpdate(); // n = 1 because one row had a change in it 0, con.setAutoCommit(false); 9 diberi nilai 0

Apa penanganan pengecualian di MySQL?

Saat bekerja dengan prosedur tersimpan di MySQL jika pengecualian atau terjadi, eksekusi prosedur berhenti tiba-tiba, untuk menghindari hal ini, Anda perlu menangani pengecualian di MYSQL. MySQL menyediakan penangan untuk menangani pengecualian dalam prosedur tersimpan .

Apa sintaks yang benar untuk mendeklarasikan penangan untuk kesalahan di MySQL?

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET got_error = 1; Pada contoh di atas, handler berarti jika terjadi error maka atur nilai variabel got_error menjadi 10 dan lanjutkan .

Apa yang Anda maksud dengan penanganan pengecualian?

Penanganan eksepsi adalah proses menanggapi kejadian yang tidak diinginkan atau tidak terduga saat program komputer dijalankan . Penanganan pengecualian berurusan dengan kejadian ini untuk menghindari program atau sistem yang mogok, dan tanpa proses ini, pengecualian akan mengganggu operasi normal suatu program.

Bagaimana cara menangani pengecualian MySQL di Jawa?

Ketika pengecualian seperti itu terjadi, objek bertipe SQLException akan diteruskan ke catch clause . Mendapat nomor kesalahan yang terkait dengan pengecualian. Mendapat pesan kesalahan driver JDBC untuk kesalahan, ditangani oleh driver atau mendapatkan nomor dan pesan kesalahan Oracle untuk kesalahan database.

Postingan terbaru

LIHAT SEMUA