Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL dan JDBC dengan rewriteBatchedStatements=true

dengan rewriteBatchedStatements=true JDBC akan mengemas kueri sebanyak mungkin ke dalam satu paket jaringan, dengan cara ini menurunkan overhead jaringan. Apakah saya benar?

Ya. Kode berikut

String myConnectionString =
        "jdbc:mysql://localhost:3307/mydb?" +
        "useUnicode=true&characterEncoding=UTF-8";
try (Connection con = DriverManager.getConnection(myConnectionString, "root", "whatever")) {
    try (PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) {
        for (int i = 1; i <= 5; i++) {
            ps.setString(1, String.format(
                    "Line %d: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 
                    i));
            ps.addBatch();
        }
        ps.executeBatch();
    }
}

akan mengirimkan pernyataan INSERT individual meskipun saya telah membuat Batch

INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...')
INSERT INTO jdbc (`name`) VALUES ('Line 2: Lorem ipsum ...')

Namun, jika saya mengubah string koneksi untuk menyertakan rewriteBatchedStatements=true

String myConnectionString =
        "jdbc:mysql://localhost:3307/mydb?" +
        "useUnicode=true&characterEncoding=UTF-8" +
        "&rewriteBatchedStatements=true";

maka JDBC akan mengirimkan satu atau lebih pernyataan INSERT multi-baris

INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...'),('Line 2: Lorem ipsum ...')

apakah JDBC mengetahui nilai yang diberikan ke max_allowed_packet dan karenanya membuat paket lebih kecil dari nilai yang ditentukan untuk max_allowed_packet ... ?

Ya. Jika Anda mengaktifkan log umum MySQL dan memeriksanya, Anda akan melihat bahwa MySQL Connector/J memeriksa banyak variabel saat terhubung, salah satunya adalah max_allowed_packet . Anda juga dapat mengatur max_allowed_packet kecil nilai dan verifikasi bahwa JDBC membagi batch menjadi beberapa pernyataan INSERT multi-baris jika satu pernyataan tersebut untuk seluruh batch akan melebihi max_allowed_packet .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mencocokkan semua nilai dalam klausa IN

  2. Muat data CSV ke MySQL dengan Python

  3. Aplikasi to-do list menggunakan PHP dan database MySQL

  4. MySQL Tampilkan Pengguna

  5. Pemicu MySQL setelah pembaruan hanya jika baris telah berubah