Pemprosesan Kumpulan di JDBC

Java Teratas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS

1. Pengenalan

Java Database Connectivity (JDBC) adalah Java API yang digunakan untuk berinteraksi dengan pangkalan data. Pemprosesan kumpulan mengumpulkan banyak pertanyaan menjadi satu unit dan meneruskannya dalam satu perjalanan rangkaian ke pangkalan data.

Dalam artikel ini, kita akan mengetahui bagaimana JDBC dapat digunakan untuk memproses kumpulan pertanyaan SQL.

Untuk maklumat lanjut mengenai JDBC, anda boleh melihat artikel pengenalan kami di sini.

2. Mengapa Pemprosesan Kumpulan?

Prestasi dan ketekalan data adalah motif utama untuk melakukan pemprosesan kumpulan.

2.1. Prestasi yang bertambah baik

Sebilangan kes penggunaan memerlukan sejumlah besar data dimasukkan ke dalam jadual pangkalan data. Semasa menggunakan JDBC, salah satu cara untuk mencapainya tanpa proses batch, adalah dengan melaksanakan beberapa pertanyaan secara berurutan.

Mari kita lihat contoh pertanyaan berturutan yang dihantar ke pangkalan data:

statement.execute("INSERT INTO EMPLOYEE(ID, NAME, DESIGNATION) " + "VALUES ('1','EmployeeName1','Designation1')"); statement.execute("INSERT INTO EMPLOYEE(ID, NAME, DESIGNATION) " + "VALUES ('2','EmployeeName2','Designation2')");

Panggilan berurutan ini akan meningkatkan jumlah perjalanan rangkaian ke pangkalan data yang mengakibatkan prestasi yang buruk.

Dengan menggunakan batch processing, pertanyaan ini dapat dikirim ke pangkalan data dalam satu panggilan, sehingga meningkatkan kinerja.

2.2. Ketekalan Data

Dalam keadaan tertentu, data perlu dimasukkan ke dalam beberapa jadual. Ini membawa kepada transaksi yang saling berkaitan di mana urutan pertanyaan yang diajukan adalah penting.

Kesalahan yang berlaku semasa pelaksanaan harus mengakibatkan pemulangan data yang didorong oleh pertanyaan sebelumnya jika ada.

Mari kita lihat contoh penambahan data ke beberapa jadual:

statement.execute("INSERT INTO EMPLOYEE(ID, NAME, DESIGNATION) " + "VALUES ('1','EmployeeName1','Designation1')"); statement.execute("INSERT INTO EMP_ADDRESS(ID, EMP_ID, ADDRESS) " + "VALUES ('10','1','Address')"); 

Masalah biasa dalam pendekatan di atas timbul apabila pernyataan pertama berjaya dan pernyataan kedua gagal. Dalam keadaan ini, tidak ada pemulangan data yang dimasukkan oleh pernyataan pertama, yang menyebabkan ketidakkonsistenan data.

Kami dapat mencapai konsistensi data dengan merangkumi transaksi di beberapa sisipan / kemas kini dan kemudian melakukan transaksi pada akhir atau melakukan pemulangan sekiranya terdapat pengecualian, tetapi dalam hal ini, kami masih memukul pangkalan data berulang kali untuk setiap pernyataan.

3. Cara Melakukan Pemprosesan Batch

JDBC menyediakan dua kelas, Statement dan PreparedStatement untuk melaksanakan pertanyaan pada pangkalan data. Kedua-dua kelas mempunyai pelaksanaan sendiri kaedah addBatch () dan executeBatch () yang memberi kami fungsi pemprosesan kumpulan.

3.1. Pemprosesan Kumpulan Menggunakan Penyataan

Dengan JDBC, cara termudah untuk melaksanakan pertanyaan pada pangkalan data adalah melalui objek Pernyataan .

Pertama, dengan menggunakan addBatch () kita dapat menambahkan semua pertanyaan SQL ke dalam kumpulan dan kemudian melaksanakan pertanyaan SQL tersebut menggunakan executeBatch () .

Jenis pengembalian executeBatch () adalah array int yang menunjukkan berapa banyak rekod yang dipengaruhi oleh pelaksanaan setiap pernyataan SQL.

Mari kita lihat contoh membuat dan melaksanakan kumpulan menggunakan Pernyataan:

Statement statement = connection.createStatement(); statement.addBatch("INSERT INTO EMPLOYEE(ID, NAME, DESIGNATION) " + "VALUES ('1','EmployeeName','Designation')"); statement.addBatch("INSERT INTO EMP_ADDRESS(ID, EMP_ID, ADDRESS) " + "VALUES ('10','1','Address')"); statement.executeBatch(); 

Dalam contoh di atas, kami cuba memasukkan rekod ke dalam jadual EMPLOYEE dan EMP_ADDRESS menggunakan Pernyataan . Kita dapat melihat bagaimana pertanyaan SQL ditambahkan dalam kumpulan yang akan dijalankan.

3.2. Pemprosesan Kumpulan Menggunakan Penyataan Bersedia

PreparedStatement adalah kelas lain yang digunakan untuk melaksanakan pertanyaan SQL . Ini membolehkan penggunaan semula pernyataan SQL dan menghendaki kami menetapkan parameter baru untuk setiap kemas kini / sisipan.

Mari lihat contoh menggunakan PreparedStatement. Pertama, kami menyediakan pernyataan menggunakan pertanyaan SQL yang dikodkan sebagai String:

String[] EMPLOYEES = new String[]{"Zuck","Mike","Larry","Musk","Steve"}; String[] DESIGNATIONS = new String[]{"CFO","CSO","CTO","CEO","CMO"}; String insertEmployeeSQL = "INSERT INTO EMPLOYEE(ID, NAME, DESIGNATION) " + "VALUES (?,?,?)"; PreparedStatement employeeStmt = connection.prepareStatement(insertEmployeeSQL);

Seterusnya, kami melengkapkan susunan nilai String dan menambahkan pertanyaan yang baru dikonfigurasi ke kumpulan.

Setelah gelung selesai, kami melaksanakan kumpulan:

for(int i = 0; i < EMPLOYEES.length; i++){ String employeeId = UUID.randomUUID().toString(); employeeStmt.setString(1,employeeId); employeeStmt.setString(2,EMPLOYEES[i]); employeeStmt.setString(3,DESIGNATIONS[i]); employeeStmt.addBatch(); } employeeStmt.executeBatch(); 

Dalam contoh yang ditunjukkan di atas, kami memasukkan rekod ke dalam jadual EMPLOYEE menggunakan PreparedStatement. Kita dapat melihat bagaimana nilai yang akan dimasukkan ditetapkan dalam pertanyaan dan kemudian ditambahkan ke kumpulan yang akan dijalankan.

4. Kesimpulan

Dalam artikel ini, kami melihat bagaimana pemprosesan kumpulan pertanyaan SQL penting semasa berinteraksi dengan pangkalan data menggunakan JDBC.

Seperti biasa, kod yang berkaitan dengan artikel ini boleh didapati di Github.

Bahagian bawah Java

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS