Kötegelt feldolgozás JDBC-ben

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Bemutatkozás

A Java Database Connectivity (JDBC) egy Java API, amelyet adatbázisokkal való interakcióra használnak. A kötegelt feldolgozás több lekérdezést egy egységbe csoportosít, és egyetlen hálózati út során továbbítja egy adatbázisba.

Ebben a cikkben megtudjuk, hogyan használható a JDBC az SQL lekérdezések kötegelt feldolgozásához.

A JDBC-vel kapcsolatos további információkért tekintse meg itt a bemutatkozó cikkünket.

2. Miért kötegelt feldolgozás?

A teljesítmény és az adatok konzisztenciája a kötegelt feldolgozás elsődleges motívuma.

2.1. Jobb teljesítmény

Egyes használati esetekben nagy mennyiségű adatot kell megadni az adatbázis-táblában. A JDBC használata közben ennek egyik módja a kötegelt feldolgozás nélküli elérés, ha több lekérdezést hajt végre egymás után.

Lássunk egy példát az adatbázisba küldött szekvenciális lekérdezésekre:

utasítás.execute ("INSERT INTO MUNKAVÁLLALÓ (ID, NÉV, KIJELÖLÉS") + "ÉRTÉKEK ('1', 'EmployeeName1', 'Designation1')"); utasítás.execute ("INSERT INTO MUNKAVÁLLALÓ (ID, NÉV, MEGNEVEZÉS)" + "ÉRTÉKEK ('2', 'EmployeeName2', 'Designation2')");

Ezek a szekvenciális hívások megnövelik az adatbázisba történő hálózati utak számát, ami gyenge teljesítményt eredményez.

A kötegelt feldolgozás használatával ezeket a lekérdezéseket egy hívás során el lehet küldeni az adatbázisba, ezáltal javítva a teljesítményt.

2.2. Adatkonzisztencia

Bizonyos körülmények között az adatokat több táblába kell helyezni. Ez egymással összefüggő tranzakcióhoz vezet, ahol a feltett lekérdezések sorrendje fontos.

A végrehajtás során fellépő hibáknak a korábbi lekérdezések által adott adatok visszagörgetését kell eredményezniük, ha vannak ilyenek.

Lássunk egy példát adatok több táblázatba történő felvételére:

utasítás.execute ("INSERT INTO MUNKAVÁLLALÓ (ID, NÉV, KIJELÖLÉS") + "ÉRTÉKEK ('1', 'EmployeeName1', 'Designation1')"); utasítás.execute ("INSERT INTO EMP_ADDRESS (ID, EMP_ID, CÍM)" + "VALUES ('10', '1', 'Cím')"); 

Tipikus probléma a fenti megközelítésben akkor merül fel, amikor az első állítás sikeres, a második pedig nem. Ebben a helyzetben nincs az első utasítással beszúrt adatok visszagörgetése, ami következetlenséghez vezet.

Az adatok konzisztenciáját úgy érhetjük el, hogy egy tranzakciót átterjesztünk több beillesztés / frissítés során, majd a tranzakció végén elkötelezzük magunkat, vagy kivételek esetén visszagörgetést hajtunk végre, de ebben az esetben továbbra is minden állításhoz ismételten eltaláljuk az adatbázist.

3. Hogyan kell elvégezni a kötegelt feldolgozást

A JDBC két osztályt kínál, Nyilatkozat és PreparedStatement lekérdezések végrehajtására az adatbázisban. Mindkét osztálynak saját megvalósítása van a addBatch () és executeBatch () módszerek, amelyek biztosítják a kötegelt feldolgozási funkciókat.

3.1. Kötegelt feldolgozás használatával Nyilatkozat

A JDBC segítségével a lekérdezések adatbázisban történő végrehajtásának legegyszerűbb módja a Nyilatkozat tárgy.

Először is addBatch () hozzáadhatjuk az összes SQL-lekérdezést egy köteghez, majd az SQL-lekérdezéseket végrehajtva használhatjuk executeBatch ().

A visszatérési típusa executeBatch () egy int tömb jelzi, hogy hány rekordot érintett az egyes SQL utasítások végrehajtása.

Nézzünk meg egy példát egy köteg létrehozására és végrehajtására a Statement használatával:

Statement utasítás = connection.createStatement (); utasítás.addBatch ("INSERT INTO MUNKAVÁLLALÓ (ID, NÉV, KIJELÖLÉS") + "ÉRTÉKEK ('1', 'EmployeeName', 'Megnevezés')"); utasítás.addBatch ("INSERT INTO EMP_ADDRESS (ID, EMP_ID, CÍM)" + "VALUES ('10', '1', 'Cím')"); utasítás.executeBatch (); 

A fenti példában rekordokat próbálunk beilleszteni a MUNKAVÁLLALÓ és EMP_ADDRESS táblázatok segítségével Nyilatkozat. Láthatjuk, hogy az SQL lekérdezések hogyan kerülnek a végrehajtandó kötegbe.

3.2. Kötegelt feldolgozás használatával PreparedStatement

PreparedStatement egy másik osztály, amelyet SQL lekérdezések végrehajtására használnak. Lehetővé teszi az SQL utasítások újrafelhasználását, és megköveteli, hogy minden frissítéshez / beillesztéshez új paramétereket állítsunk be.

Lássunk egy példát a PreparedStatement. Először állítsuk be az utasítást a-ként kódolt SQL lekérdezés segítségével Húr:

String [] MUNKATÁRSAK = új húr [] {"Zuck", "Mike", "Larry", "Musk", "Steve"}; Karakterlánc [] DESIGNATIONS = új karakterlánc [] {"CFO", "CSO", "CTO", "CEO", "CMO"}; String insertEmployeeSQL = "INSERT INTO MUNKAVÁLLALÓ (ID, NÉV, KIJELÖLÉS") + "VALUES (?,?,?)"; PreparedStatement workerStmt = connection.prepareStatement (insertEmployeeSQL);

Ezután végigvezetünk egy tömböt Húr értékeket, és adjon hozzá egy újonnan konfigurált lekérdezést a köteghez.

Miután a ciklus befejeződött, végrehajtjuk a köteget:

for (int i = 0; i <EMPLOYEES.length; i ++) {String alkalmazottId = UUID.randomUUID (). toString (); workerStmt.setString (1, workerId); workerStmt.setString (2, MUNKAVÁLLALÓK [i]); workerStmt.setString (3, JELÖLÉSEK [i]); alkalmazottStmt.addBatch (); } workerStmt.executeBatch (); 

A fenti példában rekordokat illesztünk be a MUNKAVÁLLALÓ táblázat segítségével PreparedStatement. Láthatjuk, hogy a beillesztendő értékek hogyan vannak beállítva a lekérdezésben, majd hozzáadva a végrehajtandó köteghez.

4. Következtetés

Ebben a cikkben azt láttuk, hogy az SQL-lekérdezések kötegelt feldolgozása fontos, miközben a JDBC használatával kölcsönhatásba lépnek az adatbázisokkal.

Mint mindig, a cikkhez kapcsolódó kód megtalálható a Github oldalon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT