Kamis, April 05, 2007

OCCI Programming

Untuk mengakses database Oracle dari program yang dibuat dengan bahasa C++, Oracle telah menyediakan interface yang disebut OCCI. Pedoman pemrograman OCCI tersedia di website Oracle dan dapat didownload secara gratis di link ini.

Berikut ini sharing pengalaman saya menggunakan OCCI ini di pekerjaan yang sedang saya kerjakan.

Pola umum program:

Environment *env = Environment::createEnvironment(Environment::OBJECT);
try {
  Connection *con = env->createConnection(userName, password, connectString);
  Statement *stmt = con->createStatement(query);
  ResultSet *rs = stmt->executeQuery();
  ...
  stmt->closeResultSet(rs);
  con->terminateStatement(stmt);
  env->terminateConnection(con);
}
catch (SQLException &e) {
    cerr << "ERROR" << endl;
    cerr << e.getErrorCode() << endl;
    cerr << e.getMessage() << endl;
}


Potongan kode diatas merupakan pola umum untuk melakukan query ke database Oracle. userName, password, connectString merupakan variabel bertipe string yang isinya disesuaikan dengan informasi akses pengguna ke database yang hendak diakses. query merupakan variabel string yang berisi query yang hendak dijalankan terhadap database yang sedang diakses.

Untuk mempermudah penggunaan, saya membuat class sendiri untuk membungkus pemanggilan fungsi2 OCCI. Pola class yang saya gunakan :

class myocciclass
{
  private:
    Environment *env;
    Connection *conn;
    Statement *stmt;
    //properties lain
    ...
    //copy konstruktor
    myocciclass(const myocciclass&);
    //assignment
    myocciclass& operator= (const myocciclass&);

  public:
    //konstruktor
    inline myocciclass(const string& user, const string& passwd, const string& db);
    //destruktor
    inline ~myocciclass();
    //method lain
    ...
};

//konstruktor
inline myocciclass::myocciclass(const string& user, const string& passwd, const string& db) {
  this->env = Environment::createEnvironment (Environment::DEFAULT);
  this->conn = env->createConnection (user, passwd, db);
  this->stmt = conn->createStatement();
}
//destruktor
inline myocciclass::~myocciclass() {
  this->conn->terminateStatement (this->stmt);
  this->env->terminateConnection (this->conn);
  Environment::terminateEnvironment (this->env);
}


Class diatas dapat ditambahkan dengan properties dan method lain yang dibutuhkan. Dengan menggunakan class seperti ini, pengaksesan database akan lebih mudah, karena di program utama, cukup melakukan instantiasi object dari class myocciclass :

myocciclass *moc = new myocciclass (userName, password, db);


Selanjutnya tinggal memanggil mothod2 pada object moc yang telah didefinisikan. Program utama tidak perlu melakukan inisialisasi maupun menutup koneksi ke database Oracle, karena hal itu telah ditangani oleh class myocciclass.

Selamat memprogram menggunakan OCCI...

0 komentar: