JDBC ResultSet: Hvernig á að nota Java ResultSet til að sækja gögn

Þessi einkatími útskýrir hvernig á að nota JDBC ResultSet til að sækja gögn. Við munum einnig læra um ResultSetMetaData og DatabaseMetaData viðmót með dæmum:

Í JDBC DriverManager kennslunni í JDBC kennsluröðinni lærðum við hvernig á að nota JDBC DriverManager og aðferðir hans, JDBC PreparedStatement í Java forritum.

Í þessari kennslu munum við ræða viðmótin sem eftir eru í JDBC. Við höfum fjallað um viðmót Statement, PreparedStatement og CallableStatement í fyrri námskeiðum okkar.

Hér munum við læra um JDBC ResultSet, ResultSetMetaData og DatabaseMetaData tengi, aðferðir þeirra og hvernig á að nota aðferðirnar í Java forritinu.

JDBC ResultSet viðmót

ResultSet tengi er til staðar í java.sql pakkanum. Það er notað til að geyma gögnin sem eru skilað úr gagnagrunnstöflunni eftir að SQL staðhæfingarnar eru keyrðar í Java forritinu. Hlutur ResultSet heldur bendilinn við niðurstöðugögnin. Sjálfgefið er að bendillinn er á undan fyrstu röð niðurstöðugagnanna.

Next() aðferðin er notuð til að færa bendilinn í næstu stöðu í áttina áfram. Það mun skila FALSE ef það eru ekki fleiri færslur. Það sækir gögn með því að kalla executeQuery() aðferðina með því að nota einhvern af yfirlýsingahlutunum. Það getur verið Statement eða PreparedStatement eða CallableStatement hlutur. Undirbúið yfirlýsing, ogskilar skemaheiti töflu dálksins int getColumnCount() Það skilar fjölda dálka í ResultSet boolean isAutoIncrement(int Column) Það skilar satt ef tiltekinn dálkur er Auto Increment, annars ósatt boolean isCaseSensitive(int Column) Það skilar satt ef tiltekinn dálkur er hástafaviðkvæmur, annars ósatt

ResultSetMetaData Dæmi

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:

Skýring:

Í ofangreindu forriti, við höfum innleitt getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() og getSchemaName() aðferðir í ResultSetMetaData viðmótinu.

DatabaseMetaData

DatabaseMetaData viðmótið gefur upplýsingar um gagnagrunninn eins og DatabaseName, Database version, og svo framvegis.

Mikilvægar aðferðir við DatabaseMetaData viðmót:

Aðferðarnafn Lýsing
String getDriverName() Það mun skila nafni JDBC rekilsins sem við erum að nota í Java forritinu okkar
String getDriverVersion() Það skilar útgáfunúmeri JDBC drivers
String getUserName() Það skilar notandanafni gagnagrunnsins sem við erum að nota
String getDatabaseProductName() Það skilar nafn gagnagrunnsins sem við erumusing
String getDatabaseProductVersion() Það skilar útgáfunúmeri gagnagrunnsins sem við erum að nota
ResultSet getSchemas() Það skilar nöfnum skemanna sem eru tiltækar í tengda gagnagrunninum
String getStringFunctions() Það skilar lista yfir strengjaaðgerðir sem eru tiltækar í tengda gagnagrunninum
String getTimeDateFunctions() It skilar lista yfir tíma- og dagsetningaraðgerðir sem eru tiltækar í tengda gagnagrunninum
String getURL() Það skilar slóðinni fyrir gagnagrunninn
Boolean isReadOnly() Það skilar hvort gagnagrunnurinn sé í skrifvarandi ham
Boolean supportsBatchUpdates() Það skilar hvort gagnagrunnurinn styður hópuppfærslur
Boolean supportsSavepoints() Það skilar hvort gagnagrunnurinn styður Savepoints
Boolean supportsStatementPooling() Það skilar hvort gagnagrunnurinn styður Statement Pooling
Boolean supportsStoredProcedures() Það skilar hvort gagnagrunnurinn styður Stored procedures
Boolean supportsOuterJoins() Það skilar hvort gagnagrunnurinn styður Outer Join

Hér höfum við skráð nokkrar mikilvægar aðferðir við DatabaseMetaData viðmótið. Þú getur vísað tilopinber síða Oracle þar sem þú getur séð allar aðferðir sem eru tiltækar í DatabaseMetaData viðmótinu.

DatabaseMetaData Dæmi:

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:

Skýring:

Í ofangreindu forriti höfum við notað/útfært getDriverName(), getDriverVersion() , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), styðurBatchUpdates(), styður StatementPooling(), styðurSavepoints(), styðurStoredProcedures() DatabaseMetaData Interface.

Að benda á:

  • JDBC ResultSet tengi er notað til að geyma gögnin úr gagnagrunninum og nota þau í Java forritinu okkar.
  • Við getum líka notað ResultSet til að uppfæra gögnin með því að nota updateXXX() aðferðir.
  • ResultSet hlutur bendir bendilinn á undan fyrstu línu niðurstöðugagnanna. Með því að nota next() aðferðina, getum við endurtekið í gegnum ResultSet.
  • Við höfum leiðsöguaðferðir ResultSet til að fara lengra í ResultSet hlutnum
  • ResultMetaData er notað til að fá frekari upplýsingar um ResultSet eins og heiti dálks, fjöldi dálka, gagnagerð dálksins o.s.frv.
  • DatabaseMetData er notað til að fá upplýsingar um gagnagrunninn sem við höfum tengt við

Algengar spurningar

Sp. #1) Hver er tilgangurinn meðResultSet?

Svar: ResultSet er notað til að geyma og sækja gögnin úr DB. Þegar executeQuery() aðferðin hefur verið keyrð mun hún skila ResultSet hlut. Við getum notað þann ResultSet hlut í forritinu okkar til að framkvæma rökfræðina.

Q #2) Hvernig á að athuga hvort ResultSet sé tómt eða ekki?

Svar: Það eru engar fyrirfram skilgreindar aðferðir eins og lengd(), stærð() tiltækar til að athuga IsResultSet Empty. Við getum notað next() aðferðina til að endurtaka og ef hún skilar True, þá er hún ekki tóm, ef hún skilar False þýðir ResultSet að ResultSet sé tómt.

Q #3) Er mögulegt að ResultSet gæti verið núll?

Svar: Nei, executeQuery() aðferðin skilar ResultSet hlutnum sem gæti aldrei verið núll.

Q #4) Hvað er uppfæranlegt ResultSet?

Svar: Uppfæranlegur ResultSet hlutur er notaður til að uppfæra gögnin í dálknum, setja inn gögn í dálka og eyða línum. Til að gera ResultSet sem uppfæranlegt, þurfum við að gera scroll gerð eins viðkvæma eða óviðkvæma og CONCUR gerð sem uppfæranlega.

ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.

Q #5) Hvernig á að fá nafn gagnagrunnsins sem hefur verið tengt?

Svar: Við getum notað getDatabaseProductName() aðferðina fyrir DatabaseMetaData hlut.

Niðurstaða

Í þessari kennslu höfum við rætt hvað eru ResultSet, ResultSetMetaData og DatabaseMetaData viðmótin og mikilvægar aðferðir þeirra sem almennt eru notaðar í JDBC forritunum. Við höfum líka séðhvernig á að uppfæra gögn í DB með ResultSet. ResultSetMetadata innihalda upplýsingar um ResultSet eins og Column Name, Column count, og svo framvegis.

DatabaseMetaData inniheldur upplýsingar um gagnagrunn.

>

CallableStatement tengi eru undirviðmót Statement viðmótsins.

Statement tengi

Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);

PreparedStatement tengi

PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);

Við getum notaðu getX() aðferðina til að fá gögn dálkanna á meðan þú endurtekur niðurstöðurnar þar sem X – er gagnagerð dálksins. Við getum notað annað hvort dálknöfn eða vísitölu til að fá gildin með getX() aðferðum.

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); } 

Við getum líka nefnt vísitölu dálksins í stað dálknafns í getX() aðferðunum.

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

Sjálfgefið er að við getum endurtekið gögnin/gildin í ResultSet sem hafa skilað sér sem úttak af keyrðu SQL setningunni í áframhaldandi átt. Við getum endurtekið gildin í aðrar áttir með því að nota Scrollable ResultSet. Við getum tilgreint gerð og samhliða ResultSet á meðan búið er til Statement, PreparedStatement og CallableStatement hluti.

Það eru 3 tegundir í ResultSet. Þau eru:

  1. TYPE_FORWARD_ONLY: Það er sjálfgefinn valkostur, þar sem bendillinn færist frá upphafi til enda, þ.e.a.s. fram á við.
  2. TYPE_SCROLL_INSENSITIVE: Í þessari gerð mun það láta bendilinn færast bæði fram og aftur. Ef við gerum einhverjar breytingar á gögnunum á meðan við endurtekjum vistuð gögn mun það ekki uppfærast í gagnapakkanum ef einhver breytir gögnunum í DB. Vegna þess að gagnasafnið hefur gögnin frá því að SQL fyrirspurnin skilarGögn.
  3. TYPE_SCROLL_SENSITIVE: Það er svipað og TYPE_SCROLL_INSENSITIVE, munurinn er ef einhver uppfærir gögnin eftir að SQL Query hefur skilað gögnunum, á meðan endurtekning á þeim mun endurspegla breytingarnar á gagnasafninu.

ResultSet Concurrency

Það eru 2 samhliða stillingar í ResultSet. Þau eru:

  1. ResultSet.CONCUR_READ_ONLY: Það er sjálfgefin samhliðastilling. Við getum aðeins lesið gögnin í ResultSet. Uppfærsla á ekki við.
  2. ResultSet.CONCUR_UPDATABLE: Við getum uppfært gögnin í ResultSet hlutnum.

Sumir gagnagrunnar styðja ekki samhliðastillingu fyrir alla ResultSet tegundir. Í því tilviki þurfum við að athuga hvort þeir styðji æskilega gerð okkar og samtímaham með því að nota supportsResultSetConcurrency() aðferðina.

Aðferðir í ResultSet Interface

Það eru 4 flokkar af ResultSet aðferðum. Þær eru:

  1. Leiðsöguaðferðir
  2. Getter aðferðir
  3. Setrar aðferðir
  4. Ýmsar aðferðir

Fyrst munum við ræða leiðsöguaðferðirnar og síðan verður farið lengra.

#1) leiðsöguaðferðir

Þessi aðferð er notuð til að færa bendilinn um gagnasafnið.

  • Boolean absolute(int row): Það er notað til að færa bendilinn í tilgreinda röð sem er nefnd í færibreytunni og skila satt ef aðgerðin heppnast annars skilar false.
  • ÓgiltafterLast(): Það fær ResultSet bendilinn til að færa sig á eftir síðustu línu.
  • Void beforeFirst(): Það gerir ResultSet bendilinn til að færa sig á undan fyrstu línu.
  • Boolean first(): Það fær ResultSet bendilinn til að fara í fyrstu röðina. Það skilar True ef aðgerðin heppnast annars False.
  • Boolean last(): Það fær ResultSet bendilinn til að fara í síðustu línu. Það skilar True ef aðgerðin heppnast annars False.
  • Boolean next(): Það fær ResultSet bendilinn til að fara í næstu línu. Það skilar True ef það eru fleiri færslur og False ef það eru ekki fleiri færslur.
  • Boolean fyrri(): Það fær ResultSet bendilinn til að fara í fyrri línu. Það skilar True ef aðgerðin heppnast annars False.
  • Boolean relative(): Það færir bendilinn á tiltekinn fjölda raða annað hvort áfram eða afturábak.
  • Int getRow(): Það skilar núverandi línunúmeri sem ResultSet hluturinn bendir núna.
  • Void moveToCurrentRow(): Það færir bendilinn aftur á núverandi röð ef hún er í insert row.
  • Void moveToInsertRow(): Það færir bendilinn á tiltekna línu til að setja línuna inn í gagnagrunninn. Það man núverandi staðsetningu bendilsins. Þannig að við getum notað moveToCurrentRow() aðferðina til að færa bendilinn í núverandi röð eftir innsetninguna.

Í þessari kennslu,öll forrit eru skrifuð í Java. Við höfum notað Java 8 útgáfu og Oracle DB.

>>Þú getur halað niður Oracle hugbúnaðinum héðan

>>Þú getur halað niður Java útgáfu 8 héðan

Hún hefur skref-fyrir-skref Java uppsetningarferlið.

JDBC ResultSet Dæmi um forrit:(Með leiðsöguaðferðum)

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(); } } }

ÚTTAKA:

Gögn í töflu starfsmannaupplýsinga

Skýring:

Í ofangreindu forriti höfum við innleitt first(), last(), beforeFirst(), afterLast(), next( ), fyrri(), absolute(), relative() og getRow() aðferðir í ResultSet. Til að nota þessar aðferðir setjum við ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE gildi í prepareStatement aðferðinni.

Næst munum við ræða hvað eru Getter aðferðirnar í ResultSet:

#2) Getter Methods

ResultSet hefur geymt gögn töflunnar úr gagnagrunninum. Getter aðferðir eru notaðar til að fá gildi töflunnar í ResultSet. Til þess þurfum við að fara framhjá annaðhvort dálki Index gildi eða Column Name.

Eftirfarandi eru getter aðferðir í ResultSet:

  • int getInt (int ColumnIndex): Það er notað til að fá gildi tilgreinds dálks Index sem int gagnategund.
  • float getFloat(int ColumnIndex): Það er notað til að fá gildi tilgreinds dálks Index sem flotgagnategund.
  • java.sql.dategetDate(int ColumnIndex): Það er notað til að fá gildi tilgreinds dálks Index sem dagsetningargildi.
  • int getInt(String ColumnName): Það er notað til að fá gildi tilgreinds dálks sem int gagnategundar.
  • float getFloat(String ColumnName): Það er notað til að fá gildi tilgreinds dálks sem flotgagnategundar.
  • Java.sql.date getDate(String ColumnName): Það er notað til að fá gildi tilgreinds dálks sem dagsetningargildi.

Það eru getter aðferðir fyrir allar frumstæðar gagnagerðir (Boolean, long, double) og String einnig í ResultSet viðmóti. Við getum fengið fylki og tvöfalda gerð gagna einnig úr gagnagrunninum. Það hefur líka aðferðir fyrir það.

#3) Setter/Updater-aðferðir

Við getum uppfært gildið í gagnagrunninum með því að nota ResultSet Updater aðferðir. Það er svipað og Getter aðferðir, en hér þurfum við að senda gildin/gögnin fyrir tiltekinn dálk til að uppfæra í gagnagrunninum.

Eftirfarandi eru uppfærsluaðferðirnar í ResultSet:

  • void updateInt(int ColumnIndex, int Value): Það er notað til að uppfæra gildi tilgreinds dálks Index með int gildi.
  • void updateFloat(int ColumnIndex, float f): Það er notað til að uppfæra gildi tilgreinds dálks Index með flotgildinu.
  • void updateDate(int ColumnIndex, Date d): Það er notað til að uppfæra gildi tilgreinds dálks Indexmeð dagsetningargildinu.
  • void updateInt(String ColumnName, int Value): Það er notað til að uppfæra gildi tilgreinds dálks með uppgefnu int gildi.
  • void updateFloat(String ColumnName, float f): Það er notað til að uppfæra gildi tilgreinds dálks með uppgefnu flotgildi.
  • Java.sql.date getDate(String ColumnName): Það er notað til að uppfæra gildi tilgreinds dálks með uppgefnu dagsetningargildi.

Það eru uppfærsluaðferðir fyrir allar frumstæðar gagnagerðir (Boolean, long, double) og String einnig í ResultSet viðmótinu.

Uppfærsluaðferðir uppfæra bara gögnin í ResultSet hlutnum. Gildin verða uppfærð í DB eftir að hafa kallað á insertRow eða updateRow aðferðina.

Uppfærsla á röð:

Við getum uppfært gögnin í röð með því að kalla updateX() aðferðir , sendir dálknafnið eða vísitöluna og gildi til að uppfæra. Við getum notað hvaða gagnategund sem er í stað X í updateX aðferðinni. Hingað til höfum við uppfært gögnin í ResultSet hlutnum. Til að uppfæra gögnin í DB verðum við að kalla updateRow() aðferðina.

Inserting a Row:

Við þurfum að nota moveToInsertRow() til að færa bendilinn til að setja inn nýja línu. Við höfum þegar fjallað um þetta í kaflanum Leiðsöguaðferðir. Næst þurfum við að kalla updateX() aðferðina til að bæta gögnunum við röðina. Við ættum að veita gögn fyrir alla dálka, annars mun það nota sjálfgefið gildi þess tilteknadálki.

Eftir að hafa uppfært gögnin þurfum við að kalla á insertRow() aðferðina. Notaðu síðan moveToCurrentRow() aðferðina til að taka bendilinn aftur í röðina sem við vorum í áður en við byrjuðum að setja inn nýja línu.

ResultSet Dæmi:

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(); } } }

ÚTTAKA:

Skýring:

Í ofangreindu forriti er það sem við höfum gert fyrst, við geymdum gögnin í Employee_details töflunni í ResultSet hlutnum með því að nota SELECT fyrirspurnina. Síðan sýndum við gögn síðustu línunnar í starfsmanna_details töflunni með því að nota last() aðferðina í ResultSet. moveToInsertRow() aðferðin lætur bendilinn benda á núverandi línu, nú er núverandi röð síðasta röðin.

updateXXX()aðferðir sem notaðar eru til að uppfæra gildin í röðina og insertRow() aðferðin hefur sett gögnin inn í ný röð. Með því að nota absolute() aðferðina létum við bendilinn benda á 5. röðina. UpdateInt() aðferðin hefur verið notuð til að uppfæra EMPNUM með nýju auðkenni 5. starfsmanns í töflunni. Eftir það sýndi gögnin til að athuga hvort EMPNUM er uppfært eða ekki.

Láttu bendilinn benda á síðustu röð töflunnar með last() og sýndi hann. Til að framkvæma ofangreinda rökfræði þurfum við að stilla ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE gildi í prepareStatement aðferðinni.

#4) Ýmsar aðferðir

  • void close(): Það er notað til að loka ResultSet dæminu og losa umauðlindir sem tengjast ResultSet tilviki.
  • ResultSetMetaData getMetaData(): Það skilar ResultSetMetaData tilvikinu. Það hefur upplýsingar um gerð og eiginleika dálka í fyrirspurnarúttakinu. Við munum læra meira um ResultSetMetaData í næsta kafla.

ResultSetMetaData

Hvað eru lýsigögn?

Lýsigögn þýðir gögn um gögn. Með því að nota þetta viðmót munum við fá frekari upplýsingar um ResultSet. Það er fáanlegt í java.sql pakkanum. Sérhver ResultSet hlutur er tengdur einum ResultSetMetaData hlut.

Þessi hlutur mun hafa upplýsingar um eiginleika dálkanna eins og gagnagerð dálksins, dálknafn, fjölda dálka, töfluheiti, skemaheiti o.s.frv., Við getum fengið ResultSetMetaData hlutinn með því að nota getMetaData() aðferðina í ResultSet.

Syntax á ResultSetMetaData:

PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();

Mikilvægar aðferðir við ResultSetMetaData viðmót:

Aðferðarnafn Lýsing
Strengur getColumnName(int dálkur) Það skilar dálkinafni tiltekins dálks
String getColumnTypeName(int dálkur) Það skilar gagnagerð tiltekinn dálkur sem við höfum sent sem færibreytu
String getTableName(int column) Það skilar töfluheiti dálksins
String getSchemaName(int dálkur) It
Skruna á topp