Ovaj vodič objašnjava kako koristiti JDBC ResultSet za dohvaćanje podataka. Također ćemo naučiti o sučeljima ResultSetMetaData i DatabaseMetaData s primjerima:
U JDBC DriverManager vodiču JDBC serije vodiča , naučili smo kako koristiti JDBC DriverManager i njegove metode, JDBC PreparedStatement u Java aplikacijama.
U ovom vodiču raspravljat ćemo o preostalim sučeljima u JDBC-u. Pokrili smo 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 kako koristiti metode u Java programu.
JDBC ResultSet sučelje
ResultSet sučelje prisutno je u paketu java.sql. Koristi se za pohranu podataka koji se vraćaju iz tablice baze podataka nakon izvođenja SQL naredbi u Java programu. Objekt ResultSet održava točku kursora na podacima rezultata. Prema zadanim postavkama, kursor se postavlja ispred prvog retka podataka rezultata.
Metoda next() koristi se za pomicanje kursora na sljedeću poziciju u smjeru naprijed. Vratit će FALSE ako više nema zapisa. Dohvaća podatke pozivanjem metode executeQuery() pomoću bilo kojeg objekta iskaza. To može biti Statement ili PreparedStatement ili CallableStatement objekt. PreparedStatement, ivraća naziv sheme tablice stupca
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 sučelju ResultSetMetaData.
DatabaseMetaData
Sučelje DatabaseMetaData daje informacije o bazi podataka kao DatabaseName, Database version, i tako dalje.
Važne metode sučelja DatabaseMetaData:
Naziv metode | Opis |
---|---|
String getDriverName() | Vratit će naziv JDBC upravljačkog programa koji koristimo u našem Java programu |
Niz getDriverVersion() | Vraća broj verzije JDBC upravljačkog programa |
Niz getUserName() | Vraća korisničko ime baze podataka koju koristimo |
String getDatabaseProductName() | Vraća naziv baze podataka koja jesmousing |
String getDatabaseProductVersion() | Vraća broj verzije baze podataka koju koristimo |
ResultSet getSchemas() | Vraća nazive shema dostupnih u povezanoj bazi podataka |
String getStringFunctions() | Vraća popis funkcija niza dostupnih u povezanoj bazi podataka |
String getTimeDateFunctions() | It vraća popis funkcija vremena i datuma dostupnih u povezanoj bazi podataka |
String getURL() | Vraća URL za bazu podataka |
Boolean isReadOnly() | Vraća je li baza podataka u načinu rada samo za čitanje |
Boolean supportsBatchUpdates() | Vraća podržava li baza podataka skupna ažuriranja |
Boolean supportsSavepoints() | Vraća podržava li baza podataka Savepoints |
Boolean supportsStatementPooling() | Vraća podržava li baza podataka skupljanje izjava |
Boolean supportsStoredProcedures() | Vraća podržava li baza podataka pohranjene procedure |
Boolean supportsOuterJoins() | Vraća podržava li baza podataka Outer Join |
Ovdje smo naveli neke važne metode sučelja DatabaseMetaData. Možete se obratiti naslužbena stranica Oraclea 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(), supportsStoredProcedures() i supportsOuterJoins() metode u Sučelje DatabaseMetaData.
Točke koje treba napomenuti:
- JDBC ResultSet sučelje koristi se za pohranu podataka iz baze podataka i njihovu upotrebu u našem Java programu.
- Također možemo koristiti ResultSet za ažuriranje podataka korištenjem metoda updateXXX().
- ResultSet objekt pokazuje pokazivač na mjesto prije prvog reda podataka rezultata. Koristeći next() metodu, možemo iterirati kroz ResultSet.
- Imamo navigacijske metode ResultSet-a za pomicanje dalje u ResultSet objektu
- ResultMetaData se koristi za dobivanje više informacija o ResultSet-u kao naziv stupca, broj stupaca, tip podataka stupca itd.
- DatabaseMetData koristi se za dobivanje informacija o bazi podataka koju smo povezali
Često postavljana pitanja
P #1) Čemu služiResultSet?
Odgovor: ResultSet se koristi za pohranjivanje i dohvaćanje podataka iz baze podataka. Kada se izvrši metoda executeQuery(), vratit će objekt ResultSet. Možemo koristiti taj ResultSet objekt u našem programu za izvođenje logike.
P #2) Kako provjeriti je li ResultSet prazan ili ne?
Odgovor: Ne postoje unaprijed definirane metode kao što su length(), size() dostupne za provjeru IsResultSet Empty. Možemo koristiti next() metodu za ponavljanje i ako vrati True, onda nije prazna, ako vrati False znači da je ResultSet prazan.
P #3) Je li moguće da ResultSet može biti null?
Odgovor: Ne, metoda executeQuery() vraća ResultSet objekt koji nikada ne mora biti null.
P #4) Što je ResultSet koji se može ažurirati?
Odgovor: Objekt ResultSet koji se može ažurirati koristi se za ažuriranje podataka u stupcu, umetanje podataka u stupce i brisanje redaka. Da bi ResultSet bio ažuriran, moramo tip pomicanja učiniti osjetljivim ili neosjetljivim, a CONCUR tip ažuriranim.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P #5) Kako dobiti naziv baze podataka koja je povezana?
Odgovor: Možemo upotrijebiti metodu getDatabaseProductName() objekta DatabaseMetaData.
Zaključak
U ovom smo vodiču raspravljali o tome što su sučelja ResultSet, ResultSetMetaData i DatabaseMetaData i njihove važne metode koje se obično koriste u JDBC programima. Također smo vidjelikako ažurirati podatke u DB koristeći ResultSet. ResultSetMetadata sadrži informacije o ResultSet-u kao što su naziv stupca, broj stupaca i tako dalje.
DatabaseMetaData sadrži informacije o bazi podataka.
Statement Interface
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 upotrijebite metodu getX() za dobivanje podataka stupaca tijekom iteracije kroz rezultate gdje je X – tip podataka stupca. Možemo koristiti nazive stupaca ili indeks za dobivanje vrijednosti korištenjem getX() metoda.
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 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); }
ResultSet Vrste
Prema zadanim postavkama, možemo iterirati podatke/vrijednosti u ResultSet koji su se vratili kao izlaz izvršene SQL naredbe u smjeru prema naprijed. Vrijednosti možemo ponavljati u drugim smjerovima koristeći Scrollable ResultSet. Možemo odrediti vrstu i istovremenost ResultSet-a dok stvaramo Statement, PreparedStatement i CallableStatement objekte.
Postoje 3 vrste u ResultSet-u. To su:
- TYPE_FORWARD_ONLY: To je zadana opcija, gdje se pokazivač pomiče od početka do kraja, tj. u smjeru naprijed.
- TYPE_SCROLL_INSENSITIVE: U ovoj vrsti, kursor će se pomicati i naprijed i natrag. Ako napravimo bilo kakve promjene u podacima tijekom ponavljanja pohranjenih podataka, oni se neće ažurirati u skupu podataka ako bilo tko promijeni podatke u DB-u. Budući da skup podataka sadrži podatke od trenutka kada je SQL upit vratioPodaci.
- TYPE_SCROLL_SENSITIVE: Slično je TYPE_SCROLL_INSENSITIVE, razlika je ako bilo tko ažurira podatke nakon što je SQL upit vratio podatke, dok će ponavljanje odražavati promjene u skupu podataka.
Konkurentnost skupa rezultata
Postoje 2 načina istovremenosti skupa rezultata. Oni su:
- ResultSet.CONCUR_READ_ONLY: To je zadani način istovremenosti. Možemo samo čitati podatke u ResultSet-u. Ažuriranje nije primjenjivo.
- ResultSet.CONCUR_UPDATABLE: Možemo ažurirati podatke u objektu ResultSet.
Neke baze podataka ne podržavaju način istovremenosti za sve ResultSet vrste. U tom slučaju, moramo provjeriti podržavaju li naš željeni tip i način paralelnosti pomoću metode supportsResultSetConcurrency().
Metode u sučelju ResultSet
Postoje 4 kategorije ResultSet metoda. To su:
- Navigacijske metode
- Getter metode
- Setter metode
- Razne metode
Prvo ćemo razgovarati o navigacijskim metodama, a zatim idemo dalje.
#1) Navigacijske metode
Ova se metoda koristi za pomicanje pokazivača po skupu podataka.
- Boolean absolute(int row): Koristi se za pomicanje kursora na navedeni red koji je naveden u parametru i vraćanje true ako je operacija uspješna inače vraća false.
- PrazninaafterLast(): Pomiče kursor ResultSet nakon posljednjeg retka.
- Void beforeFirst(): Pomiče kursor ResultSet prije prvog retka.
- Boolean first(): Pomiče kursor ResultSet u prvi redak. Vraća True ako je operacija uspješna else False.
- Boolean last(): Pomiče kursor ResultSet u zadnji redak. Vraća True ako je operacija uspješna else False.
- Boolean next(): Pomiče kursor ResultSet u sljedeći redak. Vraća True ako ima više zapisa i False ako više nema zapisa.
- Boolean previous(): Pomiče kursor ResultSet u prethodni redak. Vraća True ako je operacija uspješna else False.
- Boolean relative(): Pomiče kursor na zadani broj redaka u smjeru naprijed ili unatrag.
- Int getRow(): Vraća trenutni broj retka na koji ResultSet objekt sada pokazuje.
- Void moveToCurrentRow(): Pomiče kursor natrag na trenutni redak ako je trenutno u retku za umetanje.
- Void moveToInsertRow(): Pomiče pokazivač na određeni red da bi se red umetnuo u bazu podataka. Pamti trenutnu lokaciju kursora. Dakle, možemo koristiti metodu moveToCurrentRow() za pomicanje kursora u trenutni redak nakon umetanja.
U ovom vodiču,svi programi su napisani u Javi. Koristili smo verziju Java 8 i Oracle DB.
>>Možete preuzeti Oracle softver ovdje
>>Možete preuzeti Javu verziju 8 odavde
Ima proces instalacije Jave korak po korak.
JDBC ResultSet Primjer programa: (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 \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 tablici Employee_details
Objašnjenje:
U gornjem programu smo implementirali first(), last(), beforeFirst(), afterLast(), next( ), metode previous(), absolute(), relative() i getRow() u ResultSet-u. Za korištenje ovih metoda postavljamo vrijednosti ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE u metodi pripraveStatement.
Dalje ćemo raspravljati o tome koje su metode dobivanja 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 trebamo proslijediti vrijednost indeksa stupca ili naziv stupca.
Sljedeće su metode dobivanja u ResultSet-u:
- int getInt (int ColumnIndex): Koristi se za dobivanje vrijednosti navedenog stupca Index kao int tipa podataka.
- float getFloat(int ColumnIndex): Koristi se za dobivanje vrijednost navedenog stupca Indeks kao tip podataka float.
- java.sql.dategetDate(int ColumnIndex): Koristi se za dobivanje vrijednosti navedenog Indeksa stupca kao vrijednosti datuma.
- int getInt(String ColumnName): Koristi se za dobivanje vrijednost navedenog stupca kao tipa podataka int.
- float getFloat(String ColumnName): Koristi se za dobivanje vrijednosti navedenog stupca kao tipa podataka float.
- Java.sql.date getDate(String ColumnName): Koristi se za dobivanje vrijednosti navedenog stupca kao vrijednosti datuma.
Postoje metode dobivanja za sve primitivne tipove podataka (Boolean, long, double) i String također u ResultSet sučelju. Također iz baze podataka možemo dobiti niz i binarni tip podataka. Ima metode i za to.
#3) Metode postavljača/ažuriranja
Možemo ažurirati vrijednost u bazi podataka pomoću metoda ažuriranja ResultSet-a. Slično je Getter metodama, ali ovdje moramo proslijediti vrijednosti/podatke za određeni stupac za ažuriranje u bazi podataka.
Sljedeće su metode ažuriranja u ResultSet-u:
- void updateInt(int ColumnIndex, int Value): Koristi se za ažuriranje vrijednosti navedenog stupca Index s int vrijednošću.
- void updateFloat(int ColumnIndex, float f): Koristi se za ažuriranje vrijednosti navedenog stupca Index s float vrijednošću.
- void updateDate(int ColumnIndex, Date d): Koristi se za ažuriranje vrijednosti navedenog stupca Indexs vrijednošću datuma.
- void updateInt(String ColumnName, int Value): Koristi se za ažuriranje vrijednosti navedenog stupca s danom int vrijednošću.
- void updateFloat(String ColumnName, float f): Koristi se za ažuriranje vrijednosti navedenog stupca zadanom float vrijednošću.
- Java.sql.date getDate(String ColumnName): Koristi se za ažuriranje vrijednosti navedenog stupca s danom vrijednošću datuma.
Postoje metode ažuriranja za sve primitivne tipove podataka (Boolean, long, double) i String također u sučelju ResultSet.
Metode 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 u retku možemo ažurirati pozivanjem metode updateX(). , prosljeđujući naziv ili indeks stupca i vrijednosti za ažuriranje. Umjesto X-a u metodi updateX možemo koristiti bilo koji tip podataka. Do sada smo ažurirali podatke u objektu ResultSet. Da ažuriramo podatke u DB-u, moramo pozvati metodu updateRow().
Umetanje retka:
Moramo koristiti moveToInsertRow() za pomicanje kursora za umetanje novog reda. O tome smo već govorili u odjeljku Metode navigacije. Zatim moramo pozvati metodu updateX() da dodamo podatke u red. Trebali bismo dati podatke za sve stupce, inače će se koristiti zadana vrijednost tog pojedinog stupcastupac.
Nakon ažuriranja podataka, moramo pozvati metodu insertRow(). Zatim upotrijebite metodu moveToCurrentRow() kako biste vratili poziciju pokazivača na redak na kojem smo bili prije nego smo počeli umetati novi redak.
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 napravili je prvo, pohranili smo podatke tablice Employee_details u objektu ResultSet pomoću upita SELECT. Zatim smo prikazali podatke zadnjeg retka u tablici employee_details koristeći last() metodu ResultSeta. metoda moveToInsertRow() tjera kursor da pokazuje na trenutni red, sada je trenutni red zadnji red.
updateXXX()metode koje se koriste za ažuriranje vrijednosti retka, a metoda insertRow() je umetnula podatke u novi red. Koristeći absolute() metodu, postavili smo kursor tako da pokazuje na 5. red. Metoda UpdateInt() korištena je za ažuriranje EMPNUM-a novim ID-om 5. zaposlenika u tablici. Nakon toga, prikazao podatke kako bi provjerio je li EMPNUM ažuriran ili ne.
Napravio kursor da pokazuje zadnji redak tablice pomoću last() i prikazao ga. Da bismo izvršili gornju logiku, moramo postaviti vrijednosti ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE u metodi pripraveStatement.
#4) Razne metode
- void close(): Koristi se za zatvaranje ResultSet instance i oslobađanjeresursi povezani s instancom ResultSet.
- ResultSetMetaData getMetaData(): Vraća instancu ResultSetMetaData. Ima informacije o vrsti i svojstvu stupaca izlaza upita. Naučit ćemo više o ResultSetMetaData u sljedećem odjeljku.
ResultSetMetaData
Što su metapodaci?
Metapodaci znači podaci o podacima. Koristeći ovo sučelje, dobit ćemo više informacija o ResultSet-u. Dostupan je u paketu java.sql. Svaki ResultSet objekt povezan je s jednim ResultSetMetaData objektom.
Ovaj objekt će imati pojedinosti o svojstvima stupaca kao što su tip podataka stupca, naziv stupca, broj stupaca, naziv tablice, naziv sheme itd., Objekt ResultSetMetaData možemo dobiti koristeći getMetaData() metodu ResultSeta.
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 |
---|---|
Niz getColumnName(int column) | Vraća naziv stupca određenog stupca |
String getColumnTypeName(int column) | Vraća tip podataka određeni stupac koji smo proslijedili kao parametar |
String getTableName(int column) | Vraća naziv tablice stupca |
String getSchemaName(int column) | It |