Ovaj vodič objašnjava kako koristiti JDBC ResultSet za dohvaćanje podataka. Također ćemo naučiti o ResultSetMetaData i DatabaseMetaData sučeljima s primjerima:
U vodiču JDBC DriverManager serije JDBC vodiča , naučili smo kako koristiti JDBC DriverManager i njegove metode, JDBC PreparedStatement u Java aplikacijama.
U ovom vodiču ćemo raspravljati o preostalim interfejsima u JDBC-u. U našim prethodnim tutorijalima pokrili smo Statement, PreparedStatement i CallableStatement interfejse.
Ovdje ćemo naučiti o JDBC ResultSet, ResultSetMetaData i DatabaseMetaData sučeljima, njihovim metodama i kako koristiti metode u Java programu.
JDBC ResultSet Interface
ResultSet Interface je prisutan u java.sql paketu. Koristi se za pohranjivanje podataka koji se vraćaju iz tablice baze podataka nakon izvršenja SQL naredbi u Java programu. Objekt ResultSet održava točku kursora na podacima rezultata. Po defaultu, kursor se postavlja prije prvog reda podataka rezultata.
Metoda next() se koristi za pomicanje kursora na sljedeću poziciju u smjeru naprijed. Vratit će FALSE ako više nema zapisa. Dohvaća podatke pozivanjem metode executeQuery() koristeći bilo koji od objekata iskaza. To može biti Statement ili PreparedStatement ili CallableStatement objekt. PreparedStatement, ivraća ime šeme tabele kolone
ResultSetMetaData Primjer
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:
Objašnjenje:
U gornjem programu, implementirali smo metode getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() i getSchemaName() u ResultSetMetaData sučelje.
DatabaseMetaData
Sučelje DatabaseMetaData daje informacije o bazi podataka kao što je Ime baze podataka, verzija baze podataka itd.
Važne metode sučelja DatabaseMetaData:
Naziv metode | Opis |
---|---|
String getDriverName() | Vratiće ime JDBC drajvera koji koristimo u našem Java programu |
String getDriverVersion() | Vraća broj verzije JDBC drajvera |
String getUserName() | Vraća korisničko ime baze podataka koju koristimo |
String getDatabaseProductName() | Vraća naziv baze podataka koja jesmokoristeći |
String getDatabaseProductVersion() | Vraća broj verzije baze podataka koju koristimo |
ResultSet getSchemas() | Vraća imena shema dostupnih u povezanoj bazi podataka |
String getStringFunctions() | Vraća listu string funkcija dostupnih u povezanoj bazi podataka |
String getTimeDateFunctions() | To vraća listu funkcija vremena i datuma dostupnih u povezanoj bazi podataka |
String getURL() | Vraća URL za bazu podataka |
Boolean isReadOnly() | Vraća da li je baza podataka u načinu samo za čitanje |
Boolean supportsBatchUpdates() | Vraća da li baza podataka podržava paketna ažuriranja |
Boolean supportsSavepoints() | Vraća da li Baza podataka podržava Savepoints |
Boolean supportsStatementPooling() | Vraća da li Baza podataka podržava Pooling izjava |
Boolean supportsStoredProcedures() | Vraća da li baza podataka podržava pohranjene procedure |
Boolean supportsOuterJoins() | Vraća da li baza podataka podržava Outer Join |
Ovdje smo naveli neke važne metode sučelja DatabaseMetaData. Možete se pozvati nazvanična stranica Oracle gdje možete vidjeti sve metode dostupne u sučelju DatabaseMetaData.
Primjer DatabaseMetaData:
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:
Objašnjenje:
U gornjem programu koristili smo/implementirali getDriverName(), getDriverVersion() , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStored(), supportsStored(), supportsOuStoredJoced in supports DatabaseMetaData Interface.
Napomene:
- JDBC ResultSet interfejs se koristi za pohranjivanje podataka iz baze podataka i njihovo korištenje u našem Java programu.
- Također možemo koristiti ResultSet za ažuriranje podataka koristeći updateXXX() metode.
- ResultSet objekt pokazuje kursor prije prvog reda podataka rezultata. Koristeći next() metodu, možemo iterirati kroz ResultSet.
- Imamo navigacijske metode ResultSet-a za dalje kretanje u ResultSet objektu
- ResultMetaData se koristi za dobivanje više informacija o ResultSet-u kao što je naziv kolone, broj kolona, tip podataka kolone, itd.
- DatabaseMetData se koristi za dobivanje informacija o bazi podataka koju smo povezali
Često postavljana pitanja
P #1) Čemu služiResultSet?
Odgovor: ResultSet se koristi za pohranu i preuzimanje podataka iz DB-a. Kada se izvrši metoda executeQuery(), ona će vratiti ResultSet objekt. Možemo koristiti taj ResultSet objekat u našem programu za izvođenje logike.
P #2) Kako provjeriti da li je ResultSet prazan ili ne?
Odgovor: Ne postoje unaprijed definirane metode poput length(), size() za provjeru IsResultSet Empty. Možemo koristiti metod next() za ponavljanje i ako vrati True, onda nije prazan, ako vrati False znači da je ResultSet prazan.
P #3) Da li je moguće da ResultSet može biti null?
Odgovor: Ne, metoda executeQuery() vraća ResultSet objekt koji možda nikada neće biti null.
P #4) Što je ažurni ResultSet?
Odgovor: Objekat ResultSet koji se može ažurirati koristi se za ažuriranje podataka u koloni, umetanje podataka u stupce i brisanje redova. Da napravimo ResultSet kao ažurni, potrebno je da tip skrolovanja učinimo osjetljivim ili neosjetljivim, a tip CONCUR kao ažuriran.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P #5) Kako doći do imena baze podataka koja je povezana?
Odgovor: Možemo koristiti getDatabaseProductName() metodu DatabaseMetaData objekta.
Zaključak
U ovom vodiču smo raspravljali o tome šta su sučelja ResultSet, ResultSetMetaData i DatabaseMetaData i njihove važne metode koje se obično koriste u JDBC programima. Takođe smo videlikako ažurirati podatke u DB koristeći ResultSet. ResultSetMetadata sadrži informacije o ResultSet-u kao što je naziv kolone, broj kolona i tako dalje.
DatabaseMetaData sadrži informacije o bazi podataka.
Sučelje izjave
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement Interface
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Možemo koristite getX() metodu da dobijete podatke kolona dok se ponavljate kroz rezultate gde je X – tip podataka kolone. Možemo koristiti ili nazive kolona ili indeks da bismo dobili vrijednosti koristeći getX() metode.
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 broj indeksa kolone umjesto naziva kolone u getX() metodama.
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); }
Tipovi ResultSet-a
U defaultu, možemo ponoviti podatke/vrijednosti u ResultSet-u koji su se vratili kao izlaz izvršenog SQL izraza u smjeru naprijed. Možemo iterirati vrijednosti u drugim smjerovima koristeći Scrollable ResultSet. Možemo specificirati tip i podudarnost ResultSet-a dok kreiramo objekte Statement, PreparedStatement i CallableStatement.
Postoje 3 tipa u ResultSet-u. Oni su:
- TYPE_FORWARD_ONLY: To je zadana opcija, gdje se kursor pomiče od početka do kraja, tj. u smjeru naprijed.
- TYPE_SCROLL_INSENSITIVE: U ovom tipu, to će natjerati kursor da se kreće u smjeru naprijed i nazad. Ako izvršimo bilo kakve promjene u podacima dok ponavljamo pohranjene podatke, oni se neće ažurirati u skupu podataka ako bilo tko promijeni podatke u DB-u. Budući da skup podataka ima podatke od trenutka kada SQL upit vraćaPodaci.
- TYPE_SCROLL_SENSITIVE: Slično je TYPE_SCROLL_INSENSITIVE, razlika je u tome ako bilo tko ažurira podatke nakon što je SQL upit vratio podatke, dok će iteracija odražavati promjene skupa podataka.
Konkurencija skupa rezultata
Postoje 2 načina istodobnosti u skupu rezultata. Oni su:
- ResultSet.CONCUR_READ_ONLY: To je zadani režim istovremenog rada. Možemo samo čitati podatke u ResultSet-u. Ažuriranje nije primjenjivo.
- ResultSet.CONCUR_UPDATABLE: Možemo ažurirati podatke u ResultSet objektu.
Neke baze podataka ne podržavaju istovremeni način rada za sve Tipovi skupova rezultata. U tom slučaju, moramo provjeriti podržavaju li naš željeni tip i način istodobnosti pomoću metode supportsResultSetConcurrency().
Metode u sučelju ResultSet
Postoje 4 kategorije metoda ResultSet. To su:
- Navigacijske metode
- Metode dobivanja
- Metode postavljača
- Razne metode
Prvo ćemo razgovarati o metodama navigacije, a zatim ćemo krenuti dalje.
#1) Metode navigacije
Ova metoda se koristi za pomicanje kursora oko skupa podataka.
- Boolean absolute(int row): Koristi se za pomicanje kursora na navedeni red koji je spomenut u parametru i vraćanje true ako je operacija uspješna, inače vraća false.
- VidafterLast(): Omogućava da se ResultSet kursor pomiče nakon posljednjeg retka.
- Void beforeFirst(): To čini da se kursor ResultSet pomjeri prije prvog reda.
- Boolean first(): To čini da se kursor ResultSet pomakne u prvi red. Vraća True ako je operacija uspješna, inače False.
- Boolean last(): To čini da se ResultSet kursor pomakne na posljednji red. Vraća True ako je operacija uspješna, inače False.
- Boolean next(): To čini da se ResultSet kursor pomakne na sljedeći red. Vraća True ako ima više zapisa i False ako više nema zapisa.
- Boolean previous(): To čini da se kursor ResultSet pomakne na prethodni red. Vraća True ako je operacija uspješna, inače False.
- Booleanrelativ(): Pomiče kursor na zadati broj redova bilo u smjeru naprijed ili nazad.
- Int getRow(): Vraća trenutni broj reda na koji objekt ResultSet sada pokazuje.
- Void moveToCurrentRow(): Pomiče kursor nazad na trenutni red ako je trenutno u redu za umetanje.
- Void moveToInsertRow(): Pomiče kursor na određeni red kako bi umetnuo red u bazu podataka. Pamti trenutnu lokaciju kursora. Dakle, možemo koristiti metodu moveToCurrentRow() da pomjerimo kursor u trenutni red nakon umetanja.
U ovom vodiču,svi programi su napisani na Javi. Koristili smo Java 8 verziju i Oracle DB.
>>Oracle softver možete preuzeti ovdje
>>Ovdje možete preuzeti Java verziju 8
Ima korak po korak proces Java instalacije.
JDBC ResultSet Primjer programa:(Korišćenje 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 \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("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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 \n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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 tabeli sa podacima o zaposleniku
Objašnjenje:
U gornjem programu implementirali smo first(), last(), beforeFirst(), afterLast(), next( ), previous(), absolute(),relativ() i getRow() metode u ResultSet-u. Da bismo koristili ove metode, postavljamo ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE vrijednosti u metodi pripremeStatement.
Sljedeće ćemo razgovarati o tome koje su Getter metode u ResultSet-u:
#2) Getter metode
ResultSet je pohranio podatke tablice iz baze podataka. Getter metode se koriste za dobivanje vrijednosti tablice u ResultSet-u. Za to moramo proći ili vrijednost indeksa stupca ili ime kolone.
Sljedeće su metode getter u ResultSet-u:
- int getInt (int ColumnIndex): Koristi se za dobivanje vrijednosti specificiranog indeksa stupca kao int tipa podataka.
- float getFloat(int ColumnIndex): Koristi se za dobivanje vrijednost navedenog stupca Indeks kao float tipa podataka.
- java.sql.dategetDate(int ColumnIndex): Koristi se za dobivanje vrijednosti specificiranog indeksa stupca kao vrijednosti datuma.
- int getInt(String ColumnName): Koristi se za dobivanje vrijednost specificiranog stupca kao int tip podataka.
- float getFloat(String ColumnName): Koristi se za dobivanje vrijednosti specificirane kolone kao tipa podataka float.
- Java.sql.date getDate(String ColumnName): Koristi se za dobivanje vrijednosti navedene kolone kao vrijednosti datuma.
Postoje metode dobivanja za sve primitivne tipove podataka (Boolean, long, double) i String također u ResultSet interfejsu. Možemo dobiti niz i binarni tip podataka i iz baze podataka. Ima metode i za to.
#3) Metode postavljača/ažuriranja
Možemo ažurirati vrijednost u bazi podataka koristeći metode ResultSet Updater. Slično je Getter metodama, ali ovdje moramo proslijediti vrijednosti/podatke za određenu kolonu da se ažuriraju u bazi podataka.
Sljedeće su metode ažuriranja u ResultSet-u:
- void updateInt(int ColumnIndex, int Value): Koristi se za ažuriranje vrijednosti navedene kolone Index sa int vrijednošću.
- void updateFloat(int ColumnIndex, float f): Koristi se za ažuriranje vrijednosti specificiranog indeksa stupca sa float vrijednošću.
- void updateDate(int ColumnIndex, Date d): Koristi se za ažuriranje vrijednosti navedene kolone Indekssa vrijednošću datuma.
- void updateInt(String ColumnName, int Value): Koristi se za ažuriranje vrijednosti navedene kolone sa datom int vrijednošću.
- void updateFloat(String ColumnName, float f): Koristi se za ažuriranje vrijednosti navedene kolone sa datom float vrijednošću.
- Java.sql.date getDate(String ColumnName): Koristi se za ažuriranje vrijednosti navedene kolone sa datom vrijednošću datuma.
Postoje metode ažuriranja za sve primitivne tipove podataka (Boolean, long, double) i String također u ResultSet sučelju.
Metode ažuriranja samo ažuriraju podatke u ResultSet objektu. Vrijednosti će se ažurirati u DB nakon pozivanja metode insertRow ili updateRow.
Ažuriranje reda:
Možemo ažurirati podatke u redu pozivanjem updateX() metoda , prosljeđivanje imena stupca ili indeksa i vrijednosti za ažuriranje. Možemo koristiti bilo koji tip podataka umjesto X u metodi updateX. Do sada smo ažurirali podatke u ResultSet objektu. Da ažuriramo podatke u DB-u, moramo pozvati metodu updateRow().
Umetanje reda:
Moramo koristiti moveToInsertRow() za pomicanje kursora da umetnete novi red. Ovo smo već pokrili u odjeljku Metode navigacije. Zatim moramo pozvati metodu updateX() da bismo dodali podatke u red. Trebali bismo dati podatke za sve kolone, inače će koristiti zadanu vrijednost tog određenogstupac.
Nakon ažuriranja podataka, moramo pozvati metodu insertRow(). Zatim koristite metodu moveToCurrentRow() da vratite poziciju kursora na red u kojem smo bili prije nego što smo počeli umetati novi red.
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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\n EMP NUM = " + rs.getInt("empNum") + "\n LAST NAME = "+ rs.getString(2)+"\n 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("\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: 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(); } } }
IZLAZ:
Objašnjenje:
U gornjem programu ono što smo uradili je prvo, pohranili podatke tabele Employee_details u ResultSet objektu koristeći SELECT upit. Zatim smo prikazali podatke posljednjeg reda u tabeli employee_details koristeći last() metodu ResultSet. moveToInsertRow() metoda čini kursor da pokazuje trenutni red, sada je trenutni red posljednji red.
updateXXX()metode korištene za ažuriranje vrijednosti u red i insertRow() metoda je umetnula podatke u novi red. Koristeći apsolutni() metod, napravili smo kursor da pokazuje na 5. red. UpdateInt() metoda je korištena za ažuriranje EMPNUM-a s novim ID-om 5. zaposlenika u tabeli. Nakon toga, prikazani su podaci da se provjeri da li je EMPNUM ažuriran ili ne.
Napravio kursor da pokazuje zadnji red tabele koristeći last() i prikazao ga. Da bismo izvršili gornju logiku, moramo postaviti vrijednosti ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE u metodi pripremeStatement.
#4) Razne metode
- void close(): Koristi se za zatvaranje ResultSet instance i oslobađanjeresursi povezani sa ResultSet instancom.
- ResultSetMetaData getMetaData(): Vraća ResultSetMetaData instancu. Sadrži informacije o tipu i svojstvu stupaca izlaznog upita. Saznat ćemo više o ResultSetMetaData u sljedećem odjeljku.
ResultSetMetaData
Šta su metapodaci?
Metapodaci znači podaci o podacima. Koristeći ovaj interfejs, dobićemo više informacija o ResultSet-u. Dostupan je u paketu java.sql. Svaki ResultSet objekat je pridružen jednom ResultSetMetaData objektu.
Ovaj objekat će imati detalje o svojstvima kolona kao što su tip podataka kolone, naziv kolone, broj kolona, ime tabele, ime šeme, itd., Objekt ResultSetMetaData možemo dobiti koristeći getMetaData() metodu ResultSet.
Sintaksa ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Važne metode ResultSetMetaData interfejsa:
Naziv metode | Opis |
---|---|
String getColumnName(int column) | Vraća naziv stupca određene kolone |
String getColumnTypeName(int column) | Vraća tip podataka određeni stupac koji smo proslijedili kao parametar |
String getTableName(int column) | Vraća ime tablice kolone |
String getSchemaName(int column) | To |