V tem učbeniku je razloženo, kako uporabiti JDBC ResultSet za pridobivanje podatkov. S primeri bomo spoznali tudi vmesnika ResultSetMetaData in DatabaseMetaData:
V Upravitelj gonilnika JDBC učbenik o Serija učnih gradiv JDBC , smo se naučili uporabljati JDBC DriverManager in njegove metode, JDBC PreparedStatement v aplikacijah Java.
V tem učbeniku bomo obravnavali preostale vmesnike v JDBC. V prejšnjih učbenikih smo obravnavali vmesnike Statement, PreparedStatement in CallableStatement.
Spoznali bomo vmesnike JDBC ResultSet, ResultSetMetaData in DatabaseMetaData, njihove metode in kako jih uporabiti v programu Java.
Vmesnik JDBC ResultSet
Vmesnik ResultSet je v paketu java.sql. Uporablja se za shranjevanje podatkov, ki se vrnejo iz tabele podatkovne zbirke po izvedbi ukazov SQL v programu Java. Objekt ResultSet ohranja točko kurzorja na podatkih rezultata. Privzeto se kurzor nahaja pred prvo vrstico podatkov rezultata.
Metoda next() se uporablja za premikanje kazalca na naslednji položaj v smeri naprej. Če ni več zapisov, vrne FALSE. Podatke pridobi s klicem metode executeQuery() z uporabo katerega koli objekta izjave. To je lahko izjava ali objekt PreparedStatement ali CallableStatement. Vmesnika PreparedStatement in CallableStatement sta podvmesnika izjavevmesnik.
Izjava Vmesnik
Izjava statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
Vmesnik PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS");
Metodo getX() lahko uporabimo za pridobivanje podatkov stolpcev med iteracijo skozi rezultate, kjer je X - podatkovni tip stolpca. Za pridobivanje vrednosti z metodami getX() lahko uporabimo imena stolpcev ali indeks.
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String lastName = rs1.getString("lastName"); String firstName = rs1.getString("firstName"); String email = rs1.getString("email"); String deptNum = rs1.getString("deptNum"); String salary = rs1.getString("salary"); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +", "+deptNum +"," +salary); }
V metodah getX() lahko namesto imena stolpca navedemo tudi številko indeksa stolpca.
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + "," +lastName+ "," +firstName+ "," +email +", "+deptNum +"," +salary); }
Vrste množice rezultatov
Privzeto lahko iteriramo podatke/vrednosti v ResultSet, ki so bili vrnjeni kot rezultat izvedene izjave SQL, v smeri naprej. Vrednosti lahko iteriramo v drugih smereh z uporabo Scrollable ResultSet. Med ustvarjanjem objektov Statement, PreparedStatement in CallableStatement lahko določimo vrsto in sočasnost ResultSet.
V zbirki ResultSet so 3 vrste:
- TYPE_FORWARD_ONLY: To je privzeta možnost, pri kateri se kazalec premika od začetka do konca, tj. v smeri naprej.
- TYPE_SCROLL_INSENSITIVE: V tej vrsti se bo kazalec premikal v smeri naprej in nazaj. Če med iteracijo shranjenih podatkov naredimo kakršne koli spremembe v podatkih, se podatki ne bodo posodobili v podatkovni zbirki, če kdo spremeni podatke v DB. Ker ima podatkovna zbirka podatke od trenutka, ko poizvedba SQL vrne podatke.
- TYPE_SCROLL_SENSITIVE: Podobno je kot TYPE_SCROLL_INSENSITIVE, razlika pa je v tem, da če kdo posodobi podatke po tem, ko je poizvedba SQL vrnila podatke, se med iteracijo odražajo spremembe v podatkovnem nizu.
Niz rezultatov (ResultSet) Concurrency
V ResultSet sta na voljo dva načina za Concurrency, in sicer:
- ResultSet.CONCUR_READ_ONLY: To je privzeti način sočasnosti. Podatke v ResultSet lahko samo beremo. Posodabljanje se ne uporablja.
- ResultSet.CONCUR_UPDATABLE: Podatke v objektu ResultSet lahko posodobimo.
Nekatere podatkovne zbirke ne podpirajo načina hkratnosti za vse tipe ResultSet. V tem primeru moramo z metodo supportsResultSetConcurrency() preveriti, ali podpirajo želeni tip in način hkratnosti.
Metode v vmesniku ResultSet
Obstajajo 4 kategorije metod ResultSet:
- Navigacijske metode
- Metode pridobivanja
- Metode za nastavljanje
- Različne metode
Najprej bomo razpravljali o navigacijskih metodah in nato nadaljevali.
#1) Navigacijske metode
Ta metoda se uporablja za premikanje kurzorja po podatkovnem nizu.
- Boolean absolute(int vrstica): Uporablja se za premik kurzorja v določeno vrstico, ki je navedena v parametru, in vrne true, če je operacija uspešna, sicer vrne false.
- Void afterLast(): Zaradi tega se kurzor ResultSet premakne za zadnjo vrstico.
- Void beforeFirst(): Zaradi tega se kurzor ResultSet premakne pred prvo vrstico.
- Boolean first(): Zaradi tega se kurzor ResultSet premakne v prvo vrstico. Če je operacija uspešna, vrne True, sicer False.
- Boolean last(): Zaradi nje se kurzor ResultSet premakne na zadnjo vrstico. Če je operacija uspešna, vrne True, sicer False.
- Boolean next(): Kazalec ResultSet se premakne na naslednjo vrstico. Če je zapisov več, vrne True, če jih ni, in False, če jih ni več.
- Boolean previous(): Zaradi nje se kurzor ResultSet premakne na prejšnjo vrstico. Če je operacija uspešna, vrne True, sicer False.
- Boolean relative(): Premakne kazalec za določeno število vrstic v smeri naprej ali nazaj.
- Int getRow(): Vrne trenutno številko vrstice, na katero kaže objekt ResultSet.
- Void moveToCurrentRow(): Če je kazalec trenutno v vrstici za vstavljanje, ga premakne nazaj v trenutno vrstico.
- Void moveToInsertRow(): Premakne kurzor na določeno vrstico, da vstavi vrstico v zbirko podatkov. Zapomni si trenutno lokacijo kurzorja. Zato lahko uporabimo metodo moveToCurrentRow(), da premaknemo kurzor na trenutno vrstico po vstavitvi.
V tem učbeniku so vsi programi napisani v Javi. Uporabili smo različico Java 8 in Oracle DB.
>>Programsko opremo Oracle lahko prenesete tukaj
>>Različico Jave 8 lahko prenesete tukaj
Vsebuje postopek namestitve Jave po korakih.
Primer programa JDBC ResultSet: (Uporaba navigacijskih metod)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Samodejno generirana metoda stub //Select query String select_query = "select * fromemployee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Spovezava z Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType =dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Premik kazalca na prvo vrstico rs.first();System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst();System.out.println("Kazalec kaže pred prvo vrstico. Za premik naprej uporabite next()"); /Premik kazalca v prvo vrstico z uporabo next() rs.next(); System.out.println("FIRST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /Premik kazalca v zadnjo vrstico rs.afterLast(); System.out.println("Kazalecza zadnjo vrstico. Uporabite previous() za premik v smeri nazaj"); /Premik kurzorja na točko zadnje vrstice z uporabo previous() rs.previous(); System.out.println("LAST ROW \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /Premik kurzorja na točko tretje vrstice rs.absolute(3); System.out.println("Cursor is pointing at 3rdvrstica"); System.out.println("TRETJA VRSTICA \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); /Premik kazalca na prejšnjo vrstico tretje vrstice rs.relative(-1); System.out.println("Kazalec kaže na 1 vrstico pred 3. vrstico"); System.out.println("DRUGA VRSTICA \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+rs.getString(2)+"\n PRVO IME = " + rs.getString(3)); /Premik kazalca na 4. vrstico po 2. vrstici rs.relative(4); System.out.println("Kazalec kaže na 4. vrstico po 2. vrstici"); System.out.println("ŠESTA VRSTICA \n EMP NUM = " + rs.getInt("empNum") + "\n PRVO IME = "+ rs.getString(2)+"\n PRVO IME = " + rs.getString(3)); /Premik kazalca na trenutno vrsticoSystem.out.println(" Trenutna vrstica = " + rs.getRow()); } } } catch (SQLException e) { e.printStackTrace(); } } } }
IZHOD:
Podatki v tabeli Employee_details
Pojasnilo:
V zgornjem programu smo v ResultSet implementirali metode first(), last(), beforeFirst(), afterLast(), next(), previous(), absolute(), relative() in getRow(). Za uporabo teh metod smo v metodi prepareStatement nastavili vrednosti ResultSet.TYPE_SCROLL_SENSITIVE in ResultSet.CONCUR_UPDATABLE.
Nato bomo razpravljali o metodah Getter v ResultSet:
#2) Metode Getter
V ResultSet so shranjeni podatki tabele iz zbirke podatkov. Metode Getter se uporabljajo za pridobivanje vrednosti tabele v ResultSet. V ta namen moramo posredovati vrednost indeksa stolpca ali ime stolpca.
V nadaljevanju so navedene metode za pridobivanje v ResultSet:
- int getInt (int ColumnIndex): Uporablja se za pridobitev vrednosti določenega stolpca Indeks kot podatkovnega tipa int.
- float getFloat(int ColumnIndex): Uporablja se za pridobitev vrednosti določenega stolpca Indeks kot podatkovnega tipa float.
- java.sql.date getDate(int ColumnIndex): Uporablja se za pridobitev vrednosti določenega stolpca Indeks kot datumske vrednosti.
- int getInt(String ColumnName): Uporablja se za pridobitev vrednosti določenega stolpca kot podatkovnega tipa int.
- float getFloat(String ColumnName): Uporablja se za pridobitev vrednosti določenega stolpca kot podatkovnega tipa float.
- Java.sql.date getDate(String ColumnName): Uporablja se za pridobitev vrednosti določenega stolpca kot vrednosti datuma.
V vmesniku ResultSet so metode za pridobivanje vseh primitivnih podatkovnih tipov (Boolean, long, double) in String. Iz podatkovne zbirke lahko pridobimo tudi polje in binarni tip podatkov. Tudi za to ima metode.
#3) Metode Setter/Updater
Vrednost v podatkovni zbirki lahko posodobimo z metodami ResultSet Updater. To je podobno metodam Getter, vendar moramo tukaj posredovati vrednosti/podatke za določen stolpec, ki ga želimo posodobiti v podatkovni zbirki.
V nadaljevanju so navedene metode posodobitve v ResultSet:
- void updateInt(int ColumnIndex, int Value): Uporablja se za posodobitev vrednosti določenega stolpca Indeks z vrednostjo int.
- void updateFloat(int ColumnIndex, float f): Uporablja se za posodobitev vrednosti določenega stolpca Indeks z vrednostjo float.
- void updateDate(int ColumnIndex, Date d): Uporablja se za posodobitev vrednosti določenega stolpca Indeks z vrednostjo datuma.
- void updateInt(String ColumnName, int Value): Uporablja se za posodobitev vrednosti določenega stolpca z dano vrednostjo int.
- void updateFloat(String ColumnName, float f): Uporablja se za posodobitev vrednosti določenega stolpca z dano vrednostjo float.
- Java.sql.date getDate(String ColumnName): Uporablja se za posodobitev vrednosti določenega stolpca z danim datumom.
V vmesniku ResultSet so metode Updater za vse primitivne podatkovne tipe (Boolean, long, double) in String.
Metode Updater samo posodobijo podatke v objektu ResultSet. Vrednosti bodo posodobljene v DB po klicu metode insertRow ali updateRow.
Posodabljanje vrstice:
Podatke v vrstici lahko posodobimo tako, da pokličemo metodo updateX(), pri čemer posredujemo ime ali indeks stolpca in vrednosti za posodobitev. V metodi updateX lahko namesto podatka X uporabimo kateri koli podatkovni tip. Do zdaj smo posodobili podatke v objektu ResultSet. Za posodobitev podatkov v DB moramo poklicati metodo updateRow().
Vstavljanje vrstice:
Uporabiti moramo metodo moveToInsertRow(), da premaknemo kazalec in vstavimo novo vrstico. To smo že obravnavali v poglavju Navigacijske metode. Nato moramo poklicati metodo updateX(), da v vrstico dodamo podatke. Zagotoviti moramo podatke za vse stolpce, sicer bo uporabljena privzeta vrednost določenega stolpca.
Po posodobitvi podatkov moramo poklicati metodo insertRow(). Nato uporabite metodo moveToCurrentRow(), da se položaj kurzorja vrne v vrstico, v kateri smo bili, preden smo začeli vstavljati novo vrstico.
Primer množice rezultatov:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String[] args) throws ClassNotFoundException { // TODO Samodejno generirana metoda stub String select_query ="select empnum,lastName,firstName from employee_details"; String insert_query = "insert into employee_details values(?,?,?,?,?,?,?,?)"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData();//Preveri, ali gonilnik podpira tip, neobčutljiv na pomikanje, in hkratno posodobitev boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Ustvari pripravljeno izjavo PreparedStatement pstatemnt1 =conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); /Premik kurzorja na točko zadnje vrstice tabele rs.last(); System.out.println("LAST ROW: Before inserting new Employee"); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\nLAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Nastavitev vrednosti za vstavljanje v tabelo EMPLOYEE_DETAILS /Premik kazalca na mesto vstavljanja vrstice v tabelo rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, "Bond"); //Update FIRST NAME value rs.updateString(3, "James"); //Insert a new row rs.insertRow();/Premik kurzorja na točko 5. vrstice rs.absolute(5); System.out.println("Pred posodobitvijo EMPNUM 5. vrstice"); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = " + rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); System.out.println(" Posodobitev EMP id 5. ZAPOSLENEGA"); //Updating EMPNUM of the 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println("\n EMPNUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println("LAST ROW: EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n FIRST NAME = " + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } }}
IZHOD:
Pojasnilo:
V zgornjem programu smo najprej shranili podatke tabele Employee_details v objekt ResultSet z uporabo poizvedbe SELECT. Nato smo prikazali podatke zadnje vrstice v tabeli employee_details z uporabo metode last() v objektu ResultSet. metoda moveToInsertRow() naredi kazalec, da pokaže na trenutno vrstico, zdaj je trenutna vrstica zadnja vrstica.
Metoda updateXXX() je bila uporabljena za posodobitev vrednosti v vrstici, metoda insertRow() pa je vstavila podatke v novo vrstico. Z uporabo metode absolute() smo kazalec usmerili na 5. vrstico. Metoda UpdateInt() je bila uporabljena za posodobitev EMPNUM z novim id 5. zaposlenega v tabeli. Nato smo prikazali podatke in preverili, ali je EMPNUM posodobljen ali ne.
Z ukazom last() usmerite kurzor na zadnjo vrstico tabele in jo prikažite. Za izvedbo zgornje logike moramo v metodi prepareStatement nastaviti vrednosti ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE.
#4) Različne metode
- void close(): Uporablja se za zaprtje primerka ResultSet in sprostitev virov, povezanih s primerkom ResultSet.
- ResultSetMetaData getMetaData(): Vrne instanco ResultSetMetaData. Ta vsebuje informacije o vrsti in lastnostih stolpcev izhodne poizvedbe. Več o ResultSetMetaData bomo izvedeli v naslednjem razdelku.
ResultSetMetaData
Kaj so metapodatki?
Metapodatki pomenijo podatke o podatkih. S tem vmesnikom bomo dobili več informacij o ResultSetu. Na voljo je v paketu java.sql. Vsak objekt ResultSet je povezan z enim objektom ResultSetMetaData.
Ta objekt bo vseboval podrobnosti o lastnostih stolpcev, kot so podatkovni tip stolpca, ime stolpca, število stolpcev, ime tabele, ime sheme itd., Objekt ResultSetMetaData lahko pridobimo z metodo getMetaData() objekta ResultSet.
Sintaksa datoteke ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS"); ResultSetMetaData rsmd = rs.getMetaData();
Pomembne metode vmesnika ResultSetMetaData:
Ime metode | Opis |
---|---|
String getColumnName(int column) | Vrne ime stolpca določenega stolpca. |
String getColumnTypeName(int column) | Vrne podatkovni tip določenega stolpca, ki smo ga posredovali kot parameter |
String getTableName(int column) | Vrne ime tabele stolpca |
String getSchemaName(int column) | Vrne ime sheme tabele stolpca. |
int getColumnCount() | Vrne število stolpcev množice ResultSet |
boolean isAutoIncrement(int Stolpec) | Vrne true, če je podani stolpec Auto Increment, sicer false |
boolean isCaseSensitive(int Stolpec) | Vrne true, če je podani stolpec občutljiv na velikost črk, sicer false |
Primer ResultSetMetaData
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= " select * fromemployee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(" We are using ResultSetMetaData ");System.out.println("Št. stolpcev: " + rsmd.getColumnCount()); System.out.println("Ime stolpca 1: " + rsmd.getColumnName(1)); System.out.println("Vrsta podatkov stolpca 2: " + rsmd.getColumnTypeName(2)); System.out.println("Ime tabele za stolpec 1: " + rsmd.getTableName(1)); System.out.println("Ime sheme za stolpec 1: " + rsmd.getSchemaName(1)); } } }
IZHOD:
Pojasnilo:
V zgornjem programu smo v vmesniku ResultSetMetaData implementirali metode getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() in getSchemaName().
DatabaseMetaData
Vmesnik DatabaseMetaData podaja informacije o podatkovni bazi, kot so ime podatkovne baze, različica podatkovne baze itd.
Pomembne metode vmesnika DatabaseMetaData:
Ime metode | Opis |
---|---|
String getDriverName() | Vrnil bo ime gonilnika JDBC, ki ga uporabljamo v našem programu Java |
String getDriverVersion() | Vrne številko različice gonilnika JDBC |
Vrstica getUserName() | Vrne uporabniško ime podatkovne zbirke, ki jo uporabljamo |
String getDatabaseProductName() | Vrne ime podatkovne zbirke, ki jo uporabljamo |
String getDatabaseProductVersion() | Vrne številko različice podatkovne zbirke, ki jo uporabljamo. |
ResultSet getSchemas() | Vrne imena shem, ki so na voljo v povezani zbirki podatkov. |
String getStringFunctions() | Vrne seznam funkcij nizov, ki so na voljo v povezani zbirki podatkov. |
String getTimeDateFunctions() | Vrne seznam funkcij časa in datuma, ki so na voljo v povezani zbirki podatkov. |
String getURL() | Vrne URL za podatkovno zbirko |
Boolean isReadOnly() | Vrne, ali je zbirka podatkov v načinu samo za branje. |
Boolean supportsBatchUpdates() | Vrne, ali podatkovna zbirka podpira paketne posodobitve. |
Boolean supportsSavepoints() | Vrne, ali podatkovna zbirka podpira točke shranjevanja. |
Boolean supportsStatementPooling() | Vrne, ali podatkovna baza podpira združevanje izjav. |
Boolean supportsStoredProcedures() | Vrne, ali podatkovna zbirka podpira shranjene postopke. |
Boolean supportsOuterJoins() | Vrne, ali podatkovna zbirka podpira Outer Join. |
Tukaj smo navedli nekaj pomembnih metod vmesnika DatabaseMetaData. Oracle kjer si lahko ogledate vse metode, ki so na voljo v vmesniku DatabaseMetaData.
DatabaseMetaData Primer:
paket com.STH.JDBC; uvoz java.sql.Connection; uvoz java.sql.DatabaseMetaData; uvoz java.sql.DriverManager; uvoz java.sql.ResultSet; uvoz java.sql.ResultSetMetaData; uvoz java.sql.SQLException; uvoz java.sql.Statement; javni razred DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Samodejno generirana metoda stubClass.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Uporaba DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version: "+ dbmd.getDriverVersion()); System.out.println("UserName ofBaza podatkov: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions());System.out.println("URL zbirke podatkov: " + dbmd.getURL()); System.out.println("Zbirka podatkov je samo za branje? " + dbmd.isReadOnly()); System.out.println("Podpira paketne posodobitve? " + dbmd.supportsBatchUpdates()); System.out.println("Podpira točke shranitve? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling? " + dbmd.supportsStatementPooling()); System.out.println("Support StoredProcedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? " + dbmd.supportsOuterJoins()); } } }
IZHOD:
Pojasnilo:
V zgornjem programu smo v vmesniku DatabaseMetaData uporabili/implementirali metode getDriverName(), getDriverVersion(), getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() in supportsOuterJoins().
Opozoriti je treba na naslednje:
- Vmesnik JDBC ResultSet se uporablja za shranjevanje podatkov iz zbirke podatkov in njihovo uporabo v našem programu Java.
- Za posodobitev podatkov lahko uporabimo tudi metodo updateXXX(), in sicer z metodo ResultSet.
- Objekt ResultSet usmeri kurzor pred prvo vrstico podatkov rezultata. Z metodo next() lahko iteriramo po ResultSet.
- Imamo navigacijske metode ResultSet za premikanje naprej v objektu ResultSet
- ResultMetaData se uporablja za pridobivanje več informacij o ResultSetu, kot so ime stolpca, število stolpcev, podatkovni tip stolpca itd.
- DatabaseMetData se uporablja za pridobivanje informacij o zbirki podatkov, ki smo jo povezali
Pogosto zastavljena vprašanja
V #1) Kakšna je uporaba množice ResultSet?
Odgovor: ResultSet se uporablja za shranjevanje in pridobivanje podatkov iz DB. Ko se izvede metoda executeQuery(), vrne objekt ResultSet. Ta objekt ResultSet lahko uporabimo v našem programu za izvajanje logike.
V #2) Kako preveriti, ali je nabor Rezultati prazen ali ne?
Odgovor: Za preverjanje IsResultSet Empty ni na voljo nobenih vnaprej določenih metod, kot sta length() in size(). Za iteracijo lahko uporabimo metodo next() in če vrne True, potem ni prazna, če vrne False, pomeni, da je ResultSet prazna.
Q #3) Ali je mogoče, da je ResultSet ničelna?
Odgovor: Ne, metoda executeQuery() vrne objekt ResultSet, ki nikoli ne sme biti ničen.
Q #4) Kaj je posodobljiv niz izidov?
Odgovor: Objekt ResultSet, ki ga je mogoče posodabljati, se uporablja za posodabljanje podatkov v stolpcih, vstavljanje podatkov v stolpce in brisanje vrstic. Da bi bil objekt ResultSet posodobljiv, moramo določiti vrsto pomikanja kot občutljivo ali neobčutljivo in vrsto CONCUR kot posodobljivo.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q #5) Kako pridobiti ime podatkovne zbirke, ki je bila povezana?
Odgovor: Uporabimo lahko metodo getDatabaseProductName() objekta DatabaseMetaData.
Zaključek
V tem učbeniku smo obravnavali vmesnike ResultSet, ResultSetMetaData in DatabaseMetaData ter njihove pomembne metode, ki se pogosto uporabljajo v programih JDBC. Videli smo tudi, kako posodobiti podatke v DB z uporabo ResultSet. ResultSetMetadata vsebuje informacije o ResultSet, kot so ime stolpca, število stolpcev in tako naprej.
DatabaseMetaData vsebuje informacije o zbirki podatkov.
<