Java
Connecting to Oracle using Java
0Tutorial kali ini adalah program dalam bahasa java untuk koneksi ke database oracle. Untuk dapat membangun koneksi ke database oracle kita memerlukan sebuah library java yang disebut JDBC (Java DataBase Connectivity). Tidak hanya ke oracle JDBC hampir bisa digunakan untuk semua RDBMS yang ada di pasaran. Untuk mensupport tipe data khusus yang ada di suatu database biasanya setiap vendor database menyediakan JDBC khusus untuk databasenya. Sebagai contoh Oracle, Oracle menyediakan library JDBC khusus oracle dengan tujuan untuk mensupport tipe data khusus yang hanya ada di oracle dan meningkatkan performansi. Kita tidak akan terlalu panjang membahas JDBC sekarang kita akan belajar langkah pertama dari JDBC membangun koneksi ke database. Urutan proses koneksi ke database adalah sebgai berikut :
- Load Driver
- Setup URL
- Membangun koneksi
Ok, sekarang coba kita buat sample java program untuk membuat koneksi ke database oracle. Pada contoh ini kita akan koneksi ke database local skema HR.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package oracleEx;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author Massri
*/
public class OracleConn {
private String username;
private String password;
private String serviceId;
private String servername;
private int port;
private static String driver = "oracle.jdbc.driver.OracleDriver";
private Connection conn;
public OracleConn() {
}
public OracleConn(String username, String password, String serviceId, String servername, int port) {
this.username = username;
this.password = password;
this.serviceId = serviceId;
this.servername = servername;
this.port = port;
this.conn = null;
}
public void Connect(){
try {
System.out.println("Conneting ...");
Class.forName(OracleConn.driver);
String url = "jdbc:oracle:thin:@" + this.servername + ":" + this.port + ":" + this.serviceId;
System.out.println("URL = "+ url);
this.conn = DriverManager.getConnection(url, this.username, this.password);
} catch (SQLException ex) {
System.err.println(ex.getMessage());
} catch (ClassNotFoundException ex) {
System.err.println(ex.getMessage());
}
}
public Connection getConnection(){
return this.conn;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getServername() {
return servername;
}
public void setServername(String servername) {
this.servername = servername;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public static void main(String[] args){
System.out.println("Testing Connecting to Database ");
OracleConn ora = new OracleConn();
ora.setServername("127.0.0.1");
ora.setUsername("HR");
ora.setPassword("HR");
ora.setPort(1521);
ora.setServiceId("ORACL");
ora.Connect();
System.out.println("Conn Resource" + ora.getConnection().toString());
}
}
Simpan program dengan nama file OracleConn.java dan compile kemudian setelah kita jalankan akan muncul hasil seperti berikut :
Testing Connecting to Database Conneting ... URL = jdbc:oracle:thin:@127.0.0.1:1521:ORCL Conn Resourceoracle.jdbc.driver.T4CConnection@12f6684 BUILD SUCCESSFUL (total time: 2 seconds)
Call Store Procedure dari Java
0Sebagai contoh saya mempunyai package oracle seperti dibawah ini
Secara umum format pemanggilan procedure di java dapat dilihat pada template coding dibawah ini :
CallableStatement cs;
try {
Memanggil prosedur tanpa parameter
cs = connection.prepareCall("{call myproc}");
cs.execute();
// Pemanggilan procedure dengan nama myprocin dengan satu parameter
cs = connection.prepareCall("{call myprocin(?)}");
// Set nilai parameter
cs.setString(1, "a string");
// Execute the stored procedure
cs.execute();
// Call a procedure with one OUT parameter
cs = connection.prepareCall("{call myprocout(?)}");
// Register the type of the OUT parameter
cs.registerOutParameter(1, Types.VARCHAR);
// Execute the stored procedure and retrieve the OUT value
cs.execute();
String outParam = cs.getString(1); // OUT parameter
// Call a procedure with one IN/OUT parameter
cs = connection.prepareCall("{call myprocinout(?)}");
// Register the type of the IN/OUT parameter
cs.registerOutParameter(1, Types.VARCHAR);
// Set the value for the IN/OUT parameter
cs.setString(1, "a string");
// Execute the stored procedure and retrieve the IN/OUT value
cs.execute();
outParam = cs.getString(1); // OUT parameter
} catch (SQLException e) {
}
berikutnya kita coba dengan sample menmanggil oracle procedure.
Java webMethods connectivity
0Hari ini saya mencoba konektivitas java dengan webMethods (softwareAG) dan mencoba memanggil service diwebmethods menggunakan java. Untuk pembuatan contoh service anda bisa melihat link berikut create flowservice webMethods.
Contoh yang dibuat disini menggunakan Netbeans untuk memudahkan coding nya. webMethods menyediakan Java API untuk connectivitas dengan java yang library nya ada di WMHOME/Developer/lib atau di WMHOME/IntegrationServer/lib dengan nama client.jar.
tempatkan client.jar ini pada classpath program kita dengan menambahkan library di Netbeans.
berikut contoh script untuk mengeksekusi service webMethods menggunakan java.
package webmethods;
import com.wm.app.b2b.client.Context;
import com.wm.app.b2b.client.ServiceException;
import com.wm.data.IData;
import com.wm.data.IDataCursor;
import com.wm.data.IDataFactory;
import com.wm.data.IDataUtil;
import java.util.logging.Level;
import java.util.logging.Logger;
public class WMService {
private String server;
private String port;
private String username;
private String password;
private Context context;
private IData idata;
private IDataCursor idc;
private String namespace;
private String serviceName;
public WMService(){
this.idata = IDataFactory.create();
this.idc = idata.getCursor();
}
public WMService(String server, String port, String username, String password){
this();
this.server = server;
this.port = port;
this.username = username;
this.password = password;
}
public void Connect(){
try {
this.context = new Context();
this.context.connect(this.getServer()+':'+this.getPort(), this.getUsername(), this.getPassword());
} catch (ServiceException ex) {
Logger.getLogger(WMServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Context getContext() {
return context;
}
public void setParam(String param,String value){
IDataUtil.put(idc, param, value);
}
public void setParam(String param,int value){
IDataUtil.putInt(idc, param, value);
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public IData getIdata() {
return idata;
}
public void destroy(){
this.idc.destroy();
}
public void executeService(){
IData odata = IDataFactory.create();
try {
odata = this.context.invoke(this.namespace, this.serviceName, this.idata);
} catch (ServiceException ex) {
Logger.getLogger(WMService.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Hasil = "+ odata.toString());
}
public static void main(String[] args) {
WMService wm = new WMService("192.168.1.10","5555","Administrator","manage");
wm.Connect();
wm.setNamespace("neuronTrain.businessProcess");
wm.setService("aritmatika");
wm.setParam("opr","+"); // variable input opr
wm.setParam("bil1",3);
wm.setParam("bil2",4);
wm.executeService();
}
}
Service webMethods yang dipanggil adalah aritmatika yang berapa pada namespace neuronTrain.businessProcess dengan input output seperti seperti gambar berikut

setelah dijalankan hasilnya adalah :
run: Connected Hasil >>>BasicData:hasil=7,num1=3,num2=4,opr=+,bil1=3,bil2=4,value=7<<< BUILD SUCCESSFUL (total time: 2 seconds)
Access Connection Pooling from JSP
0Pada tulisan sebelumnya sudah dijelaskan langkah-langkah membuat Connection Pooling di Glassfish, Pertanyaannya bagaiman cara menggunakan connection pooling yang sudah dibuat misal dari JSP.
Sebagai contoh yang sederhana saya ingin menampilkan seluruh daftar karyawan.
IDE yang saya gunakan adalah Netbeans versi 6.8 untuk memudahkan melakukan editing. Untuk cara membuat project web menggunakan java akan dibahas secara terpisah pada kategory Netbeans.
berikut struktur file setelah wizard pembuatan project selesai

Dari gambar diatas ada 2 file yang digunakan yaitu index.jsp dan DBControl.java
file DBControl.java digunakan untuk mengakses resource JDBC Connection Pooling, script secara lengkap ada dibawah ini
package com.neuron.db;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
/**
*
* @author massri@neuronworks.co.id
*/
public class DBControl {
String JNDIDataSource ;
Connection conn;
public DBControl() {
this.JNDIDataSource = "jdbc_train";
this.Init();
}
public void Init() {
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(this.JNDIDataSource);
this.conn = ds.getConnection();
this.conn.setAutoCommit(false);
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
}
Class ini dibuat sederhana untuk pengembangan dan teknik yang lebih lanjut akan dibahas kemudian. Pada script diatas ada baris this.JNDIDataSource = “jdbc_train”, “jdbc_train” adalah JDBC Resource yang sudah kita buat seperti pada tulisan sebelumnya seting connection pooling
Dan berikut script index.jsp
<%--
Document : index
Created on : 28 Jan 10, 21:04:00
Author : massri@neuronworks.co.id
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.neuron.db.DBControl"%>
JSP Test Connection Pooling
<%
DBControl dbctl = new DBControl();
Connection conn = dbctl.getConn();
if (conn == null) {
out.println("Gak Connect");
} else {
out.println("Connect");
}
String sql = "SELECT EMPLOYEE_ID,FIRST_NAME || ' ' || LAST_NAME NAME FROM EMPLOYEES WHERE ROWNUM <=10";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsMetaData = rs.getMetaData();
int columnCount = rsMetaData.getColumnCount();
%>
| <% out.print(rsMetaData.getColumnName(i).trim());%> | <% } %>
|---|
| " + rs.getString(i) + " | "); } out.println("
Setelah di deploy ke server berikut contoh hasil yang didapatkan
selesai…..
