Day 8: Object Java dan Object Oracle Database


Learning In HomeOriginal Date: 20 Januari 2009

Untuk memakai tipe data object di Oracle Database, selain menggunakan STRUCT, aku juga bisa membuat sebuah class Java yang bersesuaian. Sebagai latihan, hari ini aku akan membuat class yang merepresentasikan object Oracle dimana object Oracle tersebut merupakan turunan dari object lain, yaitu TYPE INDIVIDUAL_CIF UNDER CIF.

Pertama, aku akan membuat class Java yang merepresentasikan object parent CIF:


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

import oracle.sql.*;

public class CIF implements ORAData, 
  ORADataFactory {

  private final static CIF cif = 
    new CIF();
	
  public CHAR idNo;
  public CHAR accNo;	
	
  public CIF () {}
	
  public CIF (CHAR idNo, CHAR accNo) {
    this.idNo = idNo;
    this.accNo = accNo;
  }
	
  public static CIF getInstance() {
    return cif;
  }
	

  public Datum toDatum(Connection cn) 
      throws SQLException {
    StructDescriptor sd = StructDescriptor.
      createDescriptor("CIF", cn);
    Object[] attr = {idNo,accNo};
    return new STRUCT(sd, cn, attr);
  }


  public ORAData create(Datum datum, 
   int sqlType) throws SQLException {
    if (datum==null) return null;
      Object[] attr = ((STRUCT)datum).
         getOracleAttributes();
      return new CIF((CHAR) attr[0], 
         (CHAR) attr[1]);
  }
	
  public String toString() {
    return "CIF: IDNO = " + this.idNo + 
      "; ACCNO = " + this.accNo;
  }

}

Class di atas harus meng-implementasi-kan ORAData dan ORADataFactory, jika akan menggunakan fitur ekstensi JDBC dari Oracle. Jika portabilitas merupakan prioritas, class standar dari JDBC, SQLData.

Langkah berikutnya, aku membuat class turunan dari class sebelumnnya:


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

import oracle.sql.*;

public class IndividualCIF 
  extends CIF {
	
  public CHAR firstName;
  public CHAR lastName;
  public DATE birthDate;
	
  public final static IndividualCIF 
    individualCIF = new IndividualCIF();
	
  public IndividualCIF() {}
	
  public IndividualCIF(CHAR idNo, CHAR accNo, 
    CHAR firstName, CHAR lastName, 
    DATE birthDate) {
   super(idNo, accNo);
   this.firstName = firstName;
   this.lastName = lastName;
   this.birthDate = birthDate;
  }
	
  public static IndividualCIF 
    getInstance() {
   return individualCIF;
  }

  public Datum toDatum(Connection cn) 
    throws SQLException {
   StructDescriptor sd = 
     StructDescriptor.createDescriptor(
       "INDIVIDUAL_CIF", cn);
   Object[] attr = { super.idNo, super.accNo, 
      firstName, lastName, birthDate };
   return new STRUCT (sd, cn, attr);	
  }
	
  public ORAData create(Datum d, int sqlType) 
    throws SQLException {
     if (d==null) return null;
     Object[] attr = ((STRUCT)d).
       getOracleAttributes();
     return new IndividualCIF((CHAR)attr[0], 
       (CHAR)attr[1],(CHAR)attr[2], 
       (CHAR)attr[3], (DATE)attr[4]);		
  }
	

  public String toString() {
   return "CIFIndividual: ACC NO = " + 
       super.accNo + "; " +
       "ID NO = " + super.idNo + "; " +
       "FirstName = " + this.firstName + "; " +
       "LastName = " + this.lastName + "; " +
       "BirthDate = " + this.birthDate.dateValue();
  }
	
}

Selanjutnya, aku membuat sebuah class factory yang akan dipakai untuk menghasilkan salah satu dari kedua class di atas sesuai dengan tipe data ORACLE-nya:

import oracle.sql.*;

public class CIFFactory implements 
  ORADataFactory {

 public static final CIFFactory 
  cifFactory = new CIFFactory();

 public static CIFFactory 
   getInstance() {
     return cifFactory;
 }
	

 public ORAData create(Datum d, 
  int sqlType) throws SQLException {
   STRUCT s = (STRUCT) d;
   if (s.getSQLTypeName().equals(
     "SCOTT.CIF")) {
    return CIF.getInstance().
     create(d, sqlType);
   } else if (s.getSQLTypeName().equals(
     "SCOTT.INDIVIDUAL_CIF")) {
      return IndividualCIF.getInstance().
      create(d, sqlType);
   } else {
    return null;
   }
 }

}

Dan ini adalah potongan kode program utama yang mengambil data field dari tabel dalam bentuk salah satu dari class di atas:


Object cif  = rs.getORAData(1, 
  CIFFactory.getInstance());
System.out.println(cif);

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: