Dizze tutorial ferklearret hoe't jo JDBC ResultSet brûke om gegevens op te heljen. Wy sille ek leare oer ResultSetMetaData- en DatabaseMetaData-ynterfaces mei foarbylden:
Yn de JDBC DriverManager -tutorial fan 'e JDBC-tutorialsearje , hawwe wy leard hoe't jo JDBC brûke kinne DriverManager en syn metoaden, JDBC PreparedStatement yn Java-applikaasjes.
Yn dizze tutorial sille wy de oerbleaune ynterfaces yn JDBC beprate. Wy hawwe de ynterfaces foar Statement, PreparedStatement en CallableStatement yn ús eardere tutorials behannele.
Hjir sille wy leare oer JDBC ResultSet, ResultSetMetaData, en DatabaseMetaData ynterfaces, har metoaden en hoe't jo de metoaden brûke yn Java-programma.
JDBC ResultSet Interface
ResultSet Interface is oanwêzich yn it java.sql-pakket. It wurdt brûkt om de gegevens op te slaan dy't wurde weromjûn fan 'e databanktabel nei de útfiering fan' e SQL-útspraken yn it Java-programma. It objekt fan ResultSet hâldt rinnerkepunt by de resultaatgegevens. Standert stiet it rinnerke foar de earste rige fan de resultaatgegevens.
De folgjende() metoade wurdt brûkt om it rinnerke nei de folgjende posysje yn foarútrjochting te ferpleatsen. It sil FALSE weromjaan as der gjin records mear binne. It hellet gegevens op troch de metoade executeQuery () op te roppen mei ien fan 'e ferklearringsobjekten. It kin wêze Statement of PreparedStatement of CallableStatement foarwerp. Prepared Statement, enjout de skemanamme fan de tabel fan de kolom werom
ResultSetMetaData Foarbyld
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)); } } }
OUTPUT:
Utlis:
Yn it boppesteande programma, wy hawwe getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() en getSchemaName() metoaden ymplementearre yn de ResultSetMetaData ynterface.
DatabaseMetaData
De DatabaseMetaData ynterface jout ynformaasje oer de Database lykas DatabaseName, Database ferzje, ensafuorthinne.
Wichtige metoaden fan DatabaseMetaData-ynterface:
Metoadenamme | Beskriuwing |
---|---|
String getDriverName() | It sil de namme weromjaan fan it JDBC-bestjoerder dat wy brûke yn ús Java-programma |
String getDriverVersion() | It jout it JDBC-bestjoerderferzjenûmer werom |
String getUserName() | It jout de brûkersnamme fan de databank dy't wy brûke |
String getDatabaseProductName() | It jout werom de namme fan 'e databank dy't wy binnebrûkend |
String getDatabaseProductVersion() | It jout it ferzjenûmer fan de databank dy't wy brûke |
ResultSet getSchemas() | It jout de nammen fan de skema's dy't beskikber binne yn de ferbûne database |
String getStringFunctions() | It jout de list mei stringfunksjes dy't beskikber binne yn 'e ferbûne databank werom |
String getTimeDateFunctions() | It jout de list mei tiid- en datumfunksjes beskikber yn de ferbûne database |
String getURL() | It jout de URL foar de databank werom |
Boolean isReadOnly() | It jout werom oft de databank yn allinich-lêsmodus is |
Boolean stipetBatchUpdates() | It jout werom oft de databank batchupdates stipet |
Boolean stipetSavepoints() | It jout werom oft de Database Savepoints stipet |
Boolean stipetStatementPooling() | It jout werom oft de Database Statement Pooling stipet |
Boolean stipetStoredProcedures() | It jout werom oft de databank bewarre prosedueres stipet |
Boolean stipetOuterJoins() | It jout werom oft de databank stipet Outer Join |
Hjir hawwe wy wat wichtige metoaden fan 'e DatabaseMetaData-ynterface neamd. Jo kinne ferwize nei deoffisjele side fan 'e Oracle dêr't jo alle metoaden kinne sjen dy't beskikber binne yn 'e DatabaseMetaData-ynterface.
DatabaseMetaData Foarbyld:
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()); } }
OUTPUT:
Utlis:
Yn it boppesteande programma hawwe wy de getDriverName(), getDriverVersion() brûkt/implementearre , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), stipetBatchUpdates(), stipetStatementPooling(), stipetSavepoints(), stipetStored-Procedures(), stipetStored-Procedures yn DatabaseMetaData-ynterface.
Punten om op te merken:
- JDBC ResultSet-ynterface wurdt brûkt om de gegevens fan 'e databank op te slaan en te brûken yn ús Java-programma.
- Wy kinne ek ResultSet brûke om de gegevens te aktualisearjen mei updateXXX() metoaden.
- ResultSet-objekt wiist de rinnerke op foar de earste rige fan de resultaatgegevens. Mei de folgjende() metoade kinne wy iterearje troch de ResultSet.
- Wy hawwe navigaasjemetoaden fan ResultSet om fierder te gean yn it ResultSet-objekt
- ResultMetaData wurdt brûkt om mear ynformaasje te krijen oer de ResultSet lykas kolomnamme, oantal kolommen, it datatype fan de kolom, ensfh.
- DatabaseMetData wurdt brûkt om de ynformaasje te krijen oer de databank dy't wy ferbûn hawwe
Faak stelde fragen
F #1) Wat is it gebrûk fanResultSet?
Antwurd: ResultSet wurdt brûkt om de gegevens fan DB op te slaan en op te heljen. Wannear't executeQuery () -metoade is útfierd, sil it ResultSet-objekt weromkomme. Wy kinne dat ResultSet-objekt yn ús programma brûke om de logika út te fieren.
F #2) Hoe kinne jo kontrolearje oft de ResultSet leech is of net?
Antwurd: D'r binne gjin foarôf definieare metoaden lykas lingte(), grutte() beskikber om de IsResultSet Empty te kontrolearjen. Wy kinne de folgjende () metoade brûke om te iterearjen en as it Wier jout, dan is it net leech, as it False weromkomt, betsjut dat de ResultSet leech is.
Q #3) Is it mooglik dat ResultSet kin null wêze?
Antwurd: Nee, executeQuery()-metoade jout it ResultSet-objekt werom dat miskien nea nul is.
Q #4) Wat is bywurke ResultSet?
Antwurd: In bywurke ResultSet-objekt wurdt brûkt om de gegevens yn 'e kolom te aktualisearjen, gegevens yn kolommen yn te foegjen en rigen te wiskjen. Om in ResultSet as bywurke te meitsjen, moatte wy scrolltype as gefoelich of ûngefoelich meitsje en CONCUR-type as bywurke.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
F #5) Hoe krije jo de databasenamme dy't ferbûn is?
Antwurd: Wy kinne de getDatabaseProductName() metoade brûke fan DatabaseMetaData-objekt.
Konklúzje
Yn dizze tutorial hawwe wy besprutsen wat binne de ResultSet-, ResultSetMetaData- en DatabaseMetaData-ynterfaces en har wichtige metoaden dy't gewoanlik brûkt wurde yn 'e JDBC-programma's. Wy hawwe ek sjoenhoe't jo gegevens yn DB bywurkje mei ResultSet. ResultSetMetadata befettet ynformaasje oer ResultSet lykas Column Name, Column count, ensfh.
DatabaseMetaData befettet databankynformaasje.
Statement-ynterface
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
PreparedStatement-ynterface
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Wy kinne brûk de metoade getX () om de gegevens fan 'e kolommen te krijen by it iterearjen troch de resultaten wêr't X - it gegevenstype fan 'e kolom is. Wy kinne of Column Names of Index brûke om de wearden te krijen mei getX() metoaden.
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); }
Wy kinne ek it yndeksnûmer fan de Column neame ynstee fan Column Name yn de getX() metoaden.
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 Types
Standert kinne wy de gegevens/wearden yn ResultSet iterearje dy't weromkommen binne as in útfier fan 'e útfierde SQL-statement yn 'e foarútrjochting. Wy kinne de wearden yn oare rjochtingen iterearje mei Scrollable ResultSet. Wy kinne it type en de gearkomst fan ResultSet spesifisearje by it meitsjen fan Statement-, PreparedStatement- en CallableStatement-objekten.
Der binne 3 soarten yn ResultSet. Se binne:
- TYPE_FORWARD_ONLY: It is de standert opsje, wêrby't de rinnerke fan begjin oant ein beweecht, dus yn 'e foarút rjochting.
- TYPE_SCROLL_INSENSITIVE: Yn dit type sil it de rinnerke yn sawol foarút- as efterút rjochtings ferpleatse. As wy wizigingen meitsje yn 'e gegevens by it iterearjen fan de bewarre gegevens, sil it net bywurkje yn' e dataset as immen de gegevens yn DB feroaret. Omdat de dataset hat de gegevens út it momint dat de SQL-query jout deGegevens.
- TYPE_SCROLL_SENSITIVE: It is gelyk oan TYPE_SCROLL_INSENSITIVE, it ferskil is as immen de gegevens bywurket neidat de SQL Query de gegevens weromjûn hat, wylst it iterearjen fan de wizigingen yn 'e dataset reflektearret.
ResultSet Concurrency
Der binne 2 modus fan Concurrency yn ResultSet. Se binne:
- ResultSet.CONCUR_READ_ONLY: It is de standert gearfallende modus. Wy kinne allinich de gegevens lêze yn 'e ResultSet. Fernijing is net fan tapassing.
- ResultSet.CONCUR_UPDATABLE: Wy kinne de gegevens yn it ResultSet-objekt bywurkje.
Guon databases stypje gjin gearrinmodus foar allegear ResultSet types. Yn dat gefal moatte wy kontrolearje oft se stypje ús winske type en concurrency modus mei help fan stipesResultSetConcurrency() metoade.
Methods In ResultSet Interface
Der binne 4 kategoryen fan ResultSet metoaden. Dit binne:
- Navigaasjemetoaden
- Gettermetoaden
- Settermetoaden
- Diverse metoaden
Earst sille wy de navigaasjemetoaden beprate en dan sille wy fierder gean.
#1) Navigaasjemetoaden
Dizze metoade wurdt brûkt om de rinnerke om de dataset te bewegen.
- Boolean absolute(int row): It wurdt brûkt om de rinnerke te ferpleatsen nei de oantsjutte rige dy't yn 'e parameter neamd wurdt en wier weromkomt as de operaasje suksesfol is, oars werom falsk.
- UidafterLast(): It makket dat de ResultSet-oanwizer nei de lêste rige ferpleatst.
- Void beforeFirst(): It makket dat de ResultSet-oanwizer foar de earste rige ferpleatst.
- Boolean first(): It makket de ResultSet rinnerke nei de earste rige. It jout Wier as de operaasje suksesfol is oars False.
- Boolean last(): It makket de ResultSet-oanwizer om nei de lêste rige te gean. It jout Wier as de operaasje suksesfol is oars False.
- Boolean next(): It makket de ResultSet-oanwizer om nei de folgjende rige te gean. It jout Wier as der mear records binne en False as der gjin records mear binne.
- Boolean foarige(): It makket de ResultSet-oanwizer om nei de foarige rige te gean. It jout Wier as de operaasje suksesfol is oars False.
- Boolean relative(): It ferpleatst de rinnerke nei it opjûne oantal rigen yn 'e foar- of efterút rjochting.
- Int getRow(): It jout it hjoeddeistige rigenûmer werom dat it ResultSet-objekt no wiist.
- Void moveToCurrentRow(): It ferpleatst de rinnerke werom nei de aktuele rige as it op it stuit yn ynfoegje rige is.
- Void moveToInsertRow(): It ferpleatst de rinnerke nei de spesifike rige om de rige yn de Databank yn te foegjen. It ûnthâldt de hjoeddeistige rinnerke lokaasje. Sa kinne wy de metoade moveToCurrentRow() brûke om de rinnerke nei de aktuele rige te ferpleatsen nei it ynfoegjen.
Yn dizze tutorial,alle programma's binne skreaun yn Java. Wy hawwe Java 8 ferzje en Oracle DB brûkt.
>>Jo kinne de Oracle-software hjirwei downloade
>>Jo kinne hjirwei de Java-ferzje 8 downloade
It hat it stap-foar-stapke Java-ynstallaasjeproses.
JDBC ResultSet Foarbyld Program:(Mei helping navigation methods)
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(); } } }
OUTPUT:
Data in Employee_details table
Utlis:
Yn it boppesteande programma hawwe wy de earste(), lêste(), beforeFirst(), afterLast(), next( ymplementearre) ), previous(), absolute(), relative() en getRow() metoaden yn ResultSet. Om dizze metoaden te brûken sette wy ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE wearden yn 'e prepareStatement metoade.
Dêrnei sille wy beprate wat de Getter-metoaden binne yn ResultSet:
#2) Getter-metoaden
ResultSet hat de gegevens fan 'e tabel út' e databank opslein. Gettermetoaden wurde brûkt om de wearden fan 'e tabel yn ResultSet te krijen. Dêrfoar moatte wy beide kolom Yndekswearde of Kolumnamme trochjaan.
De folgjende binne de gettermetoaden yn ResultSet:
- int getInt (int ColumnIndex): It wurdt brûkt om de wearde fan de opjûne kolom Index te krijen as in int gegevenstype.
- float getFloat(int ColumnIndex): It wurdt brûkt om te krijen de wearde fan de oantsjutte kolom Index as floatgegevenstype.
- java.sql.dategetDate(int ColumnIndex): It wurdt brûkt om de wearde fan de opjûne kolom Index as datumwearde te krijen.
- int getInt(String ColumnName): It wurdt brûkt om te krijen de wearde fan de oantsjutte kolom as in int gegevenstype.
- float getFloat(String ColumnName): It wurdt brûkt om de wearde fan de opjûne kolom as in floatgegevenstype te krijen.
- Java.sql.date getDate(String ColumnName): It wurdt brûkt om de wearde fan de opjûne kolom as datumwearde te krijen.
Der binne gettermetoaden foar alle primitive gegevens typen (Boolean, lang, dûbele) en String ek yn ResultSet ynterface. Wy kinne ek in array en binêr type gegevens krije fan 'e databank. It hat dêr ek metoaden foar.
#3) Setter/Updater-metoaden
Wy kinne de wearde yn 'e databank bywurkje mei ResultSet Updater-metoaden. It is gelyk oan Getter-metoaden, mar hjir moatte wy de wearden/gegevens foar de bepaalde kolom trochjaan om te aktualisearjen yn de Database.
De folgjende binne de fernijermetoaden yn ResultSet:
- void updateInt(int ColumnIndex, int Value): It wurdt brûkt om de wearde fan de oantsjutte kolom Index te aktualisearjen mei in int wearde.
- void updateFloat(int ColumnIndex, float f): It wurdt brûkt om de wearde fan de opjûne kolom Index te aktualisearjen mei de floatwearde.
- void updateDate(int ColumnIndex, Datum d): It wurdt brûkt om de wearde fan de oantsjutte kolom Index te aktualisearjenmei de datumwearde.
- void updateInt(String ColumnName, int Value): It wurdt brûkt om de wearde fan de opjûne kolom te aktualisearjen mei de opjûne int-wearde.
- void updateFloat(String ColumnName, float f): It wurdt brûkt om de wearde fan de opjûne kolom te aktualisearjen mei de opjûne floatwearde.
- Java.sql.date getDate(String ColumnName): It wurdt brûkt om de wearde fan de opjûne kolom te aktualisearjen mei de opjûne datumwearde.
Der binne Updater-metoaden foar alle primitive gegevenstypen (Boolean, lang, dûbel) en String ek yn ResultSet ynterface.
Updatermetoaden fernije gewoan de gegevens yn it ResultSet-objekt. Wearden wurde bywurke yn DB nei it oanroppen fan de metoade insertRow of updateRow.
In rige bywurkje:
Wy kinne de gegevens op in rige bywurkje troch updateX() metoaden oan te roppen , trochjaan fan de kolomnamme of yndeks, en wearden om te aktualisearjen. Wy kinne elk gegevenstype brûke yn plak fan X yn 'e updateX-metoade. Oant no hawwe wy de gegevens bywurke yn it ResultSet-objekt. Om de gegevens yn DB te aktualisearjen, moatte wy de metoade updateRow() neame.
In rige ynfoegje:
Wy moatte moveToInsertRow() brûke om de rinnerke te ferpleatsen om in nije rige yn te foegjen. Wy hawwe dit al behannele yn 'e seksje Navigaasjemetoaden. Folgjende, wy moatte neame updateX () metoade te foegjen de gegevens oan de rige. Wy moatte gegevens leverje foar alle kolommen, oars sil it de standertwearde fan dat bepaalde brûkecolumn.
Nei it bywurkjen fan de gegevens moatte wy de metoade insertRow() neame. Brûk dan de moveToCurrentRow() metoade, om de rinnerkeposysje werom te nimmen nei de rige wêryn wy wiene foardat wy begûnen mei it ynfoegjen fan in nije rige.
ResultSet Foarbyld:
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(); } } }
OUTPUT:
Utlis:
Yn it boppesteande programma is wat wy dien hawwe earst, wy bewarre de gegevens fan 'e Employee_details-tabel yn it ResultSet-objekt mei de SELECT-fraach. Dan hawwe wy de gegevens fan 'e lêste rige yn' e tabel werknemer_details werjûn mei de lêste () metoade fan ResultSet. moveToInsertRow() metoade makket it rinnerke om de aktuele rige te wizen, no is de aktuele rige de lêste rige.
updateXXX()metoaden brûkt om de wearden te aktualisearjen nei de rige en insertRow() metoade hat de gegevens ynfoege yn in nije rige. Mei help fan absolute () metoade, wy makken de rinnerke te wizen op de 5e rige. UpdateInt () metoade is brûkt om it EMPNUM te aktualisearjen mei in nije id fan 'e 5e meiwurker yn' e tabel. Dêrnei, werjûn de gegevens om te kontrolearjen oft de EMPNUM is bywurke of net.
Make de rinnerke te wizen op de lêste rige fan de tabel mei help fan last() en werjûn. Om de boppesteande logika út te fieren, moatte wy ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE wearden ynstelle yn 'e prepareStatement metoade.
#4) Miscellaneous Methods
- void close(): It wurdt brûkt om de ResultSet-eksimplaar te sluten en deboarnen ferbûn mei ResultSet-eksimplaar.
- ResultSetMetaData getMetaData(): It jout de ResultSetMetaData-ynstân werom. It hat de ynformaasje oer it type en eigendom fan kolommen fan 'e query-útfier. Wy sille mear leare oer ResultSetMetaData yn de folgjende paragraaf.
ResultSetMetaData
Wat is Metadata?
Metadata betsjut gegevens oer gegevens. Mei dizze ynterface sille wy mear ynformaasje krije oer ResultSet. It is beskikber yn it java.sql-pakket. Elk ResultSet-objekt is ferbûn mei ien ResultSetMetaData-objekt.
Dit objekt sil de details hawwe fan 'e eigenskippen fan 'e kolommen lykas datatype fan 'e kolom, kolomnamme, oantal kolommen, tabelnamme, skemanamme, ensfh., Wy kinne it ResultSetMetaData-objekt krije mei de getMetaData()-metoade fan ResultSet.
Syntaksis fan de ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Wichtige metoaden fan ResultSetMetaData-ynterface:
Metoadenamme | Beskriuwing |
---|---|
String getColumnName(int column) | It jout de kolomnamme fan 'e bepaalde kolom |
String getColumnTypeName(int column) | It jout it datatype fan de bepaalde kolom dy't wy as parameter trochjûn hawwe |
String getTableName(int column) | It jout de tabelnamme fan 'e kolom |
String getSchemaName(int column) | It |