CodeGym/Java tanfolyam/All lectures for HU purposes/Haladó munka a ResultSet segítségével

Haladó munka a ResultSet segítségével

Elérhető

ResultSet testreszabása

A modern JDBC API lehetővé teszi az objektumok nagymértékben testreszabását.NyilatkozatÉseredménykészlet. Például a használatávaleredménykészletmódosíthatja a sorokat az adatbázisban.

Egy utasításobjektum létrehozásakor egy csomó kívánságunkat átadhatjuk bele. Ezek a kívánságok három csoportra oszthatók:

  • Alapcsatlakozás típusa
  • Egyidejű hozzáférés-szabályozás
  • Kitartás és tranzakciók

Ezek a paraméterek átadhatók egy objektum létrehozásakorNyilatkozatvagyKészített nyilatkozat. Példa:

Statement statement = connection.createStatement(
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT );

PreparedStatement statement = connection.prepareStatement(sql,
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT);

Nem fogjuk ezeket a dolgokat mélyrehatóan tanulmányozni, de szeretném, ha tudná, hogy ez lehetséges, ha valaki más kódjában találkozik hasonlóval.

ResultSet típusok

A ResultSet adott típusú lehet. A típus meghatározza a ResultSet néhány jellemzőjét és képességét.

Nem minden típust támogat minden adatbázis és JDBC-illesztőprogram. Ellenőriznie kell az adatbázist és a JDBC illesztőprogramot, hogy lássa, támogatja-e a használni kívánt típust. A DatabaseMetaData.supportsResultSetType(int type) metódus igaz vagy hamis értéket ad vissza attól függően, hogy az adott típus támogatott-e vagy sem.

A cikk írásakor háromféle ResultSet létezik:

  • ResultSet.TYPE_FORWARD_ONLY
  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.TYPE_SCROLL_SENSITIVE

Az alapértelmezett típus a TYPE_FORWARD_ONLY.

A TYPE_FORWARD_ONLY azt jelenti, hogy a ResultSet csak előre mozgatható. Vagyis csak az 1. sorból, a 2. sorból, a 3. sorból stb. lehet lépni. ResultSetben nem lehet visszafelé haladni: a 9. sorból nem lehet adatokat olvasni a tizedik beolvasása után.

A TYPE_SCROLL_INSENSITIVE azt jelenti, hogy a ResultSet mozgatható (görgethető) előre vagy hátra. Mozoghat az aktuális pozícióhoz képest egy pozícióba, vagy egy abszolút pozícióba.

Az ilyen típusú ResultSet érzéketlen a mögöttes adatforrás változásaira, amíg a ResultSet nyitva van. Azaz, ha a ResultSet egy bejegyzését egy másik szál vagy folyamat megváltoztatja az adatbázisban, az nem fog tükröződni a már megnyitotteredménykészletebből a típusból.

A TYPE_SCROLL_SENSITIVE azt jelenti, hogy a ResultSet mozgatható (görgethető) előre vagy hátra. Mozoghat az aktuális pozícióhoz képest egy pozícióba, vagy egy abszolút pozícióba.

Az ilyen típusú ResultSet érzékeny a mögöttes adatforrás változásaira, amíg a ResultSet nyitva van. Ez azt jelenti, hogy ha a ResultSet egy bejegyzését megváltoztatja az adatbázisban egy másik szál vagy folyamat, akkor az tükröződik a már nyitotteredménykészletebből a típusból.

Egyidejűség

A ResultSet egyidejűsége határozza meg, hogy a ResultSet frissíthető-e vagy csak olvasható.

Egyes adatbázisok és JDBC-illesztőprogramok támogatják a ResultSet frissítését, de nem mindegyik. A DatabaseMetaData.supportsResultSetConcurrency(int concurrency) metódus igaz vagy hamis értéket ad vissza attól függően, hogy az adott párhuzamossági mód támogatott-e vagy sem.

A ResultSet két párhuzamossági szint egyikével rendelkezhet:

  • ResultSet.CONCUR_READ_ONLY
  • ResultSet.CONCUR_UPDATABLE

A CONCUR_READ_ONLY azt jelenti, hogy a ResultSet csak olvasható.

A CONCUR_UPDATABLE azt jelenti, hogy a ResultSet olvasható és módosítható.

Példa az adatbázisban lévő adatok megváltoztatására

Ezekkel a paraméterekkel vezérelheti a generált utasítást és annak eredménykészletét.

Létrehozhat például egy frissíthető ResultSet-et, és ezzel módosíthatja az adatbázist. Nyilatkozat készítésekor fontos betartani a következő feltételeket:

  • csak egy táblázat van megadva
  • nem tartalmaz csatlakozási vagy csoportosítási záradékokat
  • A lekérdezési oszlopoknak tartalmazniuk kell egy elsődleges kulcsot

Ha a fenti feltételek teljesülnek, a frissített ResultSet használható egy tábla frissítésére az adatbázisban. Kimutatás objektum létrehozásakor a következő paramétereket kell megadnia:

Statement st = createStatement(Result.TYPE_SCROLL_INSENSITIVE, Result.CONCUR_UPDATABLE)

Egy ilyen utasítás végrehajtásának eredménye egy frissíthető eredményhalmaz. A frissítési módszer az, hogy a ResultSet kurzort a frissíteni kívánt sorra mozgatja, majd meghívja az updateXXX() metódust .

Az updateXXX metódus a getXXX() metódushoz hasonlóan működik . Az updateXXX() metódusnak két paramétere van. Az első a frissítendő oszlop száma, amely lehet oszlopnév vagy sorozatszám. A második a frissítendő adat, és ennek az adattípusnak meg kell egyeznie a XXX-el.

A sor tényleges frissítéséhez az adatbázisban meg kell hívni az updateRow() metódust , mielőtt a ResultSet kurzor elhagyná a módosított sort, különben a változtatások nem kerülnek be az adatbázisba.

Új sorokat is hozzáadhat a táblázathoz:

Először a kurzort egy üres sorra kell mozgatnia. Ehhez hívja meg a moveToInsertRow() metódust .

Ezután ki kell töltenie ezt a sort adatokkal az updateXXX() metódussal .

Ezután meg kell hívnia az inserterRow() metódust , hogy hozzáadja a sort az alaphoz.

Végül pedig vissza kell állítania a kurzort a moveToCurrentRow() metódus meghívásával .

Fontos! Nem minden DBMS támogatja ezeket a lehetőségeket a kiterjesztett nyilatkozathoz. Probléma esetén tekintse meg az adott DBMS hivatalos dokumentációját.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései