Tutorial ini menjelaskan cara menggunakan JDBC ResultSet untuk mengambil data. Kita juga akan belajar tentang antarmuka ResultSetMetaData dan DatabaseMetaData dengan contoh:
Di dalam JDBC DriverManager tutorial tentang Seri tutorial JDBC kita telah mempelajari cara menggunakan JDBC DriverManager dan metode-metodenya, JDBC PreparedStatement dalam aplikasi Java.
Pada tutorial ini, kita akan membahas interface yang tersisa di JDBC. Kita telah membahas interface Statement, PreparedStatement, dan CallableStatement di tutorial sebelumnya.
Di sini, kita akan belajar tentang antarmuka JDBC ResultSet, ResultSetMetaData, dan DatabaseMetaData, metode-metodenya, dan cara menggunakan metode-metode tersebut dalam program Java.
Antarmuka JDBC ResultSet
Antarmuka ResultSet terdapat pada paket java.sql. Antarmuka ini digunakan untuk menyimpan data yang dikembalikan dari tabel database setelah eksekusi pernyataan SQL dalam Program Java. Objek ResultSet mempertahankan titik kursor pada data hasil. Secara default, posisi kursor berada di depan baris pertama data hasil.
Metode next() digunakan untuk memindahkan kursor ke posisi berikutnya dalam arah maju. Metode ini akan mengembalikan FALSE jika tidak ada lagi record. Metode ini mengambil data dengan memanggil metode executeQuery() menggunakan salah satu objek statement. Objek tersebut bisa berupa Statement atau PreparedStatement atau CallableStatement. Antarmuka PreparedStatement dan CallableStatement merupakan sub-antarmuka dari Statementantarmuka.
Antarmuka Pernyataan
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery("Select * from EMPLOYEE_DETAIL");
Antarmuka Laporan Persiapan
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAIL");
Kita dapat menggunakan metode getX() untuk mendapatkan data dari kolom sambil mengulang-ulang hasil di mana X - adalah tipe data dari kolom tersebut. Kita dapat menggunakan Nama Kolom atau Indeks untuk mendapatkan nilai dengan menggunakan metode getX().
while(rs1.next()) { int empNum = rs1.getInt("empNum"); String namaLahir = rs1.getString("namaLahir"); String namaPertama = rs1.getString("namaPertama"); String email = rs1.getString("email"); String deptNum = rs1.getString("deptNum"); String gaji = rs1.getString("gaji"); System.out.println(empNum + ", "+namaLahir +", "+namaPertama +", "+email +", "+deptNum +", "+gaji); }
Kita juga dapat menyebutkan nomor indeks Kolom sebagai pengganti Nama Kolom dalam 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 gaji = rs1.getString(6); System.out.println(empNum + ", "+lastName+", "+firstName+", "+email +", "+deptNum +", "+gaji); }
Jenis Kumpulan Hasil
Secara default, kita dapat mengiterasi data/nilai dalam ResultSet yang telah dikembalikan sebagai output dari pernyataan SQL yang dieksekusi dalam arah maju. Kita dapat mengiterasi nilai dalam arah lain menggunakan Scrollable ResultSet. Kita dapat menentukan tipe dan konkurensi ResultSet saat membuat objek Statement, PreparedStatement, dan CallableStatement.
Ada 3 jenis dalam ResultSet, yaitu:
- TYPE_FORWARD_ONLY: Ini adalah opsi default, di mana kursor bergerak dari awal hingga akhir, yaitu ke arah depan.
- TYPE_SCROLL_INSENSITIVE: Pada tipe ini, kursor akan bergerak ke arah maju dan mundur. Jika kita melakukan perubahan pada data saat mengiterasi data yang tersimpan, maka data tidak akan diupdate di dataset jika ada yang mengubah data di DB. Karena dataset memiliki data sejak query SQL mengembalikan data.
- TYPE_SCROLL_SENSITIVE: Ini mirip dengan TYPE_SCROLL_INSENSITIVE, perbedaannya adalah jika ada yang memperbarui data setelah Query SQL mengembalikan data, saat melakukan iterasi, hal itu akan merefleksikan perubahan pada kumpulan data.
Konkurensi ResultSet
Ada 2 mode Konkurensi di ResultSet, yaitu:
- ResultSet.CONCUR_READ_ONLY: Ini adalah mode konkurensi default. Kita hanya dapat membaca data di ResultSet. Pembaruan tidak berlaku.
- ResultSet.CONCUR_UPDATE: Kita dapat memperbarui data dalam objek ResultSet.
Beberapa database tidak mendukung mode konkurensi untuk semua tipe ResultSet. Dalam hal ini, kita perlu memeriksa apakah database tersebut mendukung tipe dan mode konkurensi yang kita inginkan dengan menggunakan metode supportsResultSetConcurrency().
Metode Dalam Antarmuka ResultSet
Ada 4 kategori metode ResultSet, yaitu:
- Metode Navigasi
- Metode Pengambil
- Metode Pengatur
- Metode Lain-lain
Pertama, kita akan membahas Metode Navigasi dan kemudian akan melangkah lebih jauh.
#1) Metode Navigasi
Metode ini digunakan untuk memindahkan kursor di sekitar kumpulan data.
- Boolean absolut (int baris): Ini digunakan untuk memindahkan kursor ke baris tertentu yang disebutkan dalam parameter dan mengembalikan nilai true jika operasi berhasil, jika tidak, kembalikan nilai false.
- Void afterLast(): Ini membuat kursor ResultSet bergerak setelah baris terakhir.
- Void beforeFirst(): Ini membuat kursor ResultSet berpindah sebelum baris pertama.
- Boolean pertama(): Ini membuat kursor ResultSet berpindah ke baris pertama. Ini mengembalikan nilai True jika operasi berhasil, jika tidak, False.
- Boolean last(): Ini membuat kursor ResultSet berpindah ke baris terakhir. Ini mengembalikan nilai True jika operasi berhasil, jika tidak, False.
- Boolean next(): Ini membuat kursor ResultSet berpindah ke baris berikutnya. Ini mengembalikan True jika ada lebih banyak catatan dan False jika tidak ada lagi catatan.
- Boolean sebelumnya (): Ini membuat kursor ResultSet berpindah ke baris sebelumnya. Ini mengembalikan nilai True jika operasi berhasil, jika tidak, False.
- Relatif Boolean (): Ini memindahkan kursor ke jumlah baris yang diberikan baik ke arah maju atau mundur.
- Int getRow(): Ini mengembalikan nomor baris saat ini yang ditunjuk oleh objek ResultSet sekarang.
- Void moveToCurrentRow(): Ini memindahkan kursor kembali ke baris saat ini jika kursor sedang berada di baris sisipkan.
- Void moveToInsertRow(): Ini memindahkan kursor ke baris tertentu untuk menyisipkan baris ke dalam Database. Ini mengingat lokasi kursor saat ini. Jadi kita dapat menggunakan metode moveToCurrentRow () untuk memindahkan kursor ke baris saat ini setelah penyisipan.
Dalam tutorial ini, semua program ditulis dalam bahasa Java. Kami menggunakan versi Java 8 dan Oracle DB.
>>Anda dapat mengunduh perangkat lunak Oracle dari sini
>>Anda dapat mengunduh Java versi 8 dari sini
Ini memiliki proses instalasi Java langkah demi langkah.
Contoh Program JDBC ResultSet: (Menggunakan metode 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 Metode yang dibuat secara otomatis stub //Memilih query String select_query = "pilih * dariemployee_details"; Class.forName("oracle.jdbc.driver.OracleDriver"); //Menghubungkan ke Oracle DB try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:X E")) { //Membuat objek DatabaseMetaData DatabaseMetaData dbmd = conn.getMetaData(); //Pemeriksaan apakah driver mendukung tipe sensitif gulir dan menyetujui pembaruan boolean isSupportResultSetType =dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Membuat Statement yang telah disiapkan PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); // Memindahkan kursor ke baris pertama 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("Kursor mengarah ke sebelum baris pertama. Gunakan next() untuk bergerak ke arah depan"); //Memindahkan kursor untuk menunjuk baris pertama menggunakan next() rs.next(); System.out.println("BARIS PERTAMA \n NOMOR EMP = "+ rs.getInt("empNum") + "\n NAMA AKHIR = "+ rs.getString(2)+"\n NAMA PERTAMA = "+ rs.getString(3)); //Memindahkan kursor untuk menunjuk baris setelah baris terakhir rs.afterLast(); System.out.println("Kursormenunjuk pada setelah baris terakhir. Gunakan previous() untuk bergerak ke arah belakang"); //Memindahkan kursor ke titik baris terakhir menggunakan previous() rs.previous(); System.out.println("BARIS TERAKHIR \n NOMOR EMP = " + rs.getInt("empNum") + "\n NAMA AKHIR = "+ rs.getString(2) + "\n NAMA PERTAMA = " + rs.getString(3)); //Memindahkan kursor ke titik baris ketiga rs.absolute(3); System.out.println("Kursor menunjuk ke baris ke-3baris"); System.out.println("BARIS KETIGA \n NOMOR EMPAT = " + rs.getInt("empNum") + "\n NAMA TERAKHIR = "+ rs.getString(2) + "\n NAMA PERTAMA = "+ rs.getString(3)); //Memindahkan kursor ke baris sebelumnya dari baris ketiga rs.relative(-1); System.out.println("Kursor mengarah ke 1 baris sebelum baris ketiga"); System.out.println("BARIS KEDUA \n NOMOR EMPAT = "+ rs.getInt("empNum") + "\n NAMA TERAKHIR = "+rs.getString(2)+"\n NAMA PERTAMA = " + rs.getString(3)); //Memindahkan kursor ke baris ke-4 setelah baris ke-2 rs.relative(4); System.out.println("Kursor mengarah ke baris ke-4 setelah baris ke-2"); System.out.println("BARIS KEENAM \n NOMOR EMP = "+ rs.getInt("empNum") + "\n NAMA AKHIR = "+ rs.getString(2)+"\n NAMA PERTAMA = " + rs.getString(3)); //Memindahkan kursor ke baris saat iniSystem.out.println(" Baris Saat Ini = " + rs.getBaris()); } } catch (SQLException e) { e.printStackTrace(); } }
KELUARAN:
Data dalam tabel Employee_details
Penjelasan:
Pada program di atas kita telah mengimplementasikan metode first(), last(), beforeFirst(), afterLast(), next(), previous(), absolute(), relative() dan getRow() pada ResultSet. Untuk menggunakan metode-metode ini kita mengatur nilai ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATE pada metode prepareStatement.
Selanjutnya, kita akan membahas apa saja metode-metode pengambil yang ada di ResultSet:
#2) Metode Pengambil
ResultSet telah menyimpan data tabel dari Database. Metode Getter digunakan untuk mendapatkan nilai dari tabel di ResultSet. Untuk itu, kita perlu mengoper nilai Indeks kolom atau Nama Kolom.
Berikut ini adalah metode-metode pengambil di ResultSet:
- int getInt(int ColumnIndex): Ini digunakan untuk mendapatkan nilai dari kolom Indeks yang ditentukan sebagai tipe data int.
- float getFloat(int ColumnIndex): Ini digunakan untuk mendapatkan nilai Indeks kolom yang ditentukan sebagai tipe data float.
- java.sql.date getDate(int ColumnIndex): Ini digunakan untuk mendapatkan nilai Indeks kolom yang ditentukan sebagai nilai tanggal.
- int getInt(String NamaKolom): Ini digunakan untuk mendapatkan nilai dari kolom yang ditentukan sebagai tipe data int.
- float getFloat(String NamaKolom): Ini digunakan untuk mendapatkan nilai kolom yang ditentukan sebagai tipe data float.
- Java.sql.date getDate(String NamaKolom): Ini digunakan untuk mendapatkan nilai kolom yang ditentukan sebagai nilai tanggal.
Ada metode getter untuk semua tipe data primitif (Boolean, long, double) dan String juga di antarmuka ResultSet. Kita bisa mendapatkan tipe data array dan biner juga dari Database. Ada metode juga untuk itu.
#3) Metode Pengatur/Pembaru
Kita dapat memperbarui nilai dalam database menggunakan metode ResultSet Updater. Metode ini mirip dengan metode Getter, tetapi di sini kita perlu mengoper nilai/data untuk kolom tertentu untuk diperbarui dalam database.
Berikut ini adalah metode pemutakhiran di ResultSet:
- void updateInt(int ColumnIndex, int Value): Ini digunakan untuk memperbarui nilai Indeks kolom yang ditentukan dengan nilai int.
- void updateFloat(int ColumnIndex, float f): Ini digunakan untuk memperbarui nilai Indeks kolom yang ditentukan dengan nilai float.
- void updateDate(int ColumnIndex, Date d): Ini digunakan untuk memperbarui nilai Indeks kolom yang ditentukan dengan nilai tanggal.
- void updateInt(String NamaKolom, int Nilai): Ini digunakan untuk memperbarui nilai kolom yang ditentukan dengan nilai int yang diberikan.
- void updateFloat(String NamaKolom, float f): Ini digunakan untuk memperbarui nilai kolom yang ditentukan dengan nilai float yang diberikan.
- Java.sql.date getDate(String NamaKolom): Ini digunakan untuk memperbarui nilai kolom yang ditentukan dengan nilai tanggal yang diberikan.
Terdapat metode Updater untuk semua tipe data primitif (Boolean, long, double) dan String juga di antarmuka ResultSet.
Metode updater hanya memperbarui data dalam objek ResultSet. Nilai akan diperbarui dalam DB setelah memanggil metode insertRow atau updateRow.
Memperbarui Baris:
Kita dapat memperbarui data dalam sebuah baris dengan memanggil metode updateX(), memberikan nama kolom atau indeks, dan nilai yang akan diperbarui. Kita dapat menggunakan tipe data apa saja sebagai pengganti X dalam metode updateX. Sampai saat ini, kita telah memperbarui data dalam objek ResultSet. Untuk memperbarui data dalam DB, kita harus memanggil metode updateRow().
Memasukkan Baris:
Kita perlu menggunakan moveToInsertRow() untuk memindahkan kursor untuk menyisipkan baris baru. Kita telah membahas hal ini pada bagian metode navigasi. Selanjutnya, kita perlu memanggil metode updateX() untuk menambahkan data pada baris. Kita harus menyediakan data untuk semua kolom jika tidak, maka akan menggunakan nilai default dari kolom tersebut.
Setelah memperbarui data, kita perlu memanggil metode insertRow(). Kemudian gunakan metode moveToCurrentRow(), untuk membawa posisi kursor kembali ke baris di mana kita berada sebelum kita mulai menyisipkan baris baru.
Contoh 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 Metode yang dibuat secara otomatis 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"); //Sambungan ke DB Oracle try(Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE")) { //Membuat objek DatabaseMetaData DatabaseMetaData dbmd = conn.getMetaData();//Memeriksa apakah driver mendukung tipe scroll insensitive dan concur yang dapat diperbarui boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Membuat pernyataan yang telah dipersiapkan PreparedStatement pstatemnt1 =conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Memindahkan kursor ke titik baris terakhir tabel rs.last(); System.out.println("BARIS TERAKHIR : Sebelum memasukkan Karyawan baru"); System.out.println("BARIS TERAKHIR : EMPNUM = " + rs.getInt(1)); System.out.println("\n EMP NUM = " + rs.getInt("empNum") + "\nNAMA AKHIR = "+ rs.getString(2)+"\n NAMA DEPAN = " + rs.getString(3)); // Mengatur nilai yang akan disisipkan ke dalam Tabel EMPLOYEE_DETAIL //Memindahkan kursor untuk menyisipkan sebuah baris ke dalam tabel rs.moveToInsertRow(); //Memperbarui nilai EMPNUM rs.updateInt(1, 1017); //Memperbarui nilai NAMA AKHIR rs.updateString(2, "Bond"); //Memperbarui nilai NAMA DEPAN rs.updateString(3, "James"); //Memasukkan sebuah baris baru rs.insertRow();//Memindahkan kursor ke titik baris ke-5 rs.absolute(5); System.out.println("Sebelum Mengupdate EMPNUM dari ROW ke-5"); System.out.println("\n NOMOR EMP = "+ rs.getInt("empNum") + "\n NAMA AKHIR = "+ rs.getString(2)+"\n NAMA DEPAN = "+ rs.getString(3)); System.out.println("Mengupdate id EMP dari KARYAWAN ke-5"); //Memperbaharui EMPNUM baris ke-5 rs.updateInt(1.3005); rs.updateRow(); System.out.println("\n EMPNUM = " + 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(); } }}
KELUARAN:
Penjelasan:
Pada program di atas apa yang telah kita lakukan adalah pertama, kita menyimpan data dari tabel employee_details di objek ResultSet dengan menggunakan query SELECT. Kemudian, kita menampilkan data dari baris terakhir pada tabel employee_details dengan menggunakan method last() dari ResultSet. method moveToInsertRow() membuat kursor menunjuk baris saat ini, sekarang baris saat ini adalah baris terakhir.
Metode updateXXX() digunakan untuk memperbarui nilai pada baris dan metode insertRow() telah menyisipkan data pada baris baru. Dengan menggunakan metode absolute(), kita membuat kursor mengarah ke baris ke-5. Metode updateInt() telah digunakan untuk memperbarui EMPNUM dengan id baru dari karyawan ke-5 pada tabel tersebut. Setelah itu, tampilkan data tersebut untuk mengecek apakah EMPNUM telah diperbarui atau belum.
Membuat kursor menunjuk baris terakhir dari tabel menggunakan last() dan menampilkannya. Untuk melakukan logika di atas, kita perlu mengatur nilai ResultSet.TYPE_SCROLL_INSENSITIVE dan ResultSet.CONCUR_UPDATABLE dalam metode prepareStatement.
#4) Metode Lain-lain
- void close(): Ini digunakan untuk menutup instance ResultSet dan membebaskan sumber daya yang terkait dengan instance ResultSet.
- ResultSetMetaData getMetaData(): Ini mengembalikan Instance ResultSetMetaData yang memiliki informasi tentang jenis dan properti kolom dari keluaran kueri. Kita akan mempelajari lebih lanjut tentang ResultSetMetaData di bagian selanjutnya.
ResultSetMetaData
Apa yang dimaksud dengan Metadata?
Metadata berarti data tentang data. Dengan menggunakan antarmuka ini, kita akan mendapatkan lebih banyak informasi tentang ResultSet. Ini tersedia dalam paket java.sql. Setiap objek ResultSet diasosiasikan dengan satu objek ResultSetMetaData.
Objek ini akan memiliki rincian properti kolom seperti tipe data kolom, nama kolom, jumlah kolom, nama tabel, nama skema, dll., Kita bisa mendapatkan objek ResultSetMetaData menggunakan metode getMetaData() dari ResultSet.
Sintaks dari ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery("Select * from EMPLOYEE_DETAILS"); ResultSetMetaData rs.getMetaData();
Metode-metode penting antarmuka ResultSetMetaData:
Nama Metode | Deskripsi |
---|---|
String getColumnName(int kolom) | Ini mengembalikan nama kolom dari kolom tertentu |
String getColumnTypeName(int kolom) | Ini mengembalikan tipe data dari kolom tertentu yang telah kita lewati sebagai parameter |
String getTableName(int kolom) | Ini mengembalikan nama tabel dari kolom |
String getSchemaName(int kolom) | Ini mengembalikan nama skema dari tabel kolom |
int getColumnCount() | Ini mengembalikan jumlah kolom dari ResultSet |
boolean isAutoIncrement (int Kolom) | Ini mengembalikan nilai benar jika kolom yang diberikan adalah Auto Increment, jika tidak salah |
boolean isCaseSensitive(int Kolom) | Ini mengembalikan nilai true jika Kolom yang diberikan adalah Case Sensitive, jika tidak, false |
Contoh ResultSetMetaData
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 Metode yang dibuat secara otomatis stub String QUERY= "select * fromemployee_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 rs1 = rs1.getMetaData(); System.out.println("Kita sedang menggunakan ResultSetMetaData");System.out.println("Jumlah Kolom: "+ rsmd.getColumnCount()); System.out.println("Nama Kolom Kolom 1: "+ rsmd.getColumnName(1)); System.out.println("Tipe Data Kolom 2: "+ rsmd.getColumnTypeName(2)); System.out.println("Nama Tabel Kolom 1: "+ rsmd.getTableName(1)); System.out.println("Nama Skema Kolom 1: "+ rsmd.getSchemaName(1)); } } }
KELUARAN:
Penjelasan:
Pada program di atas, kita telah mengimplementasikan metode getColumnCount(), getColumnName(), getColumnTypeName(), getTableName(), dan getSchemaName() pada antarmuka ResultSetMetaData.
DatabaseMetaData
Antarmuka DatabaseMetaData memberikan informasi tentang Database seperti DatabaseName, versi Database, dan sebagainya.
Metode-metode penting antarmuka DatabaseMetaData:
Nama Metode | Deskripsi |
---|---|
String getDriverName() | Ini akan mengembalikan nama driver JDBC yang kita gunakan dalam program Java kita |
String getDriverVersion() | Ini mengembalikan nomor versi driver JDBC |
String getUserName() | Ini mengembalikan nama pengguna dari Basis Data yang kita gunakan |
String getDatabaseProductName() | Mengembalikan nama Database yang kita gunakan |
String getDatabaseProductVersion() | Mengembalikan nomor versi Database yang kita gunakan |
ResultSet getSchemas() | Ini mengembalikan nama-nama skema yang tersedia di Database yang terhubung |
String getStringFunctions() | Ini mengembalikan daftar fungsi string yang tersedia di Database yang terhubung |
String getTimeDateFunctions() | Ini mengembalikan daftar fungsi waktu dan tanggal yang tersedia dalam Database yang terhubung |
String getURL() | Ini mengembalikan URL untuk Database |
Boolean isReadOnly() | Ini mengembalikan apakah basis data dalam mode hanya-baca |
Boolean mendukungBatchUpdates() | Ini mengembalikan apakah database mendukung pembaruan batch |
Boolean supportsSavepoints() | Ini mengembalikan apakah Basis Data mendukung Savepoints |
Boolean mendukungStatementPooling() | Ini mengembalikan apakah Basis Data mendukung Penyatuan Pernyataan |
Boolean mendukungProsedur Tersimpan() | Ini mengembalikan apakah Basis Data mendukung prosedur Tersimpan |
Boolean mendukungOuterJoins() | Mengembalikan apakah basis data mendukung Gabungan Luar |
Di sini, kami mencantumkan beberapa metode penting dari antarmuka DatabaseMetaData. Anda dapat merujuk ke situs resmi Oracle di mana Anda dapat melihat semua metode yang tersedia di antarmuka DatabaseMetaData.
Contoh 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 Rintisan metode yang dibuat secara otomatisClass.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:system/pass123@localhost:1521:XE"); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println("Menggunakan DatabaseMetaData"); System.out.println("Nama Driver : "+ dbmd.getDriverName()); System.out.println("Versi Driver : "+ dbmd.getDriverVersion()); System.out.println("Nama PenggunaDatabase: " + dbmd.getUserName()); System.out.println("Nama Produk Database: " + dbmd.getDatabaseProductName()); System.out.println("Versi Produk Database: " + dbmd.getDatabaseProductVersion()); System.out.println("Daftar Fungsi String di Database: " + dbmd.getStringFunctions()); System.out.println("Daftar Fungsi Waktu dan Tanggal di Database: " + dbmd.getTimeDateFunctions());System.out.println("URL dari Database: " + dbmd.getURL()); System.out.println("Database hanya dapat dibaca? " + dbmd.isReadOnly()); System.out.println("Mendukung Pembaruan Batch? " + dbmd.supportsBatchUpdates()); System.out.println("Mendukung savepoints? " + dbmd.supportsSavepoints()); System.out.println("Mendukung Penyatuan Laporan? " + dbmd.supportsStatementPooling()); System.out.println("Mendukung StoredProcedures? " + dbmd.supportsStoredProcedures()); System.out.println("Support Outer Join? " + dbmd.supportsOuterJoins()); } }
KELUARAN:
Penjelasan:
Pada program di atas, kita telah menggunakan/mengimplementasikan metode getDriverName(), getDriverVersion(), getUserName(), getDatabaseProductName(), getDatabaseProductVersion(), getStringFunctions(), getTimeDateFunctions(), getURL(), isReadOnly(), supportsBatchUpdates(), supportsStatementPooling(), supportsSavepoint(), supportsStoredProcedures(), dan supportsOutJoins() pada DatabaseMetaData Interface.
Hal-hal yang perlu diperhatikan:
- Antarmuka JDBC ResultSet digunakan untuk menyimpan data dari database dan menggunakannya dalam program Java kita.
- Kita juga dapat menggunakan ResultSet untuk memperbarui data menggunakan metode updateXXX().
- Objek ResultSet mengarahkan kursor ke sebelum baris pertama dari data hasil. Dengan menggunakan metode next(), kita dapat mengulang melalui ResultSet.
- Kita memiliki metode navigasi ResultSet untuk bergerak lebih jauh dalam objek ResultSet
- ResultMetaData digunakan untuk mendapatkan informasi lebih lanjut mengenai ResultSet seperti nama kolom, jumlah kolom, tipe data kolom, dll.
- DatabaseMetData digunakan untuk mendapatkan informasi tentang database yang telah kita hubungkan
Pertanyaan yang Sering Diajukan
T #1) Apa gunanya ResultSet?
Jawaban: ResultSet digunakan untuk menyimpan dan mengambil data dari DB. Ketika method executeQuery() telah dieksekusi, ia akan mengembalikan objek ResultSet. Kita dapat menggunakan objek ResultSet tersebut dalam program kita untuk melakukan logika.
T # 2) Bagaimana cara memeriksa apakah ResultSet kosong atau tidak?
Jawaban: Tidak ada metode yang sudah ditentukan seperti length(), size() yang tersedia untuk memeriksa apakah IsResultSet Kosong. Kita dapat menggunakan metode next() untuk melakukan iterasi dan jika mengembalikan True, maka itu tidak kosong, jika mengembalikan False berarti ResultSet kosong.
T #3) Apakah mungkin ResultSet bisa bernilai null?
Jawaban: Tidak, metode executeQuery() mengembalikan objek ResultSet yang tidak boleh bernilai null.
T #4) Apa yang dimaksud dengan ResultSet yang dapat diperbarui?
Jawaban: Objek ResultSet yang dapat diperbarui digunakan untuk memperbarui data dalam kolom, menyisipkan data dalam kolom dan menghapus baris. Untuk membuat ResultSet sebagai objek yang dapat diperbarui, kita perlu membuat tipe gulir sebagai sensitif atau tidak sensitif dan tipe CONCUR sebagai dapat diperbarui.
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATE.
T #5) Bagaimana cara mendapatkan nama Database yang telah terhubung?
Jawaban: Kita dapat menggunakan metode getDatabaseProductName() dari objek DatabaseMetaData.
Kesimpulan
Pada tutorial ini, kita telah membahas apa itu interface ResultSet, ResultSetMetaData, dan DatabaseMetaData serta metode-metode penting yang biasa digunakan dalam program JDBC. Kita juga telah melihat bagaimana cara mengupdate data di DB menggunakan ResultSet. ResultSetMetaData berisi informasi mengenai ResultSet seperti Nama Kolom, Jumlah Kolom, dan lain sebagainya.
DatabaseMetaData berisi informasi Database.
<