Tutorial honek JDBC ResultSet nola erabili datuak berreskuratzeko azaltzen du. ResultSetMetaData eta DatabaseMetaData interfazeei buruz ere ikasiko dugu adibideekin:
JDBC DriverManager tutorialean JDBC tutorial seriea n, JDBC nola erabiltzen ikasi dugu. DriverManager eta bere metodoak, JDBC PreparedStatement Java aplikazioetan.
Tutorial honetan, JDBCko gainerako interfazeez hitz egingo dugu. Statement, PreparedStatement eta CallableStatement interfazeak landu ditugu gure aurreko tutorialetan.
Hemen, JDBC ResultSet, ResultSetMetaData eta DatabaseMetaData interfazeei buruz ikasiko dugu, haien metodoak eta metodoak Java programan nola erabili.
JDBC ResultSet interfazea
ResultSet interfazea java.sql paketean dago. Java Programako SQL adierazpenak exekutatu ondoren datu-basearen taulatik itzultzen diren datuak gordetzeko erabiltzen da. ResultSet-en objektuak kurtsorearen puntua mantentzen du emaitzaren datuetan. Lehenespenez, kurtsorea emaitzen datuen lehen errenkadaren aurretik kokatzen da.
Next() metodoa kurtsorea hurrengo posiziora aurrera eramateko erabiltzen da. FALSE itzuliko da erregistro gehiago ez badago. Datuak berreskuratzen ditu executeQuery() metodora deituz adierazpen-objektuetako edozein erabiliz. Statement edo PreparedStatement edo CallableStatement objektua izan daiteke. PreparedStatement, etazutabearen taularen eskema-izena itzultzen du
ResultSetMetaData Adibidea
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)); } } }
IRTEERA:
Azalpena:
Goiko programan, getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() eta getSchemaName() metodoak inplementatu ditugu ResultSetMetaData interfazean.
DatabaseMetaData
DatabaseMetaData interfazeak Datubaseari buruzko informazioa ematen du, esaterako. DatabaseName, Datu-basearen bertsioa eta abar.
DatabaseMetaData interfazearen metodo garrantzitsuak:
Metodoaren izena | Deskribapena |
---|---|
String getDriverName() | Java programan erabiltzen ari garen JDBC kontrolatzailearen izena itzuliko du |
String getDriverVersion() | JDBC kontrolatzailearen bertsio-zenbakia itzultzen du |
String getUserName() | Erabilitzen ari garen Datu-basearen erabiltzaile-izena itzultzen du |
String getDatabaseProductName() | Itzuli egiten du garen Datu-basearen izenausing |
String getDatabaseProductVersion() | Erabilitzen ari garen Datu-basearen bertsio-zenbakia itzultzen du |
ResultSet getSchemas() | Konektatutako Datu-basean eskuragarri dauden eskemen izenak itzultzen ditu |
String getStringFunctions() | Konektatutako Datu-basean eskuragarri dauden kate-funtzioen zerrenda itzultzen du |
String getTimeDateFunctions() | It Konektatutako Datu-basean eskuragarri dauden ordu eta data-funtzioen zerrenda itzultzen du |
String getURL() | Datubasearen URLa itzultzen du |
Boolean isReadOnly() | Datu-basea irakurtzeko moduan dagoen ala ez ematen du |
Boolean onartzen du BatchUpdates() | Datu-baseak batch eguneraketak onartzen dituen ala ez itzultzen du |
Boolean onartzen duSavepoints() | Datubaseak Savepoints onartzen dituen ala ez itzultzen du |
Boolean supportsStatementPooling() | Datubaseak Statement Pooling onartzen duen ala ez itzultzen du |
StoredProcedures() boolearrak onartzen ditu | Datubaseak gordetako prozedurak onartzen dituen ala ez itzultzen du |
OuterJoins() boolearrak onartzen ditu | Datu-baseak Outer Join onartzen duen ala ez itzultzen du |
Hemen, DatabaseMetaData interfazearen metodo garrantzitsu batzuk zerrendatu ditugu. erreferentzia egin dezakezu Oracle ren gune ofiziala non DatabaseMetaData interfazean eskuragarri dauden metodo guztiak ikus ditzakezun.
DatabaseMetaData Adibidea:
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()); } }
IRTEERA:
Azalpena:
Goiko programan, getDriverName(), getDriverVersion() erabili/ inplementatu dugu. , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures()joins eta(storedProcedures) metodoak() onartzen ditu. DatabaseMetaData Interfazea.
Kontuan hartu beharreko puntuak:
- JDBC ResultSet interfazea datu-baseko datuak gordetzeko eta gure Java Programan erabiltzeko erabiltzen da.
- ResultSet ere erabil dezakegu datuak eguneratzeko updateXXX() metodoak erabiliz.
- ResultSet objektuak emaitzen datuen lehen lerroaren aurretik jartzen du kurtsorea. Next() metodoa erabiliz, ResultSet-en bidez errepikatu dezakegu.
- ResultSet-en nabigazio-metodoak ditugu ResultSet objektuan gehiago mugitzeko
- ResultMetaData ResultSet-ari buruzko informazio gehiago lortzeko erabiltzen da. zutabearen izena, zutabe kopurua, zutabearen datu-mota, etab.
- DatabaseMetData konektatu dugun datu-baseari buruzko informazioa lortzeko erabiltzen da
Maiz egiten diren galderak
G #1) Zertarako balio duResultSet?
Erantzuna: ResultSet DBko datuak gordetzeko eta berreskuratzeko erabiltzen da. executeQuery() metodoa exekutatzen denean, ResultSet objektua itzuliko du. Gure programan ResultSet objektu hori erabil dezakegu logika egiteko.
G #2) Nola egiaztatu ResultSet hutsik dagoen ala ez?
Erantzuna: Ez dago erabilgarri IsResultSet Hutsa egiaztatzeko luzera(), size() bezalako aldez aurretik definitutako metodorik. Next() metodoa erabil dezakegu errepikatzeko eta True itzultzen badu, orduan ez dago hutsik, False itzultzen badu ResultSet hutsik dagoela esan nahi du.
Q #3) Posible al da ResultSet izatea. nulua izan daiteke?
Erantzuna: Ez, executeQuery() metodoak Baliteke inoiz nulua izango ez den ResultSet objektua itzultzen du.
Q #4) Zer da ResultSet eguneragarria?
Erantzuna: ResultSet objektu eguneragarri bat erabiltzen da zutabeko datuak eguneratzeko, datuak zutabeetan txertatzeko eta errenkadak ezabatzeko. ResultSet bat eguneragarri gisa egiteko, korritze mota sentikorra edo ez-sentikorra izan behar dugu eta CONCUR mota eguneragarri gisa.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
G #5) Nola lortu konektatu den Datu-basearen izena?
Erantzuna: DatabaseMetaData objektuaren getDatabaseProductName() metodoa erabil dezakegu.
Ondorioa
Tutorial honetan, zer diren aztertu dugu. ResultSet, ResultSetMetaData eta DatabaseMetaData interfazeak eta JDBC programetan erabili ohi diren haien metodo garrantzitsuak. Guk ere ikusi dugunola eguneratu DBko datuak ResultSet erabiliz. ResultSetMetadata-k ResultSet-i buruzko informazioa dauka, hala nola, zutabe-izena, zutabe-zenbaketa eta abar.
DatabaseMetaData-k datu-basearen informazioa dauka.
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”);
Ahal dugu. erabili getX() metodoa zutabeen datuak lortzeko emaitzen iteratzean X – zutabearen datu-mota den bitartean. GetX() metodoak erabiliz balioak lortzeko zutabe-izenak edo indizea erabil ditzakegu.
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); }
Zutabearen indize-zenbakia ere aipa dezakegu zutabearen izenaren ordez getX() metodoetan.
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 motak
Lehenetsita, ResultSet-eko datuak/balioak errepika ditzakegu, exekutaturiko SQL adierazpenaren irteera gisa itzuli diren aurrera norabidean. Balioak beste norabide batzuetan errepika ditzakegu Scrollable ResultSet erabiliz. ResultSet-en mota eta aldiberekotasuna zehaztu ditzakegu Statement, PreparedStatement eta CallableStatement objektuak sortzean.
ResultSet-en 3 mota daude. Hauek dira:
- TYPE_FORWARD_ONLY: Aukera lehenetsia da, non kurtsorea hasieratik amaierara mugitzen den, hau da, aurrerako norabidean.
- TYPE_SCROLL_INSENSITIVE: Mota honetan, kurtsorea aurrera zein atzera norabideetan mugituko da. Biltegiratutako datuak iteratzean datuetan aldaketarik egiten badugu, ez da datu multzoan eguneratuko norbaitek DBko datuak aldatzen baditu. Datu multzoak SQL kontsultak itzultzen duen unetik datuak dituelakoDatuak.
- TYPE_SCROLL_SENSITIVE: TYPE_SCROLL_INSENSITIVE-ren antzekoa da, aldea norbaitek datuak eguneratzen baditu SQL Query-k datuak itzuli ondoren, errepikatuz gero, datu-multzoaren aldaketak islatuko ditu.
ResultSet Aldiberetasuna
ResultSet-en Aldiberekotasuna 2 modu daude. Hauek dira:
- ResultSet.CONCUR_READ_ONLY: Aldiberekotasun modu lehenetsia da. ResultSet-eko datuak soilik irakur ditzakegu. Eguneratzea ez da aplikagarria.
- ResultSet.CONCUR_UPDATABLE: ResultSet objektuan datuak egunera ditzakegu.
Datu-base batzuek ez dute onartzen aldibereko modua guztientzat. ResultSet motak. Kasu horretan, nahi dugun mota eta aldiberekotasun modua onartzen duten egiaztatu behar dugu supportsResultSetConcurrency() metodoa erabiliz.
Metodoak ResultSet Interfazean
ResultSet metodoen 4 kategoria daude. Hauek dira:
- Nabigazio metodoak
- Getter metodoak
- Setter metodoak
- Anitz metodoak
Lehenik eta behin, nabigazio-metodoei buruz eztabaidatuko dugu eta gero aurrerago mugituko gara.
#1) Nabigazio-metodoak
Metodo hau kurtsorea datu-multzoan mugitzeko erabiltzen da.
- Boolear absolutua(int row): Parametroan aipatzen den zehaztutako errenkadara kurtsorea mugitzeko erabiltzen da eta egia itzultzeko eragiketa arrakastatsua bada, bestela false itzultzeko.
- HutsaafterLast(): ResultSet kurtsorea azken errenkadaren ondoren mugitzen du.
- Void beforeFirst(): ResultSet kurtsorea lehen errenkadaren aurretik mugitzen du.
- Boolean lehen(): ResultSet kurtsorea lehen errenkadara mugitzen du. True itzultzen du eragiketa arrakastatsua bada bestela False.
- Boolean last(): ResultSet kurtsorea azken errenkadara mugitzen du. True itzultzen du eragiketa arrakastatsua bada bestela False.
- Boolean next(): ResultSet kurtsorea hurrengo errenkadara mugitzen du. Erregistro gehiago badaude True itzultzen du eta Erregistro gehiago ez badago Gezurra.
- Boolean previous(): ResultSet kurtsorea aurreko errenkadara mugitzen du. True itzultzen du eragiketa arrakastatsua bada bestela False.
- Boolean relative(): Kurtsorea emandako errenkada kopurura mugitzen du aurrera edo atzera norabidean.
- Int getRow(): Orain ResultSet objektuak seinalatzen duen uneko errenkada-zenbakia itzultzen du.
- Void moveToCurrentRow(): Kurtsorea berriro mugitzen du. uneko errenkada txertatzeko errenkadan badago.
- Void moveToInsertRow(): Kurtsorea errenkada zehatzera mugitzen du errenkada Datubasean txertatzeko. Uneko kurtsorearen kokapena gogoratzen du. Beraz, moveToCurrentRow() metodoa erabil dezakegu txertatu ondoren kurtsorea uneko errenkadara eramateko.
Tutorial honetan,programa guztiak Javan idatzita daude. Java 8 bertsioa eta Oracle DB erabili ditugu.
>>Hemen deskargatu dezakezu Oracle softwarea
>>Java 8. bertsioa hemendik deskargatu dezakezu
Java instalatzeko urratsez urratseko prozesua du.
JDBC ResultSet Programa adibidea: (Nabigazio-metodoak erabiliz)
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(); } } }
IRTEERA:
Langilearen_xehetasunak taulako datuak
Azalpena:
Goiko programan lehenengo(), azkena(), aurretikLehena(), azkena(), hurrengo() ezarri ditugu. ), previous(), absolute(), relative() eta getRow() metodoak ResultSet-en. Metodo hauek erabiltzeko ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE balioak ezarri ditugu prepareStatement metodoan.
Ondoren, ResultSet-en Getter Metodoak zein diren aztertuko dugu:
#2) Getter metodoak
ResultSet-ek datu-baseko taularen datuak gorde ditu. Getter metodoak ResultSet-en taularen balioak lortzeko erabiltzen dira. Horretarako, zutabearen Indizearen balioa edo Zutabearen izena pasatu behar dugu.
Ondokoak dira ResultSet-en lortze-metodoak:
- int getInt (int ColumnIndex): Zehaztutako zutabearen Indexaren balioa int datu mota gisa lortzeko erabiltzen da.
- float getFloat(int ColumnIndex): lortzeko erabiltzen da. zehaztutako zutabearen Indexaren balioa float datu-mota gisa.
- java.sql.dategetDate(int ColumnIndex): Zehaztutako zutabearen Indizearen balioa data-balio gisa lortzeko erabiltzen da.
- int getInt(String ColumnName): lortzeko erabiltzen da. zehaztutako zutabearen balioa int datu mota gisa.
- float getFloat(String ColumnName): Zehaztutako zutabearen balioa float datu mota gisa lortzeko erabiltzen da.
- Java.sql.date getDate(String ColumnName): Zehaztutako zutabearen balioa data-balio gisa lortzeko erabiltzen da.
Badaude lortze-metodoak datu-mota primitibo guztietarako (boolearra, luzea, bikoitza) eta String ere ResultSet interfazean. Datu-basetik ere datu-matrize eta bitar mota bat lor dezakegu. Metodoak ere baditu horretarako.
#3) Ezarri/Eguneratzeko metodoak
Datubaseko balioa eguneratu dezakegu ResultSet Updater metodoak erabiliz. Getter metodoen antzekoa da, baina hemen zutabe jakinaren balioak/datuak pasa behar ditugu datu-basean eguneratzeko.
Ondokoak dira ResultSet-en eguneratzeko metodoak:
- void updateInt(int ColumnIndex, int Value): Zehaztutako zutabearen Indexaren balioa int balio batekin eguneratzeko erabiltzen da.
- void updateFloat(int ColumnIndex, float f): Zehaztutako zutabearen Indizearen balioa float balioarekin eguneratzeko erabiltzen da.
- void updateDate(int ColumnIndex, Data d): Zehaztutako zutabearen Indizearen balioa eguneratzeko erabiltzen dadata balioarekin.
- void updateInt(String ColumnName, int Value): Zehaztutako zutabearen balioa emandako int balioarekin eguneratzeko erabiltzen da.
- void updateFloat(String ColumnName, float f): Zehaztutako zutabearen balioa emandako float balioarekin eguneratzeko erabiltzen da.
- Java.sql.date getDate(String ColumnName): Zehaztutako zutabearen balioa emandako data-balioarekin eguneratzeko erabiltzen da.
Datu-mota primitibo guztietarako (boolearra, luzea, bikoitza) eta String-en eguneratzaile metodoak daude. ResultSet interfazean ere.
Eguneratze metodoek ResultSet objektuko datuak eguneratzen dituzte. Balioak DBn eguneratuko dira insertRow edo updateRow metodoari deitu ondoren.
Errenkada bat eguneratzea:
Datuak errenkadan egunera ditzakegu updateX() metodoetara deituz. , zutabearen izena edo indizea eta eguneratzeko balioak pasatuz. UpdateX metodoan edozein datu mota erabil dezakegu X-ren ordez. Orain arte, ResultSet objektuan datuak eguneratu ditugu. DBko datuak eguneratzeko, updateRow() metodora deitu behar dugu.
Rankada bat txertatzea:
moveToInsertRow() erabili behar dugu kurtsorea mugitzeko. errenkada berri bat sartzeko. Nabigazio metodoak atalean landu dugu jada. Ondoren, updateX() metodoa deitu behar dugu datuak errenkadan gehitzeko. Zutabe guztietarako datuak eman beharko genituzke, beste horren balio lehenetsia erabiliko duzutabea.
Datuak eguneratu ondoren, insertRow() metodoari deitu behar diogu. Ondoren, erabili moveToCurrentRow() metodoa, kurtsorearen posizioa errenkada berri bat txertatzen hasi aurretik geunden errenkadara itzultzeko.
ResultSet Adibidea:
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(); } } }
IRTEERA:
Azalpena:
Goiko programan egin duguna lehenengo, gorde dugu ResultSet objektuko Employee_details taulako datuak SELECT kontsulta erabiliz. Ondoren, azken errenkadako datuak bistaratu ditugu langile_xehetasunak taulan ResultSet-eko last() metodoa erabiliz. moveToInsertRow() metodoak kurtsorea uneko errenkada seinalatzen du, orain uneko errenkada azken errenkada da.
updateXXX()metodoak balioak errenkadan eguneratzeko eta insertRow() metodoak datuak txertatu ditu. errenkada berri bat. Absolute() metodoa erabiliz, kurtsorea 5. errenkadara seinalatzeko jarri dugu. UpdateInt() metodoa erabili da EMPNUM taulako 5. langilearen id berri batekin eguneratzeko. Horren ostean, datuak bistaratu ditu EMPNUM eguneratuta dagoen edo ez egiaztatzeko.
Kursorea taularen azken errenkada seinalatu egin du last() erabiliz eta bistaratu. Goiko logika egiteko, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE balioak ezarri behar ditugu prepareStatement metodoan.
#4) Askotariko metodoak
- void close(): ResultSet instantzia ixteko eta askatzeko erabiltzen daResultSet instantziari lotutako baliabideak.
- ResultSetMetaData getMetaData(): ResultSetMetaData Instantzia itzultzen du. Kontsulten irteerako zutabeen motari eta propietateei buruzko informazioa du. ResultSetMetaData-ri buruz gehiago ikasiko dugu hurrengo atalean.
ResultSetMetaData
Zer dira Metadatuak?
Metadatuak datuei buruzko datuak esan nahi du. Interfaze hau erabiliz, ResultSet-i buruzko informazio gehiago lortuko dugu. java.sql paketean dago eskuragarri. ResultSet objektu bakoitza ResultSetMetaData objektu batekin lotuta dago.
Objektu honek zutabeen propietateen xehetasunak izango ditu, hala nola zutabearen datu-mota, zutabe-izena, zutabe-kopurua, taula-izena, eskemaren izena, etab., ResultSetMetaData objektua ResultSet-en getMetaData() metodoa erabiliz lor dezakegu.
ResultSetMetaData-ren sintaxia:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
ResultSetMetaData interfazearen metodo garrantzitsuak:
Metodoaren izena | Deskribapena |
---|---|
String getColumnName(int zutabea) | Zutabe jakinaren zutabe-izena itzultzen du |
String getColumnTypeName(int zutabea) | Horren datu-mota itzultzen du. parametro gisa pasatu dugun zutabe jakin |
String getTableName(int zutabe) | Zutabearen taula izena itzultzen du |
String getSchemaName(int zutabea) | It |