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.