Mengakses Field Date pada Database Oracle

As always… ini tulisan rekues! Sebenernya udah lama c yah… dan orangnya yang ngerikues udah nerima jawabannya. Tinggal jawaban balik buat gw dibolehin apa enggak mosting yang dia tanyain di sini… Dan jawabannya, “terserah ajah”. Berhubung kemaren2 gw lagi di luar kota, nih tulisan baru jadi sekarang. 😀

Apapun prolog di atas, intinya si Aa’ nanya ke gw, gimana caranya kerja pake database Oracle, terus di database itu ada field yang tipe-nya Date. Kalo ajah dia nyari tutorialnya di stackoverflow, percayalah… itu jawaban bakal langsung nemu! Tapi, berhubung nih si Aa’ males ngeliat apapun, jadi dia tanya gw ajah. Katanya gw kan mantan asisten OOP. Hhhh… baiklah. (-_-)

Gimana caranya ngakses field itu? Gw tulisin jawabannya singkat ajah yak… Intinya, kalo insert, pake kuerinya gini:

String kueri = "INSERT INTO pergudangan (IDBARANG, NAMA, TGL_MASUK, STOK) VALUES (?,?,to_date(?,'DD-MM-YYYY','NLS_DATE_LANGUAGE = American'),?)";

Itu si Aa’ pake PreparedStatement, makanya ada tanda tanya gitu… intinya c pas masukin tanggal, bisa masukin pake format DD-MM-YYYY pas nulisinnya. Terus pas di ResultSet pake kode:

ps.setString(3,"27-05-2014");

Atau kalau kamu gak keberatan pake format “YYYY-DD-MM”, bisa pake java.sql.Date… caranya gini:

Date d = Date.valueOf("2014-11-15");
ps.setDate(3,d);

Yang paling penting dari hal di atas, kelas Date di sana diambil untuk class Date dari package java.sql… bukan java.util, yah. Si Aa’ berkali-kali gagal nyoba, gara2 dia ngira tipe Date di atas itu tipe Date dari java.util. Dan yang paling penting jugak buat kamu ketahui, kedua class ini walo namanya sama, mereka gak bisa di-casting gitu ajah. Boleh ajah kamu berhasil ngelakuin casting… tapi tolong kasi kodenya di kotak komentar yak. Gw jugak pengen tau… 😛

Teruuuuss… kalo kamu mau tau gimana caranya ngambil sysdate (tanggal dari system), kamu bisa pake bantuan dari class Date dari package java.util. Di sini, kamu bisa mengkolaborasikan kedua class Date itu. Caranya:

java.util.Date d1 = new java.util.Date();
Date d = new Date(d1.getTime());
ps.setDate(3,d);

Intinya, kamu bikin objek java.sql.Date dengan bantuan dari objek java.util.Date, tepatnya untuk memanggil method “getTime()”, yang bisa ngambil sysdate…

Dan…. trik terakhir, kalo kamu mau ngambil tipe Date dari ResultSet, dan kamu maunya nampilin pake format “dd-MM-YYYY”, ada class yang namanya “SimpleDateFormat”. Pake class itu, kamu bisa atur format tanggalnya. Caranya gini:

Date d = rs.getDate(3);
SimpleDateFormat sm = new SimpleDateFormat("dd-MM-YYYY");
System.out.println("Tanggal: "+sm.format(d));

Dan begitulah….

Kalau kamu mau tau penggalan kode di atas sebenernya lengkapnya tuh gimana… boleh disimak kode di bawah ini:

Untuk kelas Koneksi (KoneksiDB.java)… kelas ini buat ngecek JDBC ama ngembaliin objek class Connection. Kelas ini kebiasaan aja digunain pas kuliah dulu. Gak harus c, cuma ya itu… udah kebiasa… makanya adaan.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class KoneksiDB{
	private Connection conn;
	private final String DB_DRIVER="oracle.jdbc.driver.OracleDriver";
	private final String DB_URL="jdbc:oracle:thin:@localhost:1521/XE";
	private final String USERNAME="";
	private final String PASSWORD="";
	
	public void bukaKoneksi(){
		boolean flag = false;
		try{
			Class.forName(DB_DRIVER);
		}catch(ClassNotFoundException ex){
			System.out.println(ex.getMessage());
			flag = true;
		}
		if(!flag){
			try{
				conn = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
			}catch(SQLException ex){
				System.out.println(ex.getMessage());
			}
		}
	}
	public Connection getConn(){
		return this.conn;
	}
}

Kelas Main yang digunain buat INSERT database:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Main{
	public static void main(String args[]){
		KoneksiDB k = new KoneksiDB();
		k.bukaKoneksi();
		Connection kon = k.getConn();
		String kueri = "INSERT INTO pergudangan (IDBARANG, NAMA, TGL_MASUK, STOK) VALUES (?,?,to_date(?,'DD-MM-YYYY','NLS_DATE_LANGUAGE = American'),?)";
		int rowAffect=0;
		try{
			PreparedStatement ps = kon.prepareStatement(kueri);
			ps.setString(1,"BRG04");
			ps.setString(2,"Tisu Kering");
			ps.setString(3,"27-05-2014");
			ps.setInt(4,20);
			rowAffect = ps.executeUpdate();
			ps.close();
		}catch(SQLException ex){
			System.out.println(ex);
		}
		if(rowAffect==0){
			System.out.println("Query Gagal");
		}else{
			System.out.println("Query Berhasil");
		}
		
	}
}

Kelas Main… contoh buat ngambil value dari string dengan format “YYYY-MM-DD”:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;

public class Main{
	public static void main(String args[]){
		KoneksiDB k = new KoneksiDB();
		k.bukaKoneksi();
		Connection kon = k.getConn();
		String kueri = "INSERT INTO pergudangan (IDBARANG, NAMA, TGL_MASUK, STOK) VALUES (?,?,?,?)";
		int rowAffect=0;
		try{
			PreparedStatement ps = kon.prepareStatement(kueri);
			ps.setString(1,"BRG03");
			ps.setString(2,"Sabun Cuci");
			Date d = Date.valueOf("2014-11-15");
			ps.setDate(3,d);
			ps.setInt(4,100);
			rowAffect = ps.executeUpdate();
			ps.close();
		}catch(SQLException ex){
			System.out.println(ex);
		}
		if(rowAffect==0){
			System.out.println("Query Gagal");
		}else{
			System.out.println("Query Berhasil");
		}
		
	}
}

Kelas Main yang dibikin buat ngambil sysdate:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;

public class Main{
	public static void main(String args[]){
		KoneksiDB k = new KoneksiDB();
		k.bukaKoneksi();
		Connection kon = k.getConn();
		String kueri = "INSERT INTO pergudangan (IDBARANG, NAMA, TGL_MASUK, STOK) VALUES (?,?,?,?)";
		int rowAffect=0;
		try{
			PreparedStatement ps = kon.prepareStatement(kueri);
			ps.setString(1,"BRG03");
			ps.setString(2,"Sabun Cuci");
			java.util.Date d1 = new java.util.Date();
			Date d = new Date(d1.getTime());
        	ps.setDate(3,d);
			ps.setInt(4,100);
			rowAffect = ps.executeUpdate();
			ps.close();
		}catch(SQLException ex){
			System.out.println(ex);
		}
		if(rowAffect==0){
			System.out.println("Query Gagal");
		}else{
			System.out.println("Query Berhasil");
		}
		
	}
}

dan terakhir…. kelas Main buat nampilin tanggal pake format “dd-MM-YYYY”:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;

public class Main{
	public static void main(String args[]){
		KoneksiDB k = new KoneksiDB();
		k.bukaKoneksi();
		Connection kon = k.getConn();
		
		String kueri="SELECT * FROM pergudangan";
		ResultSet rs = null;
		try{
			PreparedStatement ps = kon.prepareStatement(kueri);
			rs = ps.executeQuery();
			while(rs.next()){
				System.out.println("ID Barang: "+rs.getString(1));
				System.out.println("Nama Barang: "+rs.getString(2));
				Date d = rs.getDate(3);
				System.out.println("Tanggal Masuk: "+rs.getString(3));
				SimpleDateFormat sm = new SimpleDateFormat("dd-MM-YYYY");
				
				System.out.println("Tanggal: "+sm.format(d));
				System.out.println("Stok: "+rs.getInt(4)+"\n");
			}
		}catch(SQLException ex){
			System.out.println(ex);
		}
		
	}
}

Begitulaaahhh~~ moga ngebantu yah, guyz….

Valid?: Banget.
Masa Kadaluarsa: Gak tau.
Sumber: stackoverflow, pribadi.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s