Ky tutorial shpjegon se si të përdoret JDBC ResultSet për të marrë të dhëna. Ne gjithashtu do të mësojmë rreth ndërfaqeve ResultSetMetaData dhe DatabaseMetaData me shembuj:
Në tutorialin JDBC DriverManager të serisë JDBC tutorial , mësuam se si të përdorim JDBC DriverManager dhe metodat e tij, JDBC PreparedStatement në aplikacionet Java.
Në këtë tutorial, ne do të diskutojmë ndërfaqet e mbetura në JDBC. Ne kemi mbuluar ndërfaqet Statement, PreparedStatement dhe CallableStatement në mësimet tona të mëparshme.
Këtu do të mësojmë rreth ndërfaqeve JDBC ResultSet, ResultSetMetaData dhe DatabaseMetaData, metodat e tyre dhe si të përdorim metodat në programin Java.
Ndërfaqja JDBC ResultSet
Ndërfaqja ResultSet është e pranishme në paketën java.sql. Përdoret për të ruajtur të dhënat të cilat kthehen nga tabela e bazës së të dhënave pas ekzekutimit të deklaratave SQL në Programin Java. Objekti i ResultSet ruan pikën e kursorit në të dhënat e rezultatit. Në parazgjedhje, kursori pozicionohet përpara rreshtit të parë të të dhënave të rezultatit.
Metoda next() përdoret për të lëvizur kursorin në pozicionin tjetër në drejtim përpara. Do të kthehet FALSE nëse nuk ka më të dhëna. Ai merr të dhëna duke thirrur metodën executeQuery() duke përdorur ndonjë nga objektet e deklaratës. Mund të jetë objekt Statement ose PreparedStatement ose CallableStatement. Deklaratë e përgatitur, dhekthen emrin e skemës së tabelës së kolonës
ResultSetMetaData Shembull
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:
Sqarim:
Në programin e mësipërm, ne kemi implementuar metodat getColumnCount(),getColumnName(), getColumnTypeName(), getTableName() dhe getSchemaName() në ndërfaqen ResultSetMetaData.
DatabaseMetaData
Ndërfaqja DatabaseMetaData jep informacione si për ndërfaqen e bazës së të dhënave Emri i bazës së të dhënave, versioni i bazës së të dhënave, e kështu me radhë.
Metodat e rëndësishme të ndërfaqes DatabaseMetaData:
Emri i metodës | Përshkrimi |
---|---|
String getDriverName() | Do të kthejë emrin e drejtuesit JDBC që ne po përdorim në programin tonë Java |
String getDriverVersion() | Ai kthen numrin e versionit të drejtuesit JDBC |
String getUserName() | Kthen emrin e përdoruesit të bazës së të dhënave që ne po përdorim |
String getDatabaseProductName() | Kthehet emri i bazës së të dhënave që jemiduke përdorur |
String getDatabaseProductVersion() | Ai kthen numrin e versionit të bazës së të dhënave që ne po përdorim |
RezultSet getSchemas() | I kthen emrat e skemave të disponueshme në bazën e të dhënave të lidhur |
String getStringFunctions() | E kthen listën e funksioneve të vargut të disponueshëm në bazën e të dhënave të lidhur |
String getTimeDateFunctions() | Ajo kthen listën e funksioneve të kohës dhe datës të disponueshme në bazën e të dhënave të lidhur |
String getURL() | Kthon URL-në për bazën e të dhënave |
Boolean isReadOnly() | Kthehet nëse baza e të dhënave është në modalitetin vetëm për lexim |
Boolean supportsBatchUpdates() | Kthehet nëse baza e të dhënave mbështet përditësimet e grupit |
Boolean supportsSavepoints() | Kthen nëse Baza e të Dhënave mbështet Savepoints |
Boolean supportsStatementPooling() | Kthen nëse Baza e të Dhënave mbështet Pooling Pooling |
Boolean supportsStoredProcedures() | Kthehet nëse baza e të dhënave mbështet procedurat e ruajtura |
Boolean supportsOuterJoins() | Kthehet nëse baza e të dhënave mbështet Outer Join |
Këtu, ne renditëm disa metoda të rëndësishme të ndërfaqes DatabaseMetaData. Ju mund t'i referohenisajti zyrtar i Oracle ku mund të shihni të gjitha metodat e disponueshme në ndërfaqen DatabaseMetaData.
Shembulli i DatabaseMetaData:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Using DatabaseMetaData"); System.out.println("Driver Name: " + dbmd.getDriverName()); System.out.println("Driver Version: "+ dbmd.getDriverVersion()); System.out.println("UserName of the Database: " + dbmd.getUserName()); System.out.println("Database Product Name:" + dbmd.getDatabaseProductName()); System.out.println("Database Product Version: " + dbmd.getDatabaseProductVersion()); System.out.println("List of String Functions in the Database: " + dbmd.getStringFunctions()); System.out.println("List of Time & Date functions in the Database: " + dbmd.getTimeDateFunctions()); System.out.println("URL of the Database: " + dbmd.getURL()); System.out.println("Database is read - only? " +dbmd.isReadOnly()); System.out.println("Support Batch Updates? " + dbmd.supportsBatchUpdates()); System.out.println("Support savepoints? " + dbmd.supportsSavepoints()); System.out.println("Support Statement Pooling? "+ dbmd.supportsStatementPooling()); System.out.println("Support Stored Procedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? "+ dbmd.supportsOuterJoins()); } }
OUTPUT:
Sqarim:
Në programin e mësipërm, ne kemi përdorur/ implementuar getDriverName(), getDriverVersion() , getUSerName ()), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), geturl (), isReadOnly (), mbështetjet e mbështetur (), mbështetjet e mbështetjes () Ndërfaqja e bazës së të dhënave MetaData.
Pika për t'u theksuar:
- Ndërfaqja JDBC ResultSet përdoret për të ruajtur të dhënat nga baza e të dhënave dhe për t'i përdorur ato në Programin tonë Java.
- Ne gjithashtu mund të përdorim ResultSet për të përditësuar të dhënat duke përdorur metodat updateXXX().
- Objekti ResultSet e drejton kursorin përpara rreshtit të parë të të dhënave të rezultatit. Duke përdorur metodën next(), ne mund të përsërisim përmes ResultSet.
- Kemi metoda lundrimi të ResultSet për të lëvizur më tej në objektin ResultSet
- ResultMetaData përdoret për të marrë më shumë informacion rreth ResultSet si p.sh. emri i kolonës, numri i kolonave, lloji i të dhënave të kolonës, etj.
- DatabaseMetData përdoret për të marrë informacionin rreth bazës së të dhënave që kemi lidhur
Pyetjet e bëra më shpesh
P #1) Cili është përdorimi iResultSet?
Përgjigje: ResultSet përdoret për të ruajtur dhe marrë të dhënat nga DB. Kur metoda executeQuery() të ketë ekzekutuar, ajo do të kthejë objektin ResultSet. Ne mund ta përdorim atë objekt ResultSet në programin tonë për të kryer logjikën.
P #2) Si të kontrollojmë nëse ResultSet është bosh apo jo?
Përgjigje: Nuk ka metoda të paracaktuara si length(), size() për të kontrolluar IsResultSet Empty. Ne mund të përdorim metodën next() për të përsëritur dhe nëse kthen True, atëherë nuk është bosh, nëse kthen False do të thotë se ResultSet është bosh.
P #3) A është e mundur që ResultSet mund të jetë null?
Përgjigje: Jo, metoda executeQuery() kthen objektin ResultSet që mund të mos jetë kurrë null.
P #4) Çfarë është ResultSet i azhurnueshëm?
Përgjigje: Një objekt ResultSet i azhurnueshëm përdoret për përditësimin e të dhënave në kolonë, futjen e të dhënave në kolona dhe fshirjen e rreshtave. Për të bërë një ResultSet si të përditësueshëm, duhet të bëjmë llojin e rrotullimit si të ndjeshëm ose të pandjeshëm dhe llojin CONCUR si të përditësueshëm.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P #5) Si të merrni emrin e bazës së të dhënave që është lidhur?
Përgjigje: Ne mund të përdorim metodën getDatabaseProductName() të objektit DatabaseMetaData.
Përfundim
Në këtë tutorial, ne kemi diskutuar se çfarë janë ndërfaqet ResultSet, ResultSetMetaData dhe DatabaseMetaData dhe metodat e tyre të rëndësishme që përdoren zakonisht në programet JDBC. Ne kemi parë gjithashtusi të përditësoni të dhënat në DB duke përdorur ResultSet. ResultSetMetadata përmban informacione rreth ResultSet si Emri i kolonës, numri i kolonave etj.
Baza e të dhënaveMetaData përmban informacione të bazës së të dhënave.
Ndërfaqja e deklaratës
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Ndërfaqja e preparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Ne mund të përdorni metodën getX() për të marrë të dhënat e kolonave gjatë përsëritjes përmes rezultateve ku X – është tipi i të dhënave të kolonës. Ne mund të përdorim ose Emrat e Kolonave ose Indeksin për të marrë vlerat duke përdorur metodat 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); }
Ne gjithashtu mund të përmendim numrin e indeksit të kolonës në vend të emrit të kolonës në metodat 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); }
Llojet e ResultSet
Në parazgjedhje, ne mund të përsërisim të dhënat/vlerat në ResultSet të cilat janë kthyer si një dalje e deklaratës së ekzekutuar SQL në drejtimin përpara. Ne mund t'i përsërisim vlerat në drejtime të tjera duke përdorur Scrollable ResultSet. Mund të specifikojmë llojin dhe konkurencën e ResultSet gjatë krijimit të objekteve Statement, PreparedStatement dhe CallableStatement.
Ka 3 lloje në ResultSet. Ato janë:
- TYPE_FORWARD_ONLY: Është opsioni i paracaktuar, ku kursori lëviz nga fillimi në fund, pra në drejtimin përpara.
- TYPE_SCROLL_INSENSITIVE: Në këtë lloj, ai do të bëjë që kursori të lëvizë në drejtimet përpara dhe prapa. Nëse bëjmë ndonjë ndryshim në të dhëna gjatë përsëritjes së të dhënave të ruajtura, ato nuk do të përditësohen në grupin e të dhënave nëse dikush ndryshon të dhënat në DB. Për shkak se grupi i të dhënave ka të dhënat nga koha kur pyetësori SQL kthenTë dhënat.
- TYPE_SCROLL_SENSITIVE: Është e ngjashme me TYPE_SCROLL_INSENSITIVE, ndryshimi është nëse dikush i përditëson të dhënat pasi SQL Query ka kthyer të dhënat, ndërsa përsëritja e tij do të pasqyrojë ndryshimet në grupin e të dhënave.
Concurrency ResultSet
Ka 2 mënyra të Concurrency në ResultSet. Ato janë:
- RezultSet.CONCUR_READ_ONLY: Është modaliteti i parazgjedhur i konkurencës. Ne mund të lexojmë vetëm të dhënat në ResultSet. Përditësimi nuk është i zbatueshëm.
- ResultSet.CONCUR_UPDATABLE: Mund të përditësojmë të dhënat në objektin ResultSet.
Disa baza të dhënash nuk mbështesin modalitetin e njëkohshmërisë për të gjithë Llojet ResultSet. Në atë rast, ne duhet të kontrollojmë nëse ato mbështesin llojin tonë të dëshiruar dhe modalitetin e konkurencës duke përdorur metodën supportsResultSetConcurrency().
Metodat Në ndërfaqen ResultSet
Ka 4 kategori metodash ResultSet. Ato janë:
- Metodat e lundrimit
- Metodat Getter
- Metodat Setter
- Metodat e ndryshme
Së pari, ne do të diskutojmë metodat e lundrimit dhe më pas do të shkojmë më tej.
#1) Metodat e lundrimit
Kjo metodë përdoret për të lëvizur kursorin rreth grupit të të dhënave.
- Boolean absolute(int row): Përdoret për të lëvizur kursorin në rreshtin e specifikuar i cili përmendet në parametër dhe për të kthyer true nëse operacioni është i suksesshëm përndryshe kthen false.
- E pavlefshmeafterLast(): E bën kursorin ResultSet të lëvizë pas rreshtit të fundit.
- I pavlefshëm përparaFirst(): E bën kursorin ResultSet të lëvizë përpara rreshtit të parë.
- Boolean first(): E bën kursorin ResultSet të lëvizë në rreshtin e parë. Ai kthen True nëse operacioni është i suksesshëm tjetër False.
- Boolean last(): E bën kursorin ResultSet të lëvizë në rreshtin e fundit. Ai kthen True nëse operacioni është i suksesshëm tjetër False.
- Boolean next(): E bën kursorin ResultSet të lëvizë në rreshtin tjetër. Ai kthen True nëse ka më shumë regjistrime dhe False nëse nuk ka më të dhëna.
- Boolean previous(): E bën kursorin ResultSet të lëvizë në rreshtin e mëparshëm. Ai kthen "E vërtetë" nëse operacioni është i suksesshëm, tjetër "E gabuar".
- Rrelativi Boolean(): Ai lëviz kursorin në numrin e caktuar të rreshtave në drejtimin përpara ose prapa.
- Int getRow(): Ai kthen numrin aktual të rreshtit që objekti ResultSet po tregon tani.
- Void moveToCurrentRow(): Ai e zhvendos kursorin përsëri në rreshti aktual nëse është aktualisht në rreshtin e futjes.
- Void moveToInsertRow(): Ai lëviz kursorin në rreshtin specifik për të futur rreshtin në bazën e të dhënave. Ai kujton vendndodhjen aktuale të kursorit. Pra, ne mund të përdorim metodën moveToCurrentRow() për të lëvizur kursorin në rreshtin aktual pas futjes.
Në këtë tutorial,të gjitha programet janë të shkruara në Java. Ne kemi përdorur versionin Java 8 dhe Oracle DB.
>>Mund ta shkarkoni softuerin Oracle nga këtu
>>Mund ta shkarkoni versionin 8 të Java nga këtu
Ka procesin e instalimit të Java hap pas hapi.
JDBC ResultSet Shembull i programit:(Përdorimi i metodave të lundrimit)
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:
Të dhënat në tabelën e Detajeve të Punonjësve
Shpjegim:
Në programin e mësipërm kemi zbatuar të parën(), last(), beforeFirst(), afterLast(), next( Metodat e mëparshme(), absolute(), relative() dhe getRow() në ResultSet. Për të përdorur këto metoda, ne vendosëm vlerat ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE në metodën PreparateStatement.
Më pas, do të diskutojmë se cilat janë Metodat Getter në ResultSet:
#2) Getter Methods
ResultSet ka ruajtur të dhënat e tabelës nga Baza e të Dhënave. Metodat marrës përdoren për të marrë vlerat e tabelës në ResultSet. Për këtë, ne duhet të kalojmë vlerën e indeksit të kolonës ose emrin e kolonës.
Më poshtë janë metodat e marrjes në ResultSet:
- int getInt (int ColumnIndex): Përdoret për të marrë vlerën e kolonës së specifikuar Index si një lloj të dhënash int.
- float getFloat(int ColumnIndex): Përdoret për të marrë vlera e Indeksit të kolonës së specifikuar si lloj i të dhënave float.
- java.sql.dategetDate(int ColumnIndex): Përdoret për të marrë vlerën e kolonës së specifikuar Index si vlerë datë.
- int getInt(String ColumnName): Përdoret për të marrë vlera e kolonës së specifikuar si lloj i të dhënave int.
- float getFloat(String ColumnName): Përdoret për të marrë vlerën e kolonës së specifikuar si një lloj të dhënash float.
- Java.sql.date getDate(String ColumnName): Përdoret për të marrë vlerën e kolonës së specifikuar si vlerë datë.
Ka metoda marrëse për të gjitha llojet primitive të të dhënave (Boolean, long, double) dhe String gjithashtu në ndërfaqen ResultSet. Ne mund të marrim një grup dhe lloj binar të dhënash gjithashtu nga Baza e të Dhënave. Ka edhe metoda për këtë.
#3) Metodat e vendosjes/përditësuesit
Ne mund të përditësojmë vlerën në bazën e të dhënave duke përdorur metodat ResultSet Updater. Është e ngjashme me metodat Getter, por këtu duhet të kalojmë vlerat/të dhënat për kolonën e caktuar për t'u përditësuar në bazën e të dhënave.
Më poshtë janë metodat e përditësuesve në ResultSet:
- void updateInt(int ColumnIndex, int Value): Përdoret për të përditësuar vlerën e Indeksit të kolonës së specifikuar me një vlerë int.
- void updateFloat(int ColumnIndex, float f): Përdoret për të përditësuar vlerën e kolonës së specifikuar Index me vlerën float.
- void updateDate(int ColumnIndex, Data d): Përdoret për të përditësuar vlerën e Indeksit të kolonës së specifikuarme vlerën e datës.
- void updateInt(String ColumnName, int Value): Përdoret për të përditësuar vlerën e kolonës së specifikuar me vlerën e dhënë int.
- void updateFloat(String ColumnName, float f): Përdoret për të përditësuar vlerën e kolonës së specifikuar me vlerën e dhënë float.
- Java.sql.date getDate(String Emri i kolonës): Përdoret për të përditësuar vlerën e kolonës së specifikuar me vlerën e datës së dhënë.
Ka metoda të përditësimit për të gjitha llojet primitive të të dhënave (Boolean, long, double) dhe String gjithashtu në ndërfaqen ResultSet.
Metodat e përditësimit thjesht përditësojnë të dhënat në objektin ResultSet. Vlerat do të përditësohen në DB pas thirrjes së metodës insertRow ose updateRow.
Përditësimi i një rreshti:
Ne mund t'i përditësojmë të dhënat në një rresht duke thirrur metodat updateX() , duke kaluar emrin ose indeksin e kolonës dhe vlerat për t'u përditësuar. Ne mund të përdorim çdo lloj të dhënash në vend të X në metodën updateX. Deri më tani, ne kemi përditësuar të dhënat në objektin ResultSet. Për të përditësuar të dhënat në DB, duhet të thërrasim metodën updateRow().
Futja e një rreshti:
Ne duhet të përdorim moveToInsertRow() për të lëvizur kursorin për të futur një rresht të ri. Ne e kemi mbuluar tashmë këtë në seksionin Metodat e navigimit. Më pas, duhet të thërrasim metodën updateX() për të shtuar të dhënat në rresht. Ne duhet të ofrojmë të dhëna për të gjitha kolonat, përndryshe ajo do të përdorë vlerën e paracaktuar të asaj të veçantëkolonë.
Pas përditësimit të të dhënave, duhet të thërrasim metodën insertRow(). Më pas përdorni metodën moveToCurrentRow(), për të kthyer pozicionin e kursorit në rreshtin ku ishim përpara se të fillonim të futnim një rresht të ri.
Shembulli ResultSet:
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:
Sqarim:
Në programin e mësipërm ajo që kemi bërë është së pari, kemi ruajtur të dhënat e tabelës Employee_details në objektin ResultSet duke përdorur pyetjen SELECT. Më pas, ne shfaqëm të dhënat e rreshtit të fundit në tabelën punonjës_details duke përdorur metodën last() të ResultSet. Metoda moveToInsertRow() e bën kursorin të tregojë rreshtin aktual, tani rreshti aktual është rreshti i fundit.
përditësoni XXX()metodat e përdorura për përditësimin e vlerave në rresht dhe metoda insertRow() ka futur të dhënat në një rresht i ri. Duke përdorur metodën absolute(), bëmë kursorin të tregojë në rreshtin e 5-të. Metoda UpdateInt() është përdorur për të përditësuar EMPNUM me një ID të re të punonjësit të 5-të në tabelë. Pas kësaj, shfaqen të dhënat për të kontrolluar nëse EMPNUM është përditësuar apo jo.
Bëni kursorin të drejtojë rreshtin e fundit të tabelës duke përdorur last() dhe e shfaqi atë. Për të kryer logjikën e mësipërme, ne duhet të caktojmë vlerat ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE në metodën PreparateStatement.
#4) Metoda të ndryshme
- void close(): Përdoret për të mbyllur instancën ResultSet dhe për të liruarburimet e lidhura me shembullin ResultSet.
- ResultSetMetaData getMetaData(): Ai kthen instancën ResultSetMetaData. Ai ka informacion në lidhje me llojin dhe vetinë e kolonave të daljes së pyetjes. Ne do të mësojmë më shumë rreth ResultSetMetaData në seksionin tjetër.
ResultSetMetaData
Çfarë është Metadata?
Metadata do të thotë të dhëna për të dhënat. Duke përdorur këtë ndërfaqe, ne do të marrim më shumë informacion rreth ResultSet. Është në dispozicion në paketën java.sql. Çdo objekt ResultSet shoqërohet me një objekt ResultSetMetaData.
Ky objekt do të ketë detajet e vetive të kolonave si llojin e të dhënave të kolonës, emrin e kolonës, numrin e kolonave, emrin e tabelës, emrin e skemës, etj., Mund të marrim objektin ResultSetMetaData duke përdorur metodën getMetaData() të ResultSet.
Sintaksa e ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Metodat e rëndësishme të ndërfaqes ResultSetMetaData:
Emri i metodës | Përshkrimi |
---|---|
String getColumnName(int kolona) | Kthon emrin e kolonës së kolonës së caktuar |
String getColumnTypeName(int kolona) | Kthen tipin e të dhënave të kolonë e veçantë të cilën e kemi kaluar si parametër |
String getTableName(int kolona) | Kthon emrin e tabelës së kolonës |
String getSchemaName(kolona int) | It |