Adatbázisok elérése
- SQL: lekérdezési nyelv
- Adatbázis-hozzáférési típusok
- Adatforrások
- Adatbázisok elérése
Adatbázis eléréséhez adatbázis-kapcsolat szükséges. Ez olyan adattovábbítási csatornát jelent, mely az adatbázissal folytatott közvetlen kommunikációt tesz lehetővé. Emiatt – az előző szakaszban szereplő adatforrásokkal ellentétben – az adatbázis-kapcsolatot a program minden újraindításakor ismét létre kell hozni.
Az Apache OpenOffice többféle módot is biztosít adatbázis-kapcsolatok létrehozására. Ez a példa egy létező adatforráshoz való kapcsolódást mutat be:
Dim DatabaseContext As Object Dim DataSource As Object Dim Connection As Object Dim InteractionHandler as Object DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") If Not DataSource.IsPasswordRequired Then Connection = DataSource.GetConnection("","") Else InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") Connection = DataSource.ConnectWithCompletion(InteractionHandler) End If
A példában szereplő kód először ellenőrzi, hogy az adatbázis jelszóval védett-e. Ha nem az, a GetConnection hívás segítségével létrehozza az adatbázis-kapcsolatot. A parancssor két üres karakterlánca a felhasználónévhez és a jelszóhoz tartozik.
Ha az adatbázis jelszóval védett, a példában szereplő program InteractionHandler kezelőt hoz létre, és a ConnectWithCompletion metódus segítségével nyitja meg az adatbázis-kapcsolatot. Az InteractionHandler biztosítja, hogy az Apache OpenOffice bekérje a felhasználótól a szükséges bejelentkezési adatokat.
A táblák iterálása
Az Apache OpenOffice-ban egy tábla elérése rendszerint a ResultSet objektumon keresztül történik. A ResultSet olyan jelölőtípus, mely a SELECT parancs kiadásának eredményeként kapott találatok halmazán belül az adatok egy aktuális csoportját jelzi.
A példa azt mutatja be, hogy a ResultSet miként használható értékek adatbázistáblából való lekérdezésére.
Dim DatabaseContext As Object Dim DataSource As Object Dim Connection As Object Dim InteractionHandler as Object Dim Statement As Object Dim ResultSet As Object DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") DataSource = DatabaseContext.getByName("Customers") If Not DataSource.IsPasswordRequired Then Connection = DataSource.GetConnection("","") Else InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler") Connection = DataSource.ConnectWithCompletion(InteractionHandler) End If Statement = Connection.createStatement() ResultSet = Statement.executeQuery("SELECT ""CustomerNumber"" FROM ""Customer""") If Not IsNull(ResultSet) Then While ResultSet.next MsgBox ResultSet.getString(1) Wend End If
Az adatbázis-kapcsolat létrejöttét követően a példában szereplő kód először a Connection.createObject hívás segítségével létrehoz egy Statement objektumot. Ez a Statement objektum ezt követően a executeQuery hívást használja az aktuális ResultSet visszaküldésére. Ekkor a program ellenőrzi, hogy a ResultSet valóban létezik-e, és hurok segítségével bejárja az adatrekordokat. A kötelezően megadandó (a példában a CustomerNumber mezőben szereplő) értékek visszaadják a ResultSet objektumot a getString metódus segítségével, ahol az 1 paraméter azt határozza meg, hogy a hívás az első oszlop adataihoz kapcsolódik.
Az SDBC ResultSet objektuma összevethető a DAO, illetve az ADO Recordset objektumával, hiszen szintén alkalmas iterációs hozzáférést biztosítani adatbázishoz. |
Értékek beolvasásának típusspecifikus metódusai
Az előző szakaszban szereplő példában is látható módon az Apache OpenOffice a getString metódust biztosítja a tábla tartalmának eléréséhez. A metódus karakterlánc formájában adja meg az eredményt. A következő get metódusok állnak rendelkezésre:
- getByte()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getShort()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getInt()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getLong()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getFloat()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getDouble()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getBoolean()
- a számok, karakterek és karakterláncok SQL-adattípusait támogatja.
- getString()
- minden SQL-adattípust támogat.
- getBytes()
- a bináris értékek SQL-adattípusait támogatja.
- getDate()
- a számok, a karakterláncok, a dátum és az időbélyeg SQL-adattípusait támogatja.
- getTime()
- a számok, a karakterláncok, a dátum és az időbélyeg SQL-adattípusait támogatja.
- getTimestamp()
- a számok, a karakterláncok, a dátum és az időbélyeg SQL-adattípusait támogatja.
- getCharacterStream()
- a számok, karakterláncok és bináris értékek SQL-adattípusait támogatja.
- getUnicodeStream()
- a számok, karakterláncok és bináris értékek SQL-adattípusait támogatja.
- getBinaryStream()
- bináris értékek.
- getObject()
- minden SQL-adattípust támogat.
Minden esetben paraméterként szerepeltetni kell azoknak az oszlopoknak a számát, amelyek értékeire a lekérdezés vonatkozik.
A ResultSet változatai
Az adatbázisok elérésének gyakran sarkalatos pontja a sebesség. Az Apache OpenOffice több módot is kínál a ResultSet-ek optimalizálására, így lehetővé téve az elérési sebesség szabályozását. Minél több szolgáltatást nyújt a ResultSet, illetve minél összetettebb a megvalósítása, általában annál lassabban futnak a szolgáltatások.
Egy egyszerű ResultSet a lehető legkevesebb szolgáltatást nyújtja. Csak az előre irányú iterálást, illetve értékvizsgálatot teszi lehetővé. Ezért a navigálási lehetőségek szélesebb köre, mint amilyen az értékek módosításának lehetősége is, nem képezi részét.
A ResultSet létrehozásához használt Statement objektum biztosít néhány tulajdonságot, melyek lehetővé teszik a ResultSet szolgáltatásainak módosítását:
- ResultSetConcurrency (állandó)
- beállítások arra vonatkozóan, hogy az adatok módosíthatók-e (a com.sun.star.sdbc.ResultSetConcurrency beállításaival összhangban levő értékek).
- ResultSetType (állandó)
- beállítások a ResultSet típusára vonatkozóan ( a com.sun.star.sdbc.ResultSetType beállításaival összhangban levő értékek).
A com.sun.star.sdbc.ResultSetConcurrency objektumban megadott értékek a következők:
- UPDATABLE
- a ResultSet lehetővé teszi az értékek módosítását.
- READ_ONLY
- a ResultSet tiltja az engedélyek módosítását.
A com.sun.star.sdbc.ResultSetConcurrency állandócsoport a következő beállításokat adja meg:
- FORWARD_ONLY
- a ResultSet csak az előre irányú navigációt teszi lehetővé.
- SCROLL_INSENSITIVE
- a ResultSet bármilyen típusú navigációt engedélyez, azonban az eredeti adatok változtatásait nem jegyzi fel.
- SCROLL_SENSITIVE
- a ResultSet bármilyen típusú navigációt engedélyez, az eredeti adatok módosítása hatással van a ResultSet objektumra.
A READ_ONLY és a SCROLL_INSENSITIVE tulajdonságokat tartalmazó ResultSet az ADO, illetve DAO Snapshot típusába tartozó rekordhalmazzal egyenértékű. |
A ResultSet UPDATEABLE és SCROLL_SENSITIVE tulajdonságainak használatával a ResultSet szolgáltatásainak köre összevethető az ADO, illetve a DAO Dynaset típusba tartozó Recordset objektumával.
Ha a ResultSet típusa SCROLL_INSENSITIVE vagy SCROLL_SENSITIVE, az adathalmazban való navigálás metódusainak teljes köre elérhető. A főbb metódusok a következők:
- next()
- navigálás a következő adatrekordra.
- previous()
- navigálás az előző adatrekordra.
- first()
- navigálás az első adatrekordra.
- last()
- navigálás az utolsó adatrekordra.
- beforeFirst()
- navigálás az első előtti adatrekordra.
- afterLast()
- navigálás az utolsó utáni adatrekordra.
Minden metódus a navigálás sikerességét megadó logikai paramétert ad eredményül.
A kurzor aktuális helyzetének meghatározásához a következő tesztmetódusok állnak rendelkezésre, melyek mindegyike logikai értéket ad eredményül:
- isBeforeFirst()
- ResultSet az első adatrekord előtt áll.
- isAfterLast()
- ResultSet az utolsó adatrekord után áll.
- isFirst()
- ResultSet az első adatrekord.
- isLast()
- ResultSet az utolsó adatrekord.
Adatrekordok módosítása
Ha egy ResultSet létrehozása a ResultSetConcurrency = UPDATEABLE értékkel történt, tartalma szerkeszthető. Ez az állapot csak addig él, ameddig az SQL-parancs lehetővé teszi az adatok újraírását az adatbázisba (alapszabálytól függ). Ez nem lehetséges például kapcsolt oszlopokra vagy halmozott értékekre vonatkozó összetett SQL-parancsok esetében.
A ResultSet objektum Update metódusokat biztosít értékek módosításához, melyek szerkezete azonos az értékek beolvasásához használatos get metódusokkal. Például az updateString metódus karakterlánc beírását teszi lehetővé.
A módosítást követően az értékeket továbbítani kell az adatbázisba az updateRow() metódus segítségével. A hívásnak még a következő navigációs parancs előtt le kell zajlania, különben az értékek elvesznek.
Ha hiba történik a módosítások végrehajtása közben, az javítható a cancelRowUpdates() metódussal. Ez a hívás csak akkor érhető el, ha az adatok visszaírása még nem történt meg az updateRow() segítségével.
Content on this page is licensed under the Public Documentation License (PDL). |