Java 2 Útikalauz programozóknak 5.0

Az elte.java2_utikalauz5.jdbc csomag

Az Adatbázis-programozás fejezet példaprogramjai.

Tovább lásd:
          részletes leírás

Osztályok
Dolgozo Példatípus (dolgozó) a felhasználói SQL típusok használatának szemléltetésére.
JDBCTeszt Példaprogram a JDBC használatának szemléltetésére.
Lakhely Példatípus (lakhely) a felhasználói SQL típusok használatának szemléltetésére.
Penz Példatípus (pénzösszeg) a felhasználói SQL típusok használatának szemléltetésére.
Rovidnev Példatípus (szöveges név) a felhasználói SQL típusok használatának szemléltetésére.
Szemely Példatípus (személy) a felhasználói SQL típusok használatának szemléltetésére.
Teljesnev Példatípus (személynév) a felhasználói SQL típusok használatának szemléltetésére.
 

package elte.java2_utikalauz5.jdbc

Az Adatbázis-programozás fejezet példaprogramjai.

A Java nyelv hálózati szolgáltatásai miatt ideálisan megfelel kliens-szerver architektúrájú adatbázis-kezelő programok létrehozására. Ezért felmerült az igény a legkülönfélébb adatbázisok elérési lehetőségére, amit a JDBC biztosít.
Tartalomjegyzék a hivatkozott referenciákkal és felhasznált képekkel:
JDBC meghajtóprogramok
Két- és háromrétegű adatbázis-elérési modell
JDBC-nek megfelelő meghajtóprogramok
  • Referenciák:
ODBC--JDBC
Továbbfejlesztési tervek
A JDBC használata
Fordítás
Futtatás
Meghajtóprogramok kezelése
A meghajtóprogram kiválasztása
Meghajtóprogramok regisztrálása
Kapcsolattartás az adatbázissal
Adatbázis-URL-ek
Kapcsolat felvételének hagyományos módja
Kapcsolat felvételének ajánlott módja
Kapcsolatok újrahasznosítása
Tranzakciókezelés
Tranzakció-izolációs szintek
Globális tranzakciók
Információ a kapcsolatról
Hibakezelés
Kapcsolat lezárása
JDBC típusok
A JDBC típus használata
SQL -- Java típusmegfeleltetés
CHAR, VARCHAR és LONGVARCHAR
DECIMAL és NUMERIC
BINARY, VARBINARY és LONGVARBINARY
BIT, BOOLEAN
Egész számok
Lebegőpontos számok
Dátum/idő
Hivatkozás
SQL3 adattípusok
BLOB/CLOB
  • Referenciák:
ARRAY
  • Referenciák:
REF
  • Referenciák:
    • A Ref interfész
Az SQL NULL kezelése
Felhasználói SQL adattípusok
Paraméteres (DISTINCT) felhasználói SQL típus
Strukturált (STRUCT) felhasználói SQL típus
  • Referenciák:
Felhasználói SQL adattípusok Java megfeleltetése
Adatbázisbeli Java objektumok
SQL utasítások végrehajtása
A Statement interfész
Statement létrehozása
Statement végrehajtása
Statement megszakítása
Statement befejeződése
Escape-szintaxis használata
A PreparedStatement interfész
PreparedStatement létrehozása
PreparedStatement végrehajtása
Bemenő paraméterek típusának lekérdezése
Bemenő paraméterek értékének megadása
Nagyméretű bemenő paraméterek megadása
A CallableStatement interfész
CallableStatement létrehozása
CallableStatement végrehajtása
Kimenő paraméterek értékeinek lekérdezése
SQL utasítások kötegelt végrehajtása
Kötegelt végrehajtás előkészítése
Kötegelt végrehajtás indítása
Hibakezelés kötegelt végrehajtás esetén
Példa kötegelt végrehajtásra
int[] updateCounts;
Connection con=...                        // a felhasználandó adatbáziskapcsolat
Statement stmt=null;                             // a végrehajtandó SQL utasítás
try {
    con.setAutoCommit(false);            // automatikus véglegesítés kikapcsolva
    stmt = con.createStatement();                       // Statement létrehozása
    stmt.addBatch("CREATE TABLE NEVEK OF TELJESNÉV");       // tábla létrehozása
    stmt.addBatch("INSERT INTO NEVEK VALUES ('Gábor', 'Dénes')");  // feltöltése
    stmt.addBatch("INSERT INTO NEVEK VALUES ('Máté', 'Barbara')");
    stmt.addBatch("INSERT INTO NEVEK VALUES ('Csilla', 'Péter')");
    stmt.addBatch("DELETE FROM NEVEK");                            // és ürítése
    updateCounts = stmt.executeBatch();             // eredmény: {0, 1, 1, 1, 3}
    stmt = con.prepareStatement(       // ismétlődő feltöltés
                  "INSERT INTO NEVEK VALUES (?, ?)"); //előfordított utasítással
    ((PreparedStatement)stmt).setString(1, "Névtelen");
    for (int i=1; i<=10; i++) {
        ((PreparedStatement)stmt).setString(2, "Felhasználó"+i );
        stmt.addBatch();
    }
    updateCounts = stmt.executeBatch();       // eredmény: {1,1,1,1,1,1,1,1,1,1}
    stmt.addBatch("SELECT * FROM NEVEK");                     // itt még nem, de
    updateCounts = stmt.executeBatch(); //itt Exception (mivel select nem lehet)
} catch (BatchUpdateException bue) {                 // hibaüzenet megjelenítése
        System.err.println("BatchUpdateException: " + bue.getMessage());
        System.err.println("SQLState:  " + bue.getSQLState());
        System.err.println("ErrorCode:  " + bue.getErrorCode());
        System.err.println("Sikeres végrehajtások sormódosítási számai:");
        updateCounts = bue.getUpdateCounts();
        for (int i=1; i<=updateCounts.length; i++)
             System.err.println("\t" + i + ".: " + updateCounts[i]);
} catch (SQLException se) {
        System.err.println("SQLException: " + se.getMessage());
        System.err.println("SQLState:  " + se.getSQLState());
        System.err.println("ErrorCode:  " + se.getErrorCode());
} finally {                                        // erőforrások felszabadítása
        if (stmt != null) try {                            // Statement lezárása
           stmt.close();
        } catch (SQLException se) {}
        if (con != null)  try {                   // adatbáziskapcsolat lezárása
           con.close();
        } catch (SQLException se) {}
}
    
Eredménytáblák kezelése
Eredménytábla típusok
Eredménytábla létrehozása
Eredménytábla elérésének optimalizálása
Navigálás az eredménytáblában
Értékek beolvasása
Értékek módosítása
Új sor beszúrása
Sor törlése
Változások észlelése
Eredménytábla lezárása
Önálló eredménytáblák
Adatforrás megadása
Eredménytábla feltöltése
Eredménytábla használata
Eredménytábla események
Önálló eredménytábla megvalósítások
Önálló JDBC táblák
Memória táblák
A következő példa lapozást használva végigmegy a teljes memóriatábla összes során:
Connection con = ...
CachedRowSet crs = ...

crs.setPageSize(100);                                   //100 soronként lapozunk
crs.execute(con);                                          //első lap feltöltése
do {
    while(crs.next()) {
        ...                                                     //sorfeldolgozás
    }
} while(crs.nextPage());                                               //lapozás
\end{verbatim}
            

Az alábbi kóddal a véglegesítéskor fellépő szinkronizálási konfliktusokat saját magunk is feloldhatjuk:

Connection con = ...
CachedRowSet crs = ...

try {
    crs.acceptChanges(con);             //változások visszaírása az adatforrásba
} catch (SyncProviderException spe) {       //szinkronizálási hibák feldolgozása
    SyncResolver resolver = spe.getSyncResolver();
    Object régiérték;                     //az adatforrásból jövő aktuális érték
    Object ütközőérték:               //a szinkronizálási ütközést kiváltó érték
    Object újérték:                                   //a hibát feloldó új érték
    while(resolver.nextConflict())  {                  //ütközések végigolvasása
        if (resolver.getStatus() == SyncResolver.UPDATE_ROW_CONFLICT) {//módosít
            crs.absolute(resolver.getRow());  //eredeti adatforrásban pozícionál
            int oszlopok = crs.getMetaData().getColumnCount();  //oszlopok száma
            for (int oszlop = 1; oszlop <= oszlopok; oszlop++) {
                ütközőérték = resolver.getConflictValue(oszlop);
                if (ütközőérték != null)  {           //van ütközés az oszlopban
                    régiérték = crs.getObject(oszlop);
                    újérték = ...                            //ütközés feloldása
                    resolver.setResolvedValue(oszlop, újérték);
                }
            }
        }
    }
}
            
Hálózati táblák
Szűrt táblák
Önálló táblák összekapcsolása
Példa

Szerző:
Kispitye Software
Forrásfájl:
package-info.java

Java 2 Útikalauz programozóknak 5.0