jdbc resultset how use java resultset retrieve data
Ovaj vodič objašnjava kako koristiti JDBC ResultSet za dohvaćanje podataka. Također ćemo naučiti o sučeljima ResultSetMetaData i DatabaseMetaData sa primjerima:
U JDBC upravljački program vodič za JDBC serija lekcija , naučili smo kako koristiti JDBC DriverManager i njegove metode, JDBC PreparedStatement u Java aplikacijama.
U ovom uputstvu razgovarat ćemo o preostalim sučeljima u JDBC-u. Mi smo obrađivali sučelja Statement, PreparedStatement i CallableStatement u našim prethodnim vodičima.
Ovdje ćemo naučiti o sučeljima JDBC ResultSet, ResultSetMetaData i DatabaseMetaData, njihovim metodama i načinu korištenja metoda u programu Java.
Što ćete naučiti:
JDBC ResultSet sučelje
Sučelje ResultSet prisutno je u paketu java.sql. Koristi se za pohranu podataka koji se vraćaju iz tablice baze podataka nakon izvršavanja SQL izraza u Java programu. Objekt ResultSet održava točku kursora na rezultatima podataka. Prema zadanim postavkama, pokazivač se nalazi ispred prvog retka rezultata rezultata.
Sljedeća () metoda koristi se za pomicanje kursora na sljedeći položaj u smjeru naprijed. Vratit će FALSE ako više nema zapisa. Dohvaća podatke pozivanjem metode executeQuery () koristeći bilo koji od objekata izraza. To može biti Statement ili PreparedStatement ili CallableStatement objekt. Sučelja PreparedStatement i CallableStatement su podsučelja sučelja Statement.
Izjava o sučelju
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Sučelje PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Možemo koristiti metodu getX () za dobivanje podataka stupaca tijekom iteriranja kroz rezultate gdje je X - tip podataka stupca. Za dobivanje vrijednosti pomoću metoda getX () možemo koristiti imena stupaca ili 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); }
Također možemo spomenuti indeksni broj stupca umjesto naziva stupca u metodama getX ().
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 rezultata
U zadanim postavkama možemo ponoviti podatke / vrijednosti u ResultSet-u koji su se vratili kao izlaz izvršenog SQL izraza u smjeru naprijed. Vrijednosti možemo ponoviti u drugim smjerovima pomoću Scrollable ResultSet. Možemo odrediti vrstu i istodobnost ResultSet tijekom stvaranja Statement, PreparedStatement i CallableStatement objekata.
Postoje 3 vrste ResultSet. Oni su:
- TIP_NA SAMO: To je zadana opcija, gdje se kursor pomiče od početka do kraja, tj. U smjeru naprijed.
- TIP_SCROLL_INSENSITIVE: U ovoj će se vrsti kursor pomicati u smjeru naprijed i natrag. Ako napravimo bilo kakve promjene u podacima dok ponavljamo pohranjene podatke, neće se ažurirati u skupu podataka ako netko promijeni podatke u DB-u. Budući da skup podataka sadrži podatke od trenutka kada SQL upit vraća podatke.
- TIP_SCROLL_SENSITIVE: Slična je TYPE_SCROLL_INSENSITIVE, razlika je u tome ako netko ažurira podatke nakon što ih SQL upit vrati, dok će ponavljanjem odražavati promjene u skupu podataka.
ResultSet Concurrency
U ResultSet-u postoje 2 načina istodobnosti. Oni su:
- Set rezultata.CONCUR_READ_ONLY: To je zadani način istodobnosti. Podatke možemo čitati samo u ResultSet-u. Ažuriranje nije primjenjivo.
- Set rezultata.CONCUR_UPDATABLE: Možemo ažurirati podatke u ResultSet objektu.
Neke baze podataka ne podržavaju paralelni način rada za sve vrste ResultSet. U tom slučaju moramo provjeriti podržavaju li oni naš željeni tip i način istodobnosti pomoću metode supportResultSetConcurrency ().
Metode u sučelju ResultSet
Postoje 4 kategorije metoda ResultSet. Oni su:
- Navigacijske metode
- Getter metode
- Setter metode
- Razne metode
Prvo ćemo razgovarati o navigacijskim metodama, a zatim ćemo krenuti dalje.
# 1) Navigacijske metode
Ova se metoda koristi za pomicanje kursora oko skupa podataka.
- Logički apsolut (int redak): Koristi se za pomicanje kursora u navedeni redak koji se spominje u parametru i vraćanje true ako je operacija uspješna, inače return false.
- Void afterLast (): Omogućuje pomicanje kursora ResultSet nakon zadnjeg reda.
- Void beforeFirst (): Omogućuje pomicanje pokazivača ResultSet prije prvog retka.
- Prvo logičko (): Čini kursor ResultSet za pomicanje u prvi redak. Vraća True ako je operacija uspješna, inače False.
- Boolean last (): Čini kursor ResultSet za pomicanje na zadnji redak. Vraća True ako je operacija uspješna, inače False.
- Boolean next (): Čini kursor ResultSet za pomicanje na sljedeći redak. Vraća True ako ima više zapisa i False ako nema više zapisa.
- Logička prethodna (): Čini kursor ResultSet za pomicanje na prethodni redak. Vraća True ako je operacija uspješna, inače False.
- Logički rođak (): Pomiče kursor na zadani broj redaka bilo u smjeru naprijed ili natrag.
- Int getRow (): Vraća trenutni broj retka koji objekt ResultSet sada pokazuje.
- Prazan moveToCurrentRow (): Premješta kursor natrag u trenutni redak ako je trenutno u umetnutom retku.
- Prazan moveToInsertRow (): Premješta kursor na određeni redak da bi ga umetnuo u bazu podataka. Pamti trenutno mjesto kursora. Tako možemo koristiti metodu moveToCurrentRow () za pomicanje kursora u trenutni redak nakon umetanja.
U ovom su uputstvu svi programi napisani na Javi. Koristili smo Javu 8 verziju i Oracle DB.
>> Oracle softver možete preuzeti sa ovdje
>> Javu, verziju 8, možete preuzeti s ovdje
Ima korak-po-korak instalacijskog postupka Java.
Primjer programa JDBC ResultSet: (Korištenje navigacijskih metoda)
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(); } } }
IZLAZ:
Podaci u tablici Employee_details
Obrazloženje:
U gore navedenom programu implementirali smo metode first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () i getRow () u ResultSet. Da bismo koristili ove metode, postavljamo vrijednosti ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE u metodi prepaStatement.
Dalje ćemo razgovarati o tome koje su Getterove metode u ResultSet-u:
# 2) Getter metode
ResultSet je pohranio podatke tablice iz baze podataka. Getter metode koriste se za dobivanje vrijednosti tablice u ResultSetu. Za to trebamo proslijediti vrijednost indeksa stupca ili Naziv stupca.
Slijede metode dobivanja u ResultSetu:
- int getInt (int ColumnIndex): Koristi se za dobivanje vrijednosti navedenog indeksa stupca kao int tipa podataka.
- float getFloat (int ColumnIndex): Koristi se za dobivanje vrijednosti navedenog indeksa stupca kao plutajući tip podataka.
- java.sql.date getDate (int ColumnIndex): Koristi se za dobivanje vrijednosti navedenog stupca Indeks kao vrijednosti datuma.
- int getInt (String ColumnName): Koristi se za dobivanje vrijednosti navedenog stupca kao int tipa podataka.
- float getFloat (String ColumnName): Koristi se za dobivanje vrijednosti navedenog stupca kao plutajući tip podataka.
- Java.sql.date getDate (Ime niza stupca): Koristi se za dobivanje vrijednosti navedenog stupca kao vrijednosti datuma.
Postoje metode dobivanja za sve primitivne vrste podataka (logičke, duge, dvostruke) i String također u sučelju ResultSet. Niz podataka i binarni tip podataka možemo dobiti i iz baze podataka. I za to postoje metode.
# 3) Metode postavljača / nadogradnje
Vrijednost u bazi podataka možemo ažurirati pomoću metoda ResultSet Updater. Slično je Getterovim metodama, ali ovdje u bazi podataka moramo proslijediti vrijednosti / podatke za određeni stupac.
Slijede metode ažuriranja u ResultSetu:
- void updateInt (int ColumnIndex, int vrijednost): Koristi se za ažuriranje vrijednosti navedenog indeksa stupca s int vrijednošću.
- void updateFloat (int ColumnIndex, float f): Koristi se za ažuriranje vrijednosti navedenog indeksa stupca s plutajućom vrijednošću.
- poništava datum ažuriranja (int ColumnIndex, Datum d): Koristi se za ažuriranje vrijednosti navedenog stupca Indeks datumskom vrijednošću.
- void updateInt (String ColumnName, int Value): Koristi se za ažuriranje vrijednosti navedenog stupca zadanom vrijednošću int.
- void updateFloat (String ColumnName, float f): Koristi se za ažuriranje vrijednosti navedenog stupca s danom plutajućom vrijednošću.
- Java.sql.date getDate (Ime niza stupca): Koristi se za ažuriranje vrijednosti navedenog stupca zadanom vrijednošću datuma.
Postoje metode ažuriranja za sve primitivne vrste podataka (logičke, duge, dvostruke) i String također u sučelju ResultSet.
Načini ažuriranja samo ažuriraju podatke u ResultSet objektu. Vrijednosti će se ažurirati u DB-u nakon pozivanja metode insertRow ili updateRow.
Ažuriranje retka:
Podatke možemo ažurirati u nizu pozivanjem metoda updateX (), prosljeđivanjem imena stupca ili indeksa i vrijednosti za ažuriranje. Možemo koristiti bilo koju vrstu podataka umjesto X u metodi updateX. Do sada smo ažurirali podatke u ResultSet objektu. Da bismo ažurirali podatke u DB-u, moramo pozvati metodu updateRow ().
Umetanje retka:
Moramo koristiti moveToInsertRow () za pomicanje kursora za umetanje novog retka. To smo već obradili u odjeljku Navigacijske metode. Dalje, moramo nazvati metodu updateX () da bismo dodali podatke u redak. Trebali bismo pružiti podatke za sve stupce jer će se koristiti zadana vrijednost tog određenog stupca.
Nakon ažuriranja podataka trebamo pozvati metodu insertRow (). Zatim upotrijebite metodu moveToCurrentRow () da vratite položaj kursora u red u kojem smo bili prije nego što smo započeli s umetanjem novog retka.
Primjer skupa rezultata:
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(); } } }
IZLAZ:
Obrazloženje:
U gornjem programu ono što smo napravili je prvo, podatke tablice Employee_details pohranili smo u objekt ResultSet pomoću upita SELECT. Zatim smo prikazali podatke zadnjeg retka u tablici worker_details koristeći last () metodu ResultSet. metoda moveToInsertRow () čini pokazivač usmjerenim na trenutni redak, sada je trenutni redak posljednji redak.
metode updateXXX () koje se koriste za ažuriranje vrijednosti u retku i metoda insertRow () umetnula je podatke u novi redak. Koristeći apsolutnu () metodu, postavili smo pokazivač da pokazuje na 5thred. Metoda UpdateInt () korištena je za ažuriranje EMPNUM-a s novim ID-om 5thzaposlenik u tablici. Nakon toga, prikazali su podatke kako bi provjerili je li EMPNUM ažuriran ili ne.
Postavio je kursor da usmjerava zadnji redak tablice pomoću last () i prikazao ga. Da bismo izvršili gornju logiku, moramo postaviti metode ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE u metodi prepaStatement.
# 4) Razne metode
- void close (): Koristi se za zatvaranje instance ResultSet i oslobađanje resursa povezanih s instancom ResultSet.
- ResultSetMetaData getMetaData (): Vraća ResultSetMetaData Instance. Sadrži informacije o vrsti i svojstvu stupaca izlaza upita. O ResultSetMetaData saznat ćemo više u sljedećem odjeljku.
ResultSetMetaData
Što su metapodaci?
Metapodaci znače podatke o podacima. Korištenjem ovog sučelja dobit ćemo više informacija o ResultSetu. Dostupan je u paketu java.sql. Svaki je objekt ResultSet povezan s jednim objektom ResultSetMetaData.
Ovaj će objekt imati detalje o svojstvima stupaca kao što su vrsta stupca, naziv stupca, broj stupaca, naziv tablice, naziv sheme itd., Objekt ResultSetMetaData možemo dobiti pomoću metode getMetaData () ResultSet-a.
Sintaksa ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Važne metode sučelja ResultSetMetaData:
Naziv metode | Opis |
---|---|
boolean isCaseSensitive (int Stupac) | Vraća true ako je zadani stupac osjetljiv na velika i mala slova, inače false |
Niz getColumnName (int stupac) | Vraća naziv stupca određenog stupca |
Niz getColumnTypeName (int stupac) | Vraća tip podataka određenog stupca koji smo proslijedili kao parametar |
Niz getTableName (int stupac) | Vraća naziv tablice stupca |
Niz getSchemaName (int stupac) | Vraća naziv sheme tablice stupca |
int getColumnCount () | Vraća broj stupaca ResultSet |
logički isAutoIncrement (int stupac) | Vraća true ako je zadani stupac Auto Increment, inače false |
Primjer 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)); } } }
IZLAZ:
Obrazloženje:
top 10 anime web stranica engleski dub
U gore navedenom programu implementirali smo metode getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () i getSchemaName () u sučelje ResultSetMetaData.
DatabaseMetaData
Sučelje DatabaseMetaData daje informacije o bazi podataka kao što su DatabaseName, verzija baze podataka i tako dalje.
Važne metode sučelja DatabaseMetaData:
Naziv metode | Opis |
---|---|
String getStringFunctions () | Vraća popis funkcija niza dostupnih u povezanoj bazi podataka |
Niz getDriverName () | Vratit će ime JDBC upravljačkog programa koji koristimo u našem Java programu |
String getDriverVersion () | Vraća broj verzije upravljačkog programa JDBC |
Niz getUserName () | Vraća korisničko ime baze podataka koju koristimo |
Niz getDatabaseProductName () | Vraća ime baze podataka koju koristimo |
String getDatabaseProductVersion () | Vraća broj verzije baze podataka koju koristimo |
RezultatPostavi getSchemas () | Vraća imena shema dostupnih u povezanoj bazi podataka |
String getTimeDateFunctions () | Vraća popis funkcija vremena i datuma dostupnih u povezanoj bazi podataka |
Niz getURL () | Vraća URL baze podataka |
Logički isReadOnly () | Vraća je li baza podataka u načinu samo za čitanje |
Booleova podrškaBatchUpdates () | Vraća da li baza podataka podržava paketna ažuriranja |
Logička podrškaSavepoints () | Vraća da li baza podataka podržava točke spremanja |
Logička podrškaStatementPooling () | Vraća podržava li baza podataka spremanje izjava |
Logička podrškaStoredProcedures () | Vraća podržava li baza podataka pohranjene procedure |
Logička podrškaOuterJoins () | Vraća podržava li baza podataka vanjsko pridruživanje |
Ovdje smo naveli neke važne metode sučelja DatabaseMetaData. Možete se obratiti službenoj stranici Oracle gdje možete vidjeti sve metode dostupne u sučelju DatabaseMetaData.
Primjer baze podatakaMetaData:
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()); } }
IZLAZ:
Obrazloženje:
U gore navedenom programu koristili smo / implementirali getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadportsBatch ( , supportsStatementPooling (), supportsSavepoints (), supportsStoredProcedures () i supportsOuterJoins () metode u sučelju DatabaseMetaData.
Bilješke koje treba napomenuti:
- JDBC ResultSet sučelje koristi se za pohranu podataka iz baze podataka i upotrebu u našem Java programu.
- Također možemo koristiti ResultSet za ažuriranje podataka metodama updateXXX ().
- ResultSet objekt usmjerava kursor prije prvog retka rezultata rezultata. Koristeći sljedeću () metodu, možemo ponoviti kroz ResultSet.
- Imamo navigacijske metode ResultSet za dalje kretanje u ResultSet objektu
- ResultMetaData koristi se za dobivanje više informacija o ResultSet-u poput naziva stupca, broja stupaca, tipa podataka stupca itd.
- DatabaseMetData koristi se za dobivanje podataka o bazi podataka koju smo povezali
Često postavljana pitanja
P # 1) Čemu služi ResultSet?
Odgovor: ResultSet se koristi za spremanje i dohvaćanje podataka iz DB-a. Kada se izvrši metoda executeQuery (), vratit će objekt ResultSet. Taj objekt ResultSet možemo koristiti u našem programu za izvođenje logike.
P # 2) Kako provjeriti je li ResultSet prazan ili nije?
Odgovor: Ne postoje unaprijed definirane metode poput length (), size () dostupne za provjeru IsResultSet Empty. Možemo koristiti metodu next () za ponavljanje i ako vrati True, tada nije prazno, ako vrati False, znači da je ResultSet prazan.
P # 3) Je li moguće da ResultSet bude null?
Odgovor: Ne, metoda executeQuery () vraća objekt ResultSet koji možda nikada neće biti nulan.
P # 4) Što je obnovljivi ResultSet?
Odgovor: Ažurirani objekt ResultSet koristi se za ažuriranje podataka u stupcu, umetanje podataka u stupce i brisanje redaka. Da bismo ResultSet učinili ažuriranim, moramo tip pomicanja učiniti osjetljivim ili neosjetljivim, a CONCUR tipom koji se može ažurirati.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P # 5) Kako doći do imena baze podataka koja je povezana?
Odgovor: Možemo koristiti metodu getDatabaseProductName () objekta DatabaseMetaData.
Zaključak
U ovom uputstvu raspravljali smo o sučeljima ResultSet, ResultSetMetaData i DatabaseMetaData i njihovim važnim metodama koje se obično koriste u JDBC programima. Također smo vidjeli kako ažurirati podatke u DB pomoću ResultSet. ResultSetMetadata sadrži informacije o ResultSet-u kao što su Naziv stupca, Broj stupaca i tako dalje.
DatabaseMetaData sadrži podatke o bazi podataka.
Preporučena literatura
- JDBC DriverManager, JDBC PreparedStatement and Statement
- Java JDBC Vodič: Što je JDBC (povezivanje Java baze podataka)
- Java JDBC upravljanje transakcijama s primjerom
- Vodič za JDBC skupnu obradu i pohranjene postupke
- Vodič za Java JDBC povezivanje s primjerom programiranja
- Usporedna i usporedbena sučelja u Javi
- Ispitivanje baze podataka selena (pomoću WebDriver-a i JDBC API-ja)
- Rukovanje iznimkama JDBC - Kako postupati s SQL iznimkama