Mae'r tiwtorial hwn yn esbonio sut i ddefnyddio JDBC ResultSet i adfer data. Byddwn hefyd yn dysgu am ryngwynebau ResultSetMetaData a DatabaseMetaData gydag enghreifftiau:
Yn y tiwtorial JDBC DriverManager o gyfres diwtorial JDBC , dysgon ni sut i ddefnyddio JDBC DriverManager a'i ddulliau, JDBC PreparedStatement mewn cymwysiadau Java.
Yn y tiwtorial hwn, byddwn yn trafod gweddill y rhyngwynebau yn JDBC. Rydym wedi ymdrin â rhyngwynebau Datganiad, Datganiad Parod, a Datganiad Callable yn ein tiwtorialau blaenorol.
Yma, byddwn yn dysgu am ryngwynebau JDBC ResultSet, ResultSetMetaData, a DatabaseMetaData, eu dulliau a sut i ddefnyddio'r dulliau yn rhaglen Java.3
JDBC ResultSet Interface
Mae Rhyngwyneb ResultSet yn bresennol yn y pecyn java.sql. Fe'i defnyddir i storio'r data a ddychwelir o'r tabl cronfa ddata ar ôl gweithredu'r datganiadau SQL yn y Rhaglen Java. Mae gwrthrych ResultSet yn cadw pwynt cyrchwr yn y data canlyniad. Yn rhagosodedig, mae'r cyrchwr yn gosod cyn rhes gyntaf y data canlyniad.
Defnyddir y dull nesaf() i symud y cyrchwr i'r safle nesaf mewn cyfeiriad ymlaen. Bydd yn dychwelyd ANGHYWIR os nad oes mwy o gofnodion. Mae'n adfer data trwy ffonio'r dull executeQuery() gan ddefnyddio unrhyw un o'r gwrthrychau datganiad. Gall fod yn wrthrych Datganiad neu Ddatganiad Parod neu Ddatganiad Callable. Datganiad Parod, ayn dychwelyd enw sgema tabl y golofn
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)); } } }
ALLBWN:
> Esboniad: Yn y rhaglen uchod, rydym wedi gweithredu dulliau getColumnCount(), getColumnName(), getColumnTypeName(), getTableName() a getSchemaName() yn y rhyngwyneb ResultSetMetaData.
DatabaseMetaData
Mae rhyngwyneb DatabaseMetaData yn rhoi gwybodaeth am y Gronfa Ddata megis Name
Yma, fe wnaethom restru rhai dulliau pwysig o ryngwyneb DatabaseMetaData. Gallwch gyfeirio at ysafle swyddogol yr Oracle lle gallwch weld yr holl ddulliau sydd ar gael yn y rhyngwyneb DatabaseMetaData.
Cronfa DdataMetaData Enghraifft:
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()); } }
ALLBWN:
Eglurhad:
Yn y rhaglen uchod, rydym wedi defnyddio/ gweithredu'r getDriverName(), getDriverVersion() , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), yn cefnogiBatchUpdates(), yn cefnogiStatementPooling(), yn cefnogiSavepoints(), yn cefnogi StoredProcedures(Joins) ac yn cefnogi dulliauStored(Joins) Rhyngwyneb DatabaseMetaData.
Pwyntiau i'w nodi:
- Defnyddir rhyngwyneb ResultSet JDBC i storio'r data o'r gronfa ddata a'i ddefnyddio yn ein Rhaglen Java.
- Gallwn hefyd ddefnyddio ResultSet i ddiweddaru'r data gan ddefnyddio dulliau updateXXX().
- Mae gwrthrych Set Result yn pwyntio'r cyrchwr cyn rhes gyntaf data'r canlyniad. Gan ddefnyddio'r dull next(), gallwn ailadrodd drwy'r ResultSet.
- Mae gennym ddulliau llywio o ResultSet i symud ymhellach yn y gwrthrych ResultSet
- Defnyddir CanlyniadMetaData i gael mwy o wybodaeth am y ResultSet like enw'r golofn, nifer y colofnau, math data'r golofn, ac ati.
- Defnyddir DatabaseMetData i gael y wybodaeth am y gronfa ddata rydym wedi'i chysylltu
Cwestiynau a Ofynnir yn Aml
C #1) Beth yw'r defnydd oResultSet?
Ateb: Defnyddir ResultSet i storio ac adalw data o DB. Pan fydd dull executeQuery() wedi gweithredu, bydd yn dychwelyd gwrthrych ResultSet. Gallwn ddefnyddio'r gwrthrych ResultSet hwnnw yn ein rhaglen i berfformio'r rhesymeg.
C #2) Sut i wirio a yw'r ResultSet yn wag ai peidio?
Ateb: Nid oes unrhyw ddulliau rhagddiffiniedig fel hyd (), maint () ar gael i wirio'r IsResultSet Empty. Gallwn ddefnyddio'r dull nesaf() i ailadrodd ac os yw'n dychwelyd Gwir, yna nid yw'n wag, os bydd yn dychwelyd Mae Gau yn golygu bod y ResultSet yn wag.
C #3) A yw'n bosibl bod ResultSet gall fod yn null?
Ateb: Na, mae'r dull executeQuery() yn dychwelyd y gwrthrych ResultSet na all byth fod yn null.
C #4) Beth yw ResultSet y gellir ei ddiweddaru?
Ateb: Defnyddir gwrthrych ResultSet y gellir ei ddiweddaru i ddiweddaru'r data yn y golofn, mewnosod data mewn colofnau a dileu rhesi. I wneud ResultSet yn un y gellir ei ddiweddaru, mae angen i ni wneud y math sgrolio mor sensitif neu ansensitif a'r math CONCUR yn un y gellir ei ddiweddaru.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
C #5) Sut i gael enw'r Gronfa Ddata sydd wedi'i gysylltu?
Ateb: Gallwn ddefnyddio dull getDatabaseProductName() o wrthrych DatabaseMetaData.
Casgliad
Yn y tiwtorial hwn, rydym wedi trafod beth yw y rhyngwynebau ResultSet, ResultSetMetaData, a DatabaseMetaData a'u dulliau pwysig a ddefnyddir yn gyffredin yn rhaglenni JDBC. Rydym hefyd wedi gweldsut i ddiweddaru data yn DB gan ddefnyddio ResultSet. Mae ResultSetMetadata yn cynnwys gwybodaeth am ResultSet megis Enw Colofn, cyfrif Colofn, ac ati.
Mae DatabaseMetaData yn cynnwys gwybodaeth Cronfa Ddata.
Rhyngwyneb Datganiad
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Rhyngwyneb Datganiad Parod
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Gallwn defnyddio dull getX() i gael data'r colofnau wrth ailadrodd trwy'r canlyniadau lle X - yw math data'r golofn. Gallwn ddefnyddio naill ai Enwau Colofn neu Fynegai i gael y gwerthoedd gan ddefnyddio dulliau getX().
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); }
Gallwn hefyd grybwyll rhif mynegai'r Golofn yn lle Enw Colofn yn y dulliau getX().
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); }
Mathau o ResultSet
Yn ddiofyn, gallwn ailadrodd y data/gwerthoedd yn ResultSet sydd wedi dychwelyd fel allbwn o'r datganiad SQL a weithredwyd i'r cyfeiriad ymlaen. Gallwn ailadrodd y gwerthoedd i gyfeiriadau eraill gan ddefnyddio Scrollable ResultSet. Gallwn nodi math a chyfredrededd ResultSet wrth greu gwrthrychau Datganiad, Datganiad Parod, a Datganiad Callable.
Mae 3 math yn ResultSet. Y rhain yw:
- > TYPE_FORWARD_ONLY: Dyma'r dewis diofyn, lle mae'r cyrchwr yn symud o'r dechrau i'r diwedd h.y. i'r cyfeiriad ymlaen.
- TYPE_SCROLL_INSENSITIVE: Yn y math hwn, bydd yn gwneud i'r cyrchwr symud i gyfeiriadau ymlaen ac yn ôl. Os byddwn yn gwneud unrhyw newidiadau yn y data wrth ailadrodd y data sydd wedi'i storio ni fydd yn diweddaru yn y set ddata os bydd unrhyw un yn newid y data yn DB. Oherwydd bod gan y set ddata ddata o'r amser y mae'r ymholiad SQL yn dychwelyd yData.
- TYPE_SCROLL_SENSITIVE: Mae'n debyg i TYPE_SCROLL_INSENSITIVE, y gwahaniaeth yw os bydd unrhyw un yn diweddaru'r data ar ôl i'r Ymholiad SQL ddychwelyd y data, tra bydd ei ailadrodd yn adlewyrchu'r newidiadau i'r set ddata.
ResultSet Concurrency
Mae 2 fodd o Arian cyfred yn ResultSet. Y rhain yw:
- >ResultSet.CONCUR_READ_ONLY: Dyma'r modd arian cyfred rhagosodedig. Gallwn ond darllen y data yn y ResultSet. Nid yw diweddariad yn berthnasol.
- ResultSet.CONCUR_UPDATABLE: Gallwn ddiweddaru'r data yn y gwrthrych ResultSet.
Nid yw rhai cronfeydd data yn cefnogi modd cyd-arian i bawb Mathau o Set Canlyniad. Yn yr achos hwnnw, mae angen i ni wirio a ydynt yn cefnogi'r math a'r modd cyfnewid arian a ddymunir gan ddefnyddio'r dull cefnogiResultSetConcurrency().
Dulliau Mewn Rhyngwyneb ResultSet
Mae 4 categori o ddulliau ResultSet. Sef:
- Dulliau Mordwyo
- Dulliau Cyrchwr
- Dulliau Gosod
- Dulliau Amrywiol
Yn gyntaf, byddwn yn trafod y Dulliau Mordwyo ac yna'n symud ymhellach.
#1) Dulliau Mordwyo
Defnyddir y dull hwn i symud y cyrchwr o amgylch y set ddata.
- Boolean absolute(in row): Fe'i defnyddir i symud y cyrchwr i'r rhes benodedig a grybwyllir yn y paramedr a dychwelyd yn wir os bydd y gweithrediad yn llwyddiannus fel arall dychwelyd ffug.
- GwagafterLast(): Mae'n gwneud i'r cyrchwr ResultSet symud ar ôl y rhes olaf.
- Gwag cynFirst(): Mae'n gwneud i'r cyrchwr ResultSet symud cyn y rhes gyntaf.13
- Boolean yn gyntaf(): Mae'n gwneud i'r cyrchwr ResultSet symud i'r rhes gyntaf. Mae'n dychwelyd Gwir os yw'r gweithrediad yn llwyddiannus arall Anghywir.
- Boolean last(): Mae'n gwneud i'r cyrchwr ResultSet symud i'r rhes olaf. Mae'n dychwelyd Gwir os yw'r gweithrediad yn llwyddiannus arall Anghywir.
- Boolean next(): Mae'n gwneud i'r cyrchwr ResultSet symud i'r rhes nesaf. Mae'n dychwelyd Gwir os oes mwy o gofnodion a Gau os nad oes mwy o gofnodion.
- Boolean previous(): Mae'n gwneud i'r cyrchwr ResultSet symud i'r rhes flaenorol. Mae'n dychwelyd Gwir os yw'r gweithrediad yn llwyddiannus fel arall Anghywir.
- Boolean relative(): Mae'n symud y cyrchwr i'r nifer penodol o resi naill ai yn y cyfeiriad ymlaen neu yn ôl.
- Int getRow(): Mae'n dychwelyd y rhif rhes presennol mae'r gwrthrych ResultSet yn ei bwyntio nawr.
- Void moveToCurrentRow(): Mae'n symud y cyrchwr yn ôl i'r rhes gyfredol os yw yn y rhes mewnosod ar hyn o bryd.
- Void moveToInsertRow(): Mae'n symud y cyrchwr i'r rhes benodol i fewnosod y rhes yn y Gronfa Ddata. Mae'n cofio lleoliad presennol y cyrchwr. Felly gallwn ddefnyddio'r dull moveToCurrentRow() i symud y cyrchwr i'r rhes gyfredol ar ôl ei fewnosod.
Yn y tiwtorial hwn,mae pob rhaglen wedi'i hysgrifennu yn Java. Rydym wedi defnyddio fersiwn Java 8 ac Oracle DB.
>>Gallwch lawrlwytho meddalwedd Oracle oddi yma
17>>>Gallwch lawrlwytho fersiwn Java 8 o'r fan hon
Mae ganddo'r broses gosod Java cam wrth gam.
JDBC ResultSet Rhaglen Enghreifftiol:(Defnyddio dulliau Mordwyo)
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(); } } }
ALLBWN:
Data yn nhabl manylion_gweithiwr
20
Esboniad:
Yn y rhaglen uchod rydym wedi gweithredu'r cyntaf(), olaf(), cynFirst(), afterLast(), next(), ), dulliau blaenorol(), absoliwt(), perthynas() a getRow() yn ResultSet. I ddefnyddio'r dulliau hyn rydym yn gosod gwerthoedd ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE yn y dull paratoi Datganiad.
Nesaf, byddwn yn trafod beth yw'r Dulliau Getter yn ResultSet:
#2) Getter Methods
Mae ResultSet wedi storio data'r tabl o'r Gronfa Ddata. Defnyddir dulliau Getter i gael gwerthoedd y tabl yn ResultSet. Ar gyfer hynny, mae angen i ni basio naill ai gwerth Mynegai colofn neu Enw Colofn.
Dyma'r dulliau getter yn ResultSet:
- int getInt (int ColumnIndex): Fe'i defnyddir i gael gwerth Mynegai'r golofn benodedig fel math o ddata int.
- float getFloat(int ColumnIndex): Fe'i defnyddir i gael gwerth Mynegai'r golofn benodedig fel math o ddata arnofio.
- java.sql.dategetDate(int ColumnIndex): Fe'i defnyddir i gael gwerth Mynegai'r golofn benodedig fel gwerth dyddiad.
- int getInt(Enw Colofn Llinynnol): Fe'i defnyddir i gael gwerth y golofn benodedig fel math data int.
- float getFloat(String ColumnName): Fe'i defnyddir i gael gwerth y golofn benodedig fel math o ddata arnofio.13
- Java.sql.date getDate(String ColumnName): Mae'n cael ei ddefnyddio i gael gwerth y golofn benodedig fel gwerth dyddiad.
Mae yna ddulliau getter ar gyfer pob math o ddata cyntefig (Boolean, hir, dwbl) a Llinynnol hefyd yn rhyngwyneb ResultSet. Gallwn hefyd gael amrywiaeth a math deuaidd o ddata o'r Gronfa Ddata. Mae ganddo ddulliau ar gyfer hynny hefyd.
#3) Dulliau Gosodwr/Diweddarwr
Gallwn ddiweddaru'r gwerth yn y Gronfa Ddata gan ddefnyddio dulliau ResultSet Updater. Mae'n debyg i ddulliau Getter, ond yma mae angen i ni basio'r gwerthoedd/ data ar gyfer y golofn benodol i'w diweddaru yn y Gronfa Ddata.
Dyma'r dulliau diweddaru yn ResultSet:
- void updateInt(int ColumnIndex, int Value): Fe'i defnyddir i ddiweddaru gwerth Mynegai'r golofn benodedig gyda gwerth int.
- gwag updateFloat(int ColofnIndex, fflôt f): Fe'i defnyddir i ddiweddaru gwerth Mynegai'r golofn benodedig gyda'r gwerth arnofio.
- gwag updateDate(int ColumnIndex, Date d): Fe'i defnyddir i ddiweddaru gwerth y Mynegai colofn penodediggyda'r gwerth dyddiad.
- void updateInt(String ColumnName, int Value): Fe'i defnyddir i ddiweddaru gwerth y golofn benodedig gyda'r gwerth int a roddwyd.
- diweddariad gwagFloat(String ColumnName, float f): Fe'i defnyddir i ddiweddaru gwerth y golofn benodedig gyda'r gwerth arnofio a roddwyd.
- Java.sql.date getDate(String Name hefyd yn rhyngwyneb ResultSet.
Mae dulliau diweddaru yn diweddaru'r data yn y gwrthrych ResultSet. Bydd gwerthoedd yn cael eu diweddaru yn DB ar ôl galw'r dull insertRow neu updateRow.
Diweddaru Rhes:
Gallwn ddiweddaru'r data yn olynol drwy ffonio dulliau updateX() , gan basio enw'r golofn neu fynegai, a gwerthoedd i'w diweddaru. Gallwn ddefnyddio unrhyw fath o ddata yn lle X yn y dull updateX. Hyd yn hyn, rydym wedi diweddaru'r data yn y gwrthrych ResultSet. I ddiweddaru'r data yn DB, mae'n rhaid i ni alw'r dull updateRow().
Mewnosod Rhes:
Mae angen i ni ddefnyddio moveToInsertRow() i symud y cyrchwr i fewnosod rhes newydd. Rydym eisoes wedi ymdrin â hyn yn yr adran Dulliau Mordwyo. Nesaf, mae angen i ni alw dull updateX() i ychwanegu'r data at y rhes. Dylem ddarparu data ar gyfer yr holl golofnau eraill y bydd yn defnyddio gwerth rhagosodedig y penodol hwnnwcolofn.
Ar ôl diweddaru'r data, mae angen i ni alw'r dull insertRow(). Yna defnyddiwch y dull moveToCurrentRow(), i fynd â safle'r cyrchwr yn ôl i'r rhes yr oeddem ynddi cyn i ni ddechrau mewnosod rhes newydd.
Enghraifft Set Canlyniad:
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(); } } }
ALLBWN:
Eglurhad:
Yn y rhaglen uchod yr hyn yr ydym wedi ei wneud yw yn gyntaf, fe wnaethom storio data'r tabl Employee_details yn y gwrthrych ResultSet gan ddefnyddio'r ymholiad SELECT. Yna, fe wnaethom arddangos data'r rhes olaf yn y tabl gweithiwr_details gan ddefnyddio'r dull olaf () o ResultSet. Mae dull moveToInsertRow() yn gwneud i'r cyrchwr bwyntio'r rhes gyfredol, nawr y rhes gyfredol yw'r rhes olaf.
diweddaruXXX() dulliau a ddefnyddir i ddiweddaru'r gwerthoedd i'r rhes ac mae dull insertRow() wedi mewnosod y data yn rhes newydd. Gan ddefnyddio dull absoliwt(), gwnaethom y cyrchwr i bwyntio at y 5ed rhes. Mae dull UpdateInt() wedi'i ddefnyddio i ddiweddaru'r EMPNUM gydag ID newydd o'r 5ed gweithiwr yn y tabl. Wedi hynny, dangoswch y data i wirio a yw'r EMPNUM wedi'i ddiweddaru ai peidio.
Gwneud y cyrchwr i bwyntio rhes olaf y tabl gan ddefnyddio last() a'i arddangos. I berfformio'r rhesymeg uchod, mae angen i ni osod gwerthoedd ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE yn y dull paratoiStatement.
#4) Dulliau Amrywiol
- 4>cau gwag(): Fe'i defnyddir i gau'r enghraifft ResultSet a rhyddhau'radnoddau sy'n gysylltiedig ag enghraifft ResultSet.
- ResultSetMetaData getMetaData(): Mae'n dychwelyd y Enghraifft ResultSetMetaData. Mae ganddo'r wybodaeth am fath ac eiddo colofnau allbwn yr ymholiad. Byddwn yn dysgu mwy am ResultSetMetaData yn yr adran nesaf.
CanlyniadSetMetaData
Beth yw Metadata?
Metadata yn golygu data am ddata. Gan ddefnyddio'r rhyngwyneb hwn, byddwn yn cael mwy o wybodaeth am ResultSet. Mae ar gael yn y pecyn java.sql. Mae pob gwrthrych ResultSet yn gysylltiedig ag un gwrthrych ResultSetMetaData.
Bydd gan y gwrthrych hwn fanylion priodweddau'r colofnau fel datatype y golofn, enw colofn, nifer y colofnau, enw tabl, enw sgema, ac ati, Gallwn gael y gwrthrych ResultSetMetaData gan ddefnyddio'r dull getMetaData() o ResultSet.
Cystrawen y ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Dulliau pwysig o ryngwyneb ResultSetMetaData:5
Enw'r Dull | Disgrifiad |
---|---|
Llinynnol getColumnName(int column) | Mae'n dychwelyd enw colofn y golofn arbennig |
Llinynnol getColumnTypeName(int column) | Mae'n dychwelyd math data y colofn arbennig yr ydym wedi pasio fel paramedr |
Llinynnol getTableName(int column) | Mae'n dychwelyd enw tabl y golofn |
Llinyn getSchemaName(colofn int) | Mae'n |