JDBC : Mengambil Informasi Meta Data

posted Sep 1, 2011, 4:16 AM by Editor KursusInternet   [ updated Sep 17, 2011, 6:29 PM by Feris Thia ]

Pendahuluan

Meta Data adalah informasi mengenai data seperti nama kolom, tipe data pada kolom tersebut, panjang maximum data, dan sebagainya. Untuk mengambil informasi ini kita gunakan objek Statement, ResultSet, dan ResultSetMetaData. Kita mengambil kumpulan / array meta data ini dengan method getMetaData() dari ResultSet.

Contoh potongan program yang menggunakan ketiga objek tersebut adalah sebagai berikut.

      stmt = koneksi.createStatement();
      rs = stmt.executeQuery("SELECT * FROM ms_produk");
      rsmetadata = rs.getMetaData();
      for(int i=1; i<=rsmetadata.getColumnCount();i++)
      {
        System.out.println(rsmetadata.getColumnName(i));      
      }

Gambar berikut menunjukkan meta data dari table ms_produk pada SQL Server 2008 R2. Dan bagian berikut di bawah menunjukkan contoh kode potongan program Java lengkap untuk mengambil informasi meta data tersebut.


Gambar 1. Meta Data dari Table ms_produk

Contoh Kode mengambil Meta Data dari Table ms_produk

package com.kursus.internet.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class AmbilMetaData {

  public static String tipeDataString(int tipeDataInt)
  {
    String tipedata = "";
    switch (tipeDataInt) {
      case java.sql.Types.ARRAY : tipedata = "ARRAY"break;
      case java.sql.Types.BIGINT : tipedata = "BIGINT"break;
      case java.sql.Types.BINARY : tipedata = "BINARY"break;
      case java.sql.Types.BIT : tipedata = "BIT"break;
      case java.sql.Types.BLOB : tipedata = "BLOB"break;
      case java.sql.Types.BOOLEAN : tipedata = "BOOLEAN"break;
      case java.sql.Types.CHAR : tipedata = "CHAR"break;
      case java.sql.Types.CLOB : tipedata = "CLOB"break;
      case java.sql.Types.DATALINK : tipedata = "DATALINK"break;
      case java.sql.Types.DATE : tipedata = "DATE"break;
      case java.sql.Types.DECIMAL : tipedata = "DECIMAL"break;
      case java.sql.Types.DISTINCT : tipedata = "DISTINCT"break;
      case java.sql.Types.DOUBLE : tipedata = "DOUBLE"break;
      case java.sql.Types.FLOAT : tipedata = "FLOAT"break;
      case java.sql.Types.INTEGER : tipedata = "INTEGER"break;
      case java.sql.Types.JAVA_OBJECT : tipedata = "JAVA_OBJECT"break;
      case java.sql.Types.LONGNVARCHAR : tipedata = "LONGNVARCHAR"break;
      case java.sql.Types.LONGVARBINARY : tipedata = "LONGVARBINARY"break;
      case java.sql.Types.LONGVARCHAR : tipedata = "LONGVARCHAR"break;
      case java.sql.Types.NCHAR : tipedata = "NCHAR"break;
      case java.sql.Types.NCLOB : tipedata = "NCLOB"break;
      case java.sql.Types.NULL : tipedata = "NULL"break;
      case java.sql.Types.NUMERIC : tipedata = "NUMERIC"break;
      case java.sql.Types.NVARCHAR : tipedata = "NVARCHAR"break;
      case java.sql.Types.OTHER : tipedata = "OTHER"break;
      case java.sql.Types.REAL : tipedata = "REAL"break;
      case java.sql.Types.REF : tipedata = "REF"break;
      case java.sql.Types.ROWID : tipedata = "ROWID"break;
      case java.sql.Types.SMALLINT : tipedata = "SMALLINT"break;
      case java.sql.Types.SQLXML : tipedata = "SQLXML"break;
      case java.sql.Types.STRUCT : tipedata = "STRUCT"break;
      case java.sql.Types.TIME : tipedata = "TIME"break;
      case java.sql.Types.TIMESTAMP : tipedata = "TIMESTAMP"break;
      case java.sql.Types.TINYINT : tipedata = "TINYINT"break;
      case java.sql.Types.VARBINARY : tipedata = "VARBINARY"break;
      case java.sql.Types.VARCHAR : tipedata = "VARCHAR"break;
      default: tipedata = "UNDEFINED"break;  
    }
    return tipedata;
  }
  public static void main(String[] args) {
    Connection koneksi = null;
    Statement stmt = null;
    ResultSet rs = null;
    ResultSetMetaData rsmetadata = null
    String namaClassDriver = "net.sourceforge.jtds.jdbc.Driver";
    String urlKoneksi = "jdbc:jtds:sqlserver://localhost/phi_minimart";

    Properties connectionProps = new Properties();
    connectionProps.put("user""kursusinternet");
    connectionProps.put("password""kursusinternet");

    try {
      Class.forName(namaClassDriver);
      koneksi = DriverManager.getConnection(urlKoneksi, connectionProps);

      stmt = koneksi.createStatement();
      rs = stmt.executeQuery("SELECT * FROM ms_produk");
      rsmetadata = rs.getMetaData();
      for(int i=1; i<=rsmetadata.getColumnCount();i++)
      {
        System.out.print("Nama Kolom = " + rsmetadata.getColumnName(i));      
        System.out.print(", Tipe Data = " + tipeDataString(rsmetadata.getColumnType(i)));
        System.out.print(", Panjang Data = " + rsmetadata.
getPrecision(i));
        System.out.println(", Desimal = " + rsmetadata.getScale(i));
      }
    catch (SQLException e) {
      e.printStackTrace();
    catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    finally {
      try {
        if(rs != nullrs.close();
        if(stmt != nullstmt.close();
        if(koneksi != nullkoneksi.close();
      catch (SQLException e) {
        e.printStackTrace();
      }      
    }
  }
}

Hasil Eksekusi

Nama Kolom = kode_item, Tipe Data = VARCHAR, Panjang Data = 7, Desimal = 0
Nama Kolom = kode_produk, Tipe Data = VARCHAR, Panjang Data = 12, Desimal = 0
Nama Kolom = kode_kategori, Tipe Data = VARCHAR, Panjang Data = 7, Desimal = 0
Nama Kolom = nama_produk, Tipe Data = VARCHAR, Panjang Data = 100, Desimal = 0
Nama Kolom = unit, Tipe Data = INTEGER, Panjang Data = 10, Desimal = 0
Nama Kolom = kode_satuan, Tipe Data = VARCHAR, Panjang Data = 4, Desimal = 0

Catatan Tambahan

Coba bandingkan kembali hasil eksekusi dengan gambar sebelumnya, yang penulis tampilkan kembali disini. Sesuai bukan ?


Comments