Kötegelt feldolgozás JDBC-ben
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 FOLYAMATOT1. 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ó