jdbc resultset how use java resultset retrieve data
V tej vadnici je razloženo, kako uporabiti JDBC ResultSet za pridobivanje podatkov. Spoznali bomo tudi vmesnika ResultSetMetaData in DatabaseMetaData s primeri:
V JDBC DriverManager vadnica Serija vadnic JDBC smo se naučili, kako uporabljati JDBC DriverManager in njegove metode, JDBC PreparedStatement v aplikacijah Java.
V tej vadnici bomo razpravljali o preostalih vmesnikih v JDBC. V prejšnjih vadnicah smo obravnavali vmesnike Statement, PreparedStatement in CallableStatement.
Tu se bomo seznanili z vmesniki JDBC ResultSet, ResultSetMetaData in DatabaseMetaData, njihovimi metodami in uporabo metod v programu Java.
Kaj se boste naučili:
JDBC ResultSet vmesnik
ResultSet Interface je prisoten v paketu java.sql. Uporablja se za shranjevanje podatkov, ki se vrnejo iz tabele baze podatkov po izvedbi stavkov SQL v programu Java. Objekt ResultSet ohranja kurzor v podatkovnih rezultatih. Privzeto je kazalec postavljen pred prvo vrstico rezultatov.
Način next () se uporablja za premikanje kazalca na naslednji položaj v smeri naprej. Vrnilo se bo FALSE, če ne bo več zapisov. Podatke pridobi s klicanjem metode executeQuery () z uporabo katerega koli predmeta stavka. Lahko je objekt Statement ali PreparedStatement ali CallableStatement. Vmesnika PreparedStatement in CallableStatement sta podvmesnika vmesnika Statement.
Vmesnik izjave
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement vmesnik
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Za pridobivanje podatkov stolpcev lahko uporabimo metodo getX (), medtem ko pregledujemo rezultate, kjer je X - podatkovni tip stolpca. Za pridobitev vrednosti lahko uporabimo imena stolpcev ali indeks z uporabo metod getX ().
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 omenimo tudi indeksno številko 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); }
ResultSet Vrste
Privzeto lahko ponovimo podatke / vrednosti v ResultSet, ki so se vrnili kot izhod izvršenega stavka SQL v smeri naprej. Vrednosti lahko ponovimo v drugih smereh s pomočjo Scrollable ResultSet. Med ustvarjanjem objektov Statement, PreparedStatement in CallableStatement lahko določimo vrsto in sočasnost ResultSet.
V programu ResultSet obstajajo 3 vrste. To so:
- TIP_FORWARD_ONLY: To je privzeta možnost, pri kateri se kazalec premika od začetka do konca, tj. V smeri naprej.
- TYPE_SCROLL_INSENSITIVE: Pri tej vrsti se bo kazalec premikal v smeri naprej in nazaj. Če med ponovitvijo shranjenih podatkov spremenimo podatke, se ne bodo posodobili v naboru podatkov, če kdo spremeni podatke v DB. Ker ima nabor podatkov podatke od trenutka, ko poizvedba SQL vrne podatke.
- TYPE_SCROLL_SENSITIVE: Podobno je TYPE_SCROLL_INSENSITIVE, razlika je v tem, če kdo posodobi podatke po tem, ko je SQL poizvedba vrnila podatke, medtem ko bo ponavljanje odražalo spremembe nabora podatkov.
ResultSet Concurrency
V ResultSet obstajata 2 načina sočasnosti. To so:
- ResultSet.CONCUR_READ_ONLY: To je privzeti način sočasnosti. Podatke lahko beremo samo v ResultSet. Posodobitev se ne uporablja.
- ResultSet.CONCUR_UPDATABLE: Podatke lahko posodobimo v objektu ResultSet.
Nekatere zbirke podatkov ne podpirajo sočasnega načina za vse vrste ResultSet. V tem primeru moramo z uporabo metode supportResultSetConcurrency () preveriti, ali podpirajo naš želeni tip in način sočasnosti.
Metode v vmesniku ResultSet
Obstajajo 4 kategorije metod ResultSet. To so:
- Navigacijske metode
- Getter metode
- Setter metode
- Razne metode
Najprej bomo razpravljali o navigacijskih metodah in nato nadaljevali.
# 1) Navigacijske metode
Ta metoda se uporablja za premikanje kazalca po naboru podatkov.
- Logiški absolut (int vrstica): Uporablja se za premik kurzorja v določeno vrstico, ki je omenjena v parametru, in vrne true, če je operacija uspešna, sicer return false.
- Void afterLast (): Premakne se kazalec ResultSet po zadnji vrstici.
- Void beforeFirst (): Zaradi tega se kazalec ResultSet premakne pred prvo vrstico.
- Logično najprej (): S kazalcem ResultSet se premaknete v prvo vrstico. Vrne True, če je operacija uspešna, sicer False.
- Boolean last (): S kazalcem ResultSet se premaknete v zadnjo vrstico. Vrne True, če je operacija uspešna, sicer False.
- Logično naslednja (): S kazalcem ResultSet se premaknete v naslednjo vrstico. Vrne True, če je zapisov več, in False, če zapisov ni več.
- Logična prejšnja (): S kazalcem ResultSet se premaknete v prejšnjo vrstico. Vrne True, če je operacija uspešna, sicer False.
- Logična sorodnica (): Kazalec premakne na določeno število vrstic v smeri naprej ali nazaj.
- Int getRow (): Vrne trenutno številko vrstice, na katero je usmerjen predmet ResultSet.
- Void moveToCurrentRow (): Če je trenutno v vrstici za vstavljanje, premakne kazalec nazaj v trenutno vrstico.
- Void moveToInsertRow (): Kazalec premakne na določeno vrstico, da vstavi vrstico v bazo podatkov. Zapomni si trenutno lokacijo kurzorja. Tako lahko uporabimo metodo moveToCurrentRow () za premik kurzorja v trenutno vrstico po vstavitvi.
V tej vadnici so vsi programi napisani v Javi. Uporabili smo različico Java 8 in Oracle DB.
>> Programsko opremo Oracle lahko prenesete s spletnega mesta tukaj
>> Različico Java 8 lahko prenesete s spletnega mesta tukaj
Ima postopek namestitve Jave po korakih.
Primer programa JDBC ResultSet: (z uporabo 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 Auto-generated method stub //Select query String select_query = 'select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to 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(); //Moving the cursor to point first row rs.first(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println('Cursor is pointing at before the first row. Use next() to move in forward direction'); //Moving the cursor to point first row using next() rs.next(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println('Cursor is pointing at after the last row. Use previous() to move in backward direction'); //Moving the cursor to point last row using previous() rs.previous(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println('Cursor is pointing at 3rd row'); System.out.println('THIRD ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println('Cursor is pointing to the 1 row previous to the 3rd row'); System.out.println('Second ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println('Cursor is pointing to the 4th row after the 2nd row'); System.out.println('SIXTH ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
IZHOD:
Podatki v tabeli Employee_details
Pojasnilo:
V zgornjem programu smo v ResultSet izvedli metode first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () in getRow (). Za uporabo teh metod v metodi prepaStatement nastavimo vrednosti ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE.
Nato bomo razpravljali o metodah Getter v ResultSet:
# 2) Getter metode
ResultSet je shranil podatke tabele iz zbirke podatkov. Getter metode se uporabljajo za pridobivanje vrednosti tabele v ResultSet. Za to moramo predati bodisi vrednost indeksa stolpca bodisi ime stolpca.
Sledijo metode pridobivanja v ResultSet:
- int getInt (int ColumnIndex): Uporablja se za pridobitev vrednosti določenega stolpca Index kot int podatkovnega tipa.
- float getFloat (int ColumnIndex): Uporablja se za pridobitev vrednosti določenega stolpca Index kot float podatkovni tip.
- 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 int podatkovnega tipa.
- float getFloat (String ColumnName): Uporablja se za pridobitev vrednosti določenega stolpca kot plavajoči podatkovni tip.
- Java.sql.date getDate (niz stolpca): Uporablja se za pridobitev vrednosti določenega stolpca kot datumske vrednosti.
Obstajajo metode pridobivanja za vse primitivne vrste podatkov (logične, dolge, dvojne) in String tudi v vmesniku ResultSet. Polje in binarni tip podatkov lahko dobimo tudi iz zbirke podatkov. Tudi za to obstajajo metode.
# 3) Metode nastavitelja / posodobitve
Vrednost v zbirki podatkov lahko posodobimo z metodami ResultSet Updater. Podobno je Getterjevim metodam, vendar moramo tukaj v zbirko podatkov posredovati vrednosti / podatke za določen stolpec.
Sledijo metode posodabljanja v ResultSet:
- void updateInt (int ColumnIndex, int Value): Uporablja se za posodobitev vrednosti določenega stolpca Index z vrednostjo int.
- void updateFloat (int ColumnIndex, float f): Uporablja se za posodabljanje vrednosti določenega stolpca Indeks s plavajočo vrednostjo.
- 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 float vrednostjo.
- Java.sql.date getDate (niz stolpca): Uporablja se za posodobitev vrednosti določenega stolpca z dano vrednostjo datuma.
Obstajajo metode posodobitve za vse primitivne vrste podatkov (logične, dolge, dvojne) in String tudi v vmesniku ResultSet.
Posodobitvene metode samo posodobijo podatke v objektu ResultSet. Vrednosti bodo posodobljene v DB po klicu metode insertRow ali updateRow.
Posodabljanje vrstice:
Podatke lahko posodobimo zaporedoma s klicanjem metod updateX (), posredovanjem imena ali indeksa stolpca in vrednosti za posodobitev. Namesto X v metodi updateX lahko uporabimo kateri koli podatkovni tip. Do zdaj smo posodobili podatke v objektu ResultSet. Za posodobitev podatkov v DB moramo poklicati metodo updateRow ().
Vstavljanje vrstice:
Za premik kurzorja, da vstavimo novo vrstico, moramo uporabiti moveToInsertRow (). To smo že zajeli v razdelku Navigacijske metode. Nato moramo poklicati metodo updateX (), če želimo podatke dodati v vrstico. Navesti bi morali podatke za vse stolpce, sicer bo uporabljena privzeta vrednost tega stolpca.
Po posodobitvi podatkov moramo poklicati metodo insertRow (). Nato uporabite metodo moveToCurrentRow (), da postavite kazalec nazaj v vrstico, v kateri smo bili, preden smo začeli vstavljati novo vrstico.
ResultSet Primer:
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 Auto-generated method 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(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println('LAST ROW: Before inserting new Employee'); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table 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(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println('Befor Updating EMPNUM of the 5th ROW'); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); System.out.println(' Updating EMP id of the 5th EMPLOYEE'); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
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('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
IZHOD:
Pojasnilo:
V zgornjem programu smo najprej naredili podatke tabele Employee_details v objektu ResultSet z uporabo poizvedbe SELECT. Nato smo prikazali podatke zadnje vrstice v tabeli worker_details z uporabo metode last () ResultSet. Z metodo moveToInsertRow () kurzor kaže na trenutno vrstico, zdaj pa je zadnja vrstica.
metode updateXXX (), uporabljene za posodobitev vrednosti v vrstico, metoda insertRow () pa je podatke vstavila v novo vrstico. Z uporabo metode absolute () smo kazalko usmerili na 5thvrstici. Za posodobitev EMPNUM z novim ID-jem 5 je bila uporabljena metoda UpdateInt ()thzaposlenega v tabeli. Po tem so prikazani podatki, da se preveri, ali je EMPNUM posodobljen ali ne.
S kazalcem je kazala zadnjo vrstico tabele z uporabo last () in jo prikazala. Za izvedbo zgornje logike moramo v metodi prepaStatement nastaviti vrednosti ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE.
# 4) Razne metode
- void close (): Uporablja se za zapiranje primerka ResultSet in sprostitev virov, povezanih z primerkom ResultSet.
- ResultSetMetaData getMetaData (): Vrne primerek ResultSetMetaData. Vsebuje informacije o vrsti in lastnosti stolpcev izhoda poizvedbe. Več o ResultSetMetaData bomo izvedeli v naslednjem poglavju.
ResultSetMetaData
Kaj so metapodatki?
Metapodatki pomenijo podatke o podatkih. Z uporabo tega vmesnika bomo dobili več informacij o ResultSet. Na voljo je v paketu java.sql. Vsak objekt ResultSet je povezan z enim objektom ResultSetMetaData.
Ta objekt bo imel podrobnosti o lastnostih stolpcev, kot so tip stolpca, ime stolpca, število stolpcev, ime tabele, ime sheme itd. Objekt ResultSetMetaData lahko dobimo z metodo getMetaData () ResultSet.
Sintaksa 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 |
---|---|
logična isCaseSensitive (int stolpec) | Vrne true, če je dani stolpec občutljiv na velike in male črke, sicer false |
String getColumnName (int stolpec) | Vrne ime stolpca določenega stolpca |
String getColumnTypeName (int stolpec) | Vrne podatkovni tip določenega stolpca, ki smo ga poslali kot parameter |
String getTableName (int stolpec) | Vrne ime tabele stolpca |
String getSchemaName (int stolpec) | Vrne ime sheme tabele stolpca |
int getColumnCount () | Vrne število stolpcev ResultSet |
boolean isAutoIncrement (int Stolpec) | Vrne true, če je dani stolpec Auto Increment, 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 * from employee_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('No: of Columns: '+ rsmd.getColumnCount()); System.out.println('ColumnName of Column 1: '+ rsmd.getColumnName(1)); System.out.println('Data Type of Column 2: ' + rsmd.getColumnTypeName(2)); System.out.println('Table Name of the Column 1: ' + rsmd.getTableName(1)); System.out.println('Schema Name of the Column 1: ' + rsmd.getSchemaName(1)); } } }
IZHOD:
Pojasnilo:
kako odpreti datoteke .swf v oknih
V zgornjem programu smo v vmesniku ResultSetMetaData implementirali metode getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () in getSchemaName ().
DatabaseMetaData
Vmesnik DatabaseMetaData daje informacije o zbirki podatkov, kot so DatabaseName, različica baze podatkov itd.
Pomembne metode vmesnika DatabaseMetaData:
Ime metode | Opis |
---|---|
String getStringFunctions () | Vrne seznam nizovnih funkcij, ki so na voljo v povezani podatkovni zbirki |
String getDriverName () | Vrnil bo ime gonilnika JDBC, ki ga uporabljamo v našem programu Java |
String getDriverVersion () | Vrne številko različice gonilnika JDBC |
String getUserName () | Vrne uporabniško ime zbirke podatkov, ki jo uporabljamo |
String getDatabaseProductName () | Vrne ime zbirke podatkov, ki jo uporabljamo |
String getDatabaseProductVersion () | Vrne številko različice zbirke podatkov, ki jo uporabljamo |
RezultatNastavite getSchemas () | Vrne imena shem, ki so na voljo v povezani zbirki podatkov |
String getTimeDateFunctions () | Vrne seznam časovnih in datumskih funkcij, ki so na voljo v povezani podatkovni zbirki |
String getURL () | Vrne URL za bazo podatkov |
Logična isReadOnly () | Vrne, ali je baza podatkov v načinu samo za branje |
Logična podporaBatchUpdates () | Vrne, ali baza podatkov podpira paketne posodobitve |
Logična podporaSavepoints () | Vrne, ali baza podatkov podpira točke shranjevanja |
Logična podporaStatementPooling () | Vrne, ali baza podatkov podpira združevanje izjav |
Logična podporaStoredProcedures () | Vrne, ali baza podatkov podpira shranjene postopke |
Logična podporaOuterJoins () | Vrne, ali baza podatkov podpira Outer Join |
Tu smo našteli nekaj pomembnih metod vmesnika DatabaseMetaData. Lahko se obrnete na uradno spletno stran Oracle kjer si lahko ogledate vse metode, ki so na voljo v vmesniku DatabaseMetaData.
Primer baze podatkovMetaData:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String() args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName('oracle.jdbc.driver.OracleDriver'); Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println('Using DatabaseMetaData'); System.out.println('Driver Name: ' + dbmd.getDriverName()); System.out.println('Driver Version: '+ dbmd.getDriverVersion()); System.out.println('UserName of the Database: ' + 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 of the Database: ' + dbmd.getURL()); System.out.println('Database is read - only? ' +dbmd.isReadOnly()); System.out.println('Support Batch Updates? ' + dbmd.supportsBatchUpdates()); System.out.println('Support savepoints? ' + dbmd.supportsSavepoints()); System.out.println('Support Statement Pooling? '+ dbmd.supportsStatementPooling()); System.out.println('Support Stored Procedures? ' + dbmd.supportsStoredProcedures()); System.out.println('Support Outer Join? '+ dbmd.supportsOuterJoins()); } }
IZHOD:
Pojasnilo:
V zgornjem programu smo uporabili / implementirali getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadportsBatch ( , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () in supportsOuterJoins () metode v vmesniku DatabaseMetaData.
Točke, ki jih je treba upoštevati:
- Vmesnik JDBC ResultSet se uporablja za shranjevanje podatkov iz baze podatkov in njihovo uporabo v našem programu Java.
- ResultSet lahko uporabimo tudi za posodobitev podatkov z metodami updateXXX ().
- ResultSet objekt usmerja kazalec na prvo vrstico rezultatov. Z uporabo metode next () lahko ponovimo skozi ResultSet.
- Za nadaljevanje premikanja predmeta ResultSet imamo navigacijske metode ResultSet
- ResultMetaData se uporablja za pridobivanje več informacij o ResultSet, kot so ime stolpca, število stolpcev, vrsta podatkov 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 ResultSet?
Odgovor: ResultSet se uporablja za shranjevanje in pridobivanje podatkov iz DB. Ko se izvrši metoda executeQuery (), bo vrnila objekt ResultSet. Za izvajanje logike lahko uporabimo ta objekt ResultSet v našem programu.
V # 2) Kako preveriti, ali je ResultSet prazen ali ne?
Odgovor: Za preverjanje IsResultSet Empty ni na voljo vnaprej določenih metod, kot so dolžina (), velikost (). Za ponovitev lahko uporabimo naslednjo () metodo in če vrne True, potem ni prazna, če vrne False, pomeni, da je ResultSet prazen.
V # 3) Ali je možno, da je ResultSet ničen?
Odgovor: Ne, metoda executeQuery () vrne objekt ResultSet, ki morda nikoli ne bo nič.
V # 4) Kaj je posodobljiv ResultSet?
Odgovor: Posodobljiv predmet ResultSet se uporablja za posodobitev podatkov v stolpcu, vstavljanje podatkov v stolpce in brisanje vrstic. Če želimo, da je ResultSet nastavljiv kot posodobljiv, moramo tip pomikanja narediti občutljivega ali neobčutljivega, CONCUR pa posodobljivega.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
V # 5) Kako dobiti ime baze podatkov, ki je bila povezana?
Odgovor: Uporabimo lahko metodo getDatabaseProductName () predmeta DatabaseMetaData.
Zaključek
V tej vadnici smo razpravljali o tem, kaj so vmesniki ResultSet, ResultSetMetaData in DatabaseMetaData ter njihove pomembne metode, ki se pogosto uporabljajo v programih JDBC. Videli smo tudi, kako posodobiti podatke v DB s pomočjo ResultSet. ResultSetMetadata vsebuje informacije o ResultSet, kot so Ime stolpca, Število stolpcev itd.
DatabaseMetaData vsebuje podatke o zbirki podatkov.
Priporočeno branje
- JDBC DriverManager, JDBC PreparedStatement In Statement
- Java JDBC Vadnica: Kaj je JDBC (Java Database Connectivity)
- Upravljanje transakcij Java JDBC s primerom
- Vadnica za paketno obdelavo in shranjene postopke JDBC
- Vadnica za povezavo Java JDBC s primerom programiranja
- Primerljivi in primerjalni vmesniki v Javi
- Testiranje baze podatkov o selenu (z uporabo WebDriver in JDBC API)
- Obravnava izjem JDBC - Kako ravnati z izjemami SQL