Tutorial ieu ngajelaskeun cara ngagunakeun JDBC ResultSet pikeun meunangkeun data. Urang ogé bakal diajar ngeunaan interfaces ResultSetMetaData jeung DatabaseMetaData kalayan conto:
Dina JDBC DriverManager tutorial JDBC tutorial series , urang diajar kumaha ngagunakeun JDBC. DriverManager jeung métodena, JDBC PreparedStatement dina aplikasi Java.
Dina tutorial ieu, urang bakal ngabahas sésa interfaces dina JDBC. Kami parantos nutupan antarmuka Pernyataan, PreparedStatement, sareng CallableStatement dina tutorial kami sateuacana.
Di dieu, urang bakal diajar ngeunaan antarmuka JDBC ResultSet, ResultSetMetaData, sareng DatabaseMetaData, metodena sareng cara ngagunakeun metode dina program Java.
JDBC ResultSet Interface
ResultSet Interface aya dina pakét java.sql. Hal ieu dipaké pikeun nyimpen data nu balik ti tabel database sanggeus dijalankeunnana pernyataan SQL dina Program Java. Objek ResultSet ngajaga titik kursor dina data hasil. Sacara standar, posisi kursor saméméh baris kahiji data hasil.
Metoda next() dipaké pikeun mindahkeun kursor ka posisi hareup dina arah maju. Bakal balik PALSU upami teu aya deui rékaman. Ieu retrieves data ku nelepon metoda executeQuery () ngagunakeun salah sahiji objék pernyataan. Bisa jadi Pernyataan atanapi PreparedStatement atanapi CallableStatement obyék. PreparedStatement, jeungmulihkeun ngaran skéma tabel kolom
ResultSetMetaData Conto
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:
Katerangan:
Dina program di luhur, kami parantos ngalaksanakeun metode getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () sareng getSchemaName () dina antarmuka ResultSetMetaData.
DatabaseMetaData
Antarbeungeut DatabaseMetaData masihan inpormasi ngeunaan Database sapertos DatabaseName, versi Database, jeung sajabana.
Metode penting antarbeungeut DatabaseMetaData:
Ngaran Métode | Deskripsi |
---|---|
String getDriverName() | Ieu bakal ngabalikeun nami supir JDBC anu kami anggo dina program Java kami |
String getDriverVersion() | Ngabalikeun nomer versi supir JDBC |
String getUserName() | Ngabalikeun nami pangguna tina Database anu kami anggo |
String getDatabaseProductName() | Ieu mulih ngaran Database nu urangngagunakeun |
String getDatabaseProductVersion() | Ngabalikeun nomer vérsi Database anu kami anggo |
ResultSet getSchemas() | Ngabalikeun ngaran-ngaran skéma nu aya dina Database nu disambungkeun |
String getStringFunctions() | Ngabalikeun daptar pungsi string nu sadia dina Database disambungkeun |
String getTimeDateFunctions() | Ieu mulihkeun daptar pungsi waktos sareng kaping nu aya dina Database nu disambungkeun |
String getURL() | Ieu mulihkeun URL kanggo Database |
Boolean isReadOnly() | Ngabalikeun deui naha database aya dina mode baca wungkul |
Boolean supportsBatchUpdates() | Ngabalikeun deui naha database ngarojong apdet bets |
Boolean supportsSavepoints() | Ngabalikeun deui naha Database ngadukung Savepoints |
Boolean supportsStatementPooling() | Ieu mulih deui naha Database ngarojong Statement Pooling |
Boolean supportsStoredProcedures() | Ngabalikeun deui naha Database ngarojong prosedur Stored |
Boolean supportsOuterJoins() | Ngabalikeun deui naha pangkalan data ngadukung Outer Join |
Di dieu, kami daptar sababaraha metode penting antarmuka DatabaseMetaData. Anjeun tiasa ngarujuk kanasitus resmi Oracle dimana anjeun tiasa ningali sadaya metode anu aya dina antarmuka DatabaseMetaData.
Conto 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:
Penjelasan:
Dina program di luhur, kami geus ngagunakeun/implementasi getDriverName(), getDriverVersion() , getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoints(), supportsStoredProcedures() Antarbeungeut DatabaseMetaData.
Poin nu kudu diperhatikeun:
- Interface JDBC ResultSet dipaké pikeun nyimpen data tina pangkalan data jeung dipaké dina Program Java urang.
- Urang ogé tiasa nganggo ResultSet pikeun ngapdet data nganggo metode updateXXX().
- Obyék ResultSet nunjuk kursor sateuacan baris kahiji data hasil. Ngagunakeun métode next(), urang bisa iterate ngaliwatan ResultSet.
- Urang boga métode navigasi ResultSet pikeun mindahkeun salajengna dina ResultSet obyék
- ResultMetaData dipaké pikeun meunangkeun inpo nu langkung lengkep ihwal ResultSet kawas ngaran kolom, jumlah kolom, tipe data kolom, jsb.
- DatabaseMetData digunakeun pikeun meunangkeun informasi ngeunaan pangkalan data anu geus kami sambungkeun
Patarosan anu Sering Ditaroskeun
Q #1) Naon gunanaResultSet?
Jawaban: ResultSet dipaké pikeun nyimpen jeung meunangkeun data ti DB. Nalika executeQuery () métode geus dieksekusi, éta bakal balik ResultSet obyék. Urang tiasa nganggo obyék ResultSet éta dina program urang pikeun ngalaksanakeun logika.
Q #2) Kumaha mariksa naha ResultSet kosong atanapi henteu?
Jawaban: Teu aya metode anu tos siapkeun sapertos panjang (), ukuran () sayogi pikeun pariksa IsResultSet Empty. Urang tiasa nganggo metodeu salajengna () pikeun ngulang sareng upami éta leres, maka éta henteu kosong, upami wangsul Palsu hartosna ResultSet kosong.
Q #3) Naha mungkin ResultSet bisa jadi null?
Jawaban: Henteu, metoda executeQuery() ngabalikeun objek ResultSet anu moal pernah nol.
Q #4) Naon ari ResultSet anu tiasa di-update?
Jawaban: Objék ResultSet anu tiasa di-update dianggo pikeun ngapdet data dina kolom, nyelapkeun data dina kolom sareng ngahapus barisan. Pikeun ngadamel ResultSet salaku anu tiasa diénggalan, urang kedah ngajantenkeun jinis gulung anu sénsitip atanapi teu peka sareng jinis CONCUR tiasa diénggalan.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
Q #5) Kumaha carana kéngingkeun nami Database anu parantos dihubungkeun?
Jawaban: Urang bisa make metode getDatabaseProductName() objek DatabaseMetaData.
Kacindekan
Dina tutorial ieu, urang geus ngabahas naon wae interfaces ResultSet, ResultSetMetaData, jeung DatabaseMetaData jeung métode penting maranéhanana ilahar dipaké dina program JDBC. Urang ogé geus katempokumaha ngapdet data dina DB ngagunakeun ResultSet. ResultSetMetadata ngandung émbaran ngeunaan ResultSet saperti Ngaran Kolom, Jumlah Kolom, jeung saterusna.
DatabaseMetaData ngandung émbaran Database.
Antarmuka Pernyataan
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Antarmuka PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Urang bisa ngagunakeun metode getX () pikeun meunangkeun data tina kolom bari iterating ngaliwatan hasil dimana X - nyaeta datatype kolom. Urang tiasa nganggo nami Kolom atanapi Indéks pikeun nampi nilai nganggo metode 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); }
Urang ogé tiasa nyebatkeun nomer indéks Kolom tinimbang Ngaran Kolom dina metode 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); }
Jenis ResultSet
Sacara standar, urang tiasa ngulang data / nilai dina ResultSet anu parantos balik salaku kaluaran pernyataan SQL anu dieksekusi dina arah maju. Urang bisa iterate nilai dina arah séjén maké Scrollable ResultSet. Urang tiasa netepkeun jinis sareng konkurensi ResultSet nalika nyiptakeun objék Pernyataan, PreparedStatement, sareng CallableStatement.
Aya 3 jinis dina ResultSet. Éta téh:
- TYPE_FORWARD_ONLY: Ieu téh pilihan standar, dimana kursor pindah ti mimiti nepi ka ahir nyaéta arah maju.
- TYPE_SCROLL_INSENSITIVE: Dina tipe ieu, éta bakal ngajadikeun kursor pindah dina arah maju jeung mundur. Lamun urang nyieun parobahan mana wae dina data bari iterating data nu disimpen eta moal ngamutahirkeun dina dataset lamun saha ngarobah data dina DB. Kusabab dataset ngabogaan data ti waktu query SQL mulih kaData.
- TYPE_SCROLL_SENSITIVE: Sarupa jeung TYPE_SCROLL_INSENSITIVE, bédana lamun aya nu ngamutahirkeun data sanggeus SQL Query geus mulangkeun data, bari iterating eta bakal ngagambarkeun parobahan dataset.
ResultSet Concurrency
Aya 2 mode Concurrency dina ResultSet. Ieu:
- ResultSet.CONCUR_READ_ONLY: Ieu mangrupikeun mode konkurensi standar. Urang ukur bisa maca data dina ResultSet. Pembaruan henteu tiasa dianggo.
- ResultSet.CONCUR_UPDATABLE: Urang tiasa ngamutahirkeun data dina obyék ResultSet.
Sababaraha basis data henteu ngadukung mode konkurensi pikeun sadayana Jenis ResultSet. Dina hal éta, urang kudu mariksa naha maranéhna ngarojong tipe nu dipikahoyong tur mode concurrency maké supportsResultSetConcurrency() métode.
Metoda Dina ResultSet Interface
Aya 4 kategori métode ResultSet. Nyaeta:
- Metode Navigasi
- Metode Getter
- Metode Setter
- Metode Rupa-rupa
Kahiji, urang bakal ngabahas Métode Navigasi terus maju.
#1) Métode Navigasi
Metoda ieu dipaké pikeun mindahkeun kursor sabudeureun set data.
- Boolean absolute(int row): Hal ieu dipaké pikeun mindahkeun kursor ka baris nu tangtu nu disebutkeun dina parameter jeung balik bener lamun operasi geus suksés lain balik palsu.
- BakalafterLast(): Ngajadikeun kursor ResultSet pindah sanggeus baris panungtung.
- Void beforeFirst(): Ngajadikeun kursor ResultSet pindah saméméh baris kahiji.
- Boolean first(): Éta ngajadikeun kursor ResultSet pindah ka baris kahiji. Ngabalikeun True lamun operasi suksés lain False.
- Boolean last(): Ieu ngajadikeun kursor ResultSet pindah ka baris panungtungan. Ngabalikeun True lamun operasi suksés lain False.
- Boolean next(): Éta ngajadikeun kursor ResultSet pindah ka baris saterusna. Ngabalikeun True upami langkung seueur rékaman sareng Palsu upami teu aya deui rékaman.
- Boolean saméméhna(): Éta ngajadikeun kursor ResultSet pindah ka baris saméméhna. Ngabalikeun True lamun operasina suksés lain False.
- Boolean relative(): Ieu mindahkeun kursor ka jumlah baris nu tangtu boh dina arah maju atawa mundur.
- Int getRow(): Ngabalikeun nomer baris ayeuna objek ResultSet nujul ayeuna.
- Void moveToCurrentRow(): Ngalihkeun kursor deui ka baris ayeuna lamun ayeuna di sisipan baris.
- Void moveToInsertRow(): Ieu mindahkeun kursor ka baris husus pikeun ngasupkeun baris kana Database. Éta émut lokasi kursor ayeuna. Janten urang tiasa nganggo metode moveToCurrentRow() pikeun mindahkeun kursor ka baris ayeuna saatos dilebetkeun.
Dina tutorial ieu,sadaya program ditulis dina Java. Kami parantos nganggo versi Java 8 sareng Oracle DB.
>>Anjeun tiasa ngaunduh parangkat lunak Oracle ti dieu
>>Anjeun tiasa ngundeur Java vérsi 8 ti dieu
Mibanda prosés instalasi Java step-by-step.
JDBC ResultSet Conto Program:(Maké métode Navigasi)
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 dina Employee_details table
Penjelasan:
Dina program di luhur kami geus ngalaksanakeun kahiji(), last(), beforeFirst(), afterLast(), next( ), saméméhna (), mutlak (), relatif () jeung getRow () métode di ResultSet. Pikeun ngagunakeun metodeu ieu, urang netepkeun nilai ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE dina metode prepareStatement.
Salajengna, urang bakal ngabahas naon metode Getter dina ResultSet:
#2) Metode Getter
ResultSet parantos nyimpen data tabel tina Database. Métode getter dipaké pikeun meunangkeun nilai tabel di ResultSet. Pikeun éta, urang kedah ngalebetkeun nilai Indéks kolom atanapi Ngaran Kolom.
Di handap ieu mangrupikeun metode getter dina ResultSet:
- int getInt (int ColumnIndex): Hal ieu dipaké pikeun meunangkeun nilai Indéks kolom anu ditangtukeun salaku tipe data int.
- float getFloat(int ColumnIndex): Ieu dipaké pikeun meunangkeun nilai Indéks kolom anu ditangtukeun salaku tipe data ngambang.
- java.sql.dategetDate(int ColumnIndex): Hal ieu dipaké pikeun meunangkeun nilai Indéks kolom anu ditangtukeun salaku nilai titimangsa.
- int getInt(String ColumnName): Ieu dipaké pikeun meunangkeun nilai kolom anu ditangtukeun salaku tipe data int.
- float getFloat(String ColumnName): Digunakeun pikeun meunangkeun nilai kolom anu ditangtukeun salaku tipe data float.
- Java.sql.date getDate(String ColumnName): Digunakeun pikeun meunangkeun nilai kolom anu ditangtukeun salaku nilai tanggal.
Aya metode getter pikeun sakabéh tipe data primitif (Boolean, panjang, ganda) jeung String ogé dina panganteur ResultSet. Urang ogé bisa ménta hiji Asép Sunandar Sunarya jeung binér tipe data ti Database nu. Éta ogé ngagaduhan metode pikeun éta.
#3) Métode Setter/Updater
Urang tiasa ngapdet nilai dina Database nganggo metode ResultSet Updateater. Sarupa jeung métode Getter, tapi di dieu urang kudu lulus nilai/data pikeun kolom husus pikeun ngamutahirkeun dina Database.
Di handap ieu mangrupakeun métode updater dina ResultSet:
- void updateInt(int ColumnIndex, int Value): Digunakeun pikeun ngamutahirkeun nilai Indéks kolom anu ditangtukeun ku nilai int.
- void updateFloat(int ColumnIndex, float f): Digunakeun pikeun ngamutahirkeun nilai Indéks kolom anu ditangtukeun ku nilai float.
- void updateDate(int ColumnIndex, Date d): Hal ieu dipaké pikeun ngapdet nilai Indéks kolom anu ditangtukeunkalawan niléy tanggal.
- void updateInt(String ColumnName, int Value): Digunakeun pikeun ngamutahirkeun niléy kolom nu ditangtukeun ku nilai int nu dibikeun.
- void updateFloat(String ColumnName, float f): Digunakeun pikeun ngamutahirkeun niléy kolom nu ditangtukeun ku nilai float nu dibikeun.
- Java.sql.date getDate(String ColumnName): Digunakeun pikeun ngamutahirkeun niléy kolom anu ditangtukeun ku nilai tanggal anu dipasihkeun.
Aya métode Updateater pikeun sakabéh tipe data primitif (Boolean, long, double) jeung String oge dina panganteur ResultSet.
Metoda Updater ngan ukur ngamutahirkeun data dina objek ResultSet. Nilai-nilai bakal diropéa dina DB saatos nelepon metodeu insertRow atanapi updateRow.
Ngamutahirkeun Baris:
Urang tiasa ngapdet data sakaligus ku cara nelepon metodeu updateX() , ngalirkeun ngaran kolom atawa indéks, sarta nilai pikeun ngamutahirkeun. Urang tiasa nganggo jinis data naon waé pikeun ngaganti X dina metode updateX. Nepi ka ayeuna, kami geus diropéa data dina obyék ResultSet. Pikeun ngapdet data dina DB, urang kedah nyauran metode updateRow().
Nyelapkeun Baris:
Urang kedah nganggo moveToInsertRow() pikeun mindahkeun kursor. pikeun nyelapkeun baris anyar. Kami parantos nutupan ieu dina bagian Métode Navigasi. Salajengna, urang kudu nelepon updateX () metoda pikeun nambahkeun data ka baris. Urang kedah nyayogikeun data pikeun sadaya kolom anu sanés bakal nganggo nilai standar tinangtu étakolom.
Saatos ngamutahirkeun data, urang kedah nyauran metodeu insertRow(). Teras paké metodeu moveToCurrentRow(), pikeun nyandak posisi kursor deui ka barisan tempatna sateuacan urang nyelapkeun baris anyar.
Conto 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:
Penjelasan:
Dina program di luhur naon anu geus urang pigawé nyaéta kahiji, urang disimpen data tabel Employee_details dina obyék ResultSet ngagunakeun query SELECT. Lajeng, urang ditampilkeun data baris panungtungan dina tabel employee_details ngagunakeun panungtungan () metoda ResultSet. moveToInsertRow() metoda ngajadikeun kursor pikeun nunjuk baris ayeuna, ayeuna baris ayeuna baris panungtungan.
updateXXX()metode nu dipaké pikeun ngapdet nilai-nilai baris jeung insertRow() metoda geus diselapkeun data dina baris anyar. Ngagunakeun mutlak () métode, urang dijieun kursor pikeun nunjuk ka baris 5. UpdateInt () métode geus dipaké pikeun ngapdet EMPNUM kalawan id anyar 5 pagawe dina tabél. Saatos éta, ditampilkeun data pikeun mariksa naha EMPNUM parantos diropéa atanapi henteu.
Dijieun kursor pikeun nunjuk baris panungtung tabel nganggo last() teras nampilkeunana. Pikeun ngalaksanakeun logika di luhur, urang kedah nyetél nilai ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE dina metode prepareStatement.
#4) Métode Rupa-rupa
- void close (): Ieu dianggo pikeun nutup conto ResultSet sareng ngosongkeunsumberdaya nu pakait jeung instance ResultSet.
- ResultSetMetaData getMetaData(): Ngabalikkeun Instance ResultSetMetaData. Éta gaduh inpormasi ngeunaan jinis sareng sipat kolom kaluaran query. Urang bakal leuwih jéntré ngeunaan ResultSetMetaData dina bagian salajengna.
ResultSetMetaData
Naon Métadata?
Metadata hartina data ngeunaan data. Ngagunakeun panganteur ieu, urang bakal meunang informasi langkung lengkep ihwal ResultSet. Éta sayogi dina pakét java.sql. Unggal obyék ResultSet dipatalikeun jeung hiji obyék ResultSetMetaData.
Objék ieu bakal mibanda detil sipat kolom kawas tipe data kolom, ngaran kolom, jumlah kolom, ngaran méja, ngaran skéma, jsb. Urang bisa meunangkeun obyék ResultSetMetaData maké metode getMetaData() tina ResultSet.
Syntax of ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Metode penting panganteur ResultSetMetaData:
Ngaran Métode | Deskripsi |
---|---|
String getColumnName(int column) | Ngabalikeun ngaran kolom tina kolom nu tangtu |
String getColumnTypeName(int column) | Ngabalikeun tipe data tina kolom husus nu geus kami lulus salaku parameter |
String getTableName(int kolom) | Ngabalikeun nami tabel tina kolom |
String getSchemaName(kolom int) | Ieu |