Terkadang lebih mudah menggunakan objek String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?"; // ... PreparedStatement updateSales = con.prepareStatement(updateString);0, yang sudah Anda ketahui Show
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 gantinyaFitur utama dari 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 dahuluMeskipun Anda dapat menggunakan objek 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 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 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 NilaiAnda 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());
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());
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());
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());
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());
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 executionUpdateSedangkan 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 it0 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 it0, 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. |