/**
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:
CHAR
, VARCHAR
és LONGVARCHAR
DECIMAL
és NUMERIC
BINARY
, VARBINARY
és LONGVARBINARY
BIT
, BOOLEAN
BLOB
/CLOB
ARRAY
REF
NULL
kezelése
DISTINCT
) felhasználói SQL típus
STRUCT
) felhasználói SQL típus
Statement
interfész
Statement
létrehozása
Statement
végrehajtása
Statement
megszakítása
Statement
befejeződése
PreparedStatement
interfész
PreparedStatement
létrehozása
PreparedStatement
végrehajtása
CallableStatement
interfész
CallableStatement
létrehozása
CallableStatement
végrehajtása
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) {} } |
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); } } } } } |