DB2版SQLJ訪問Oracle伺服器
今天看到一本關於Oracle SQLJ的書於是想試一試。但我的Ubuntu 14.04隻安裝了Oracle的精簡用戶端。沒有SQLJ,於是想到用IBM-db2的sqlj,居然成功了。
一、從Oracle伺服器端把runtime12ee.jar runtime12.jar translator.jar拷入相應目錄
我的是放在$ORACLE_HOME/sqlj/lib,其中的$ORACLE_HOME是精簡用戶端的安裝目錄
/opt/ora11g/instantclient_11_2/
二、把$ORACLE_HOME/sqlj/lib/*加入到CLASSPATH中
三、用sqlj程式轉換時需要加上-compile=false -C-classpath=$ORACLE_HOME/sqlj/lib/* 選項
四、執行個體
/* Emp.sqlj 來源程式
sqlj -compile=false -C-classpath=$ORACLE_HOME/sqlj/lib/* Emp.sqlj
javac Emp.java
java Emp
*/
import java.sql.SQLException; /* 匯入所需的 Java 類 */
import sqlj.runtime.*; //Java 運行時支援
import sqlj.runtime.ref.*;
import oracle.sqlj.runtime.*; //Oracle 擴充
#sql iterator MyIter(String empno, String ename);
class Emp /* 主類 */
/* 定義 iterator 處理結果集 */
{
public static void main(String args[])
{
try {
/* 串連到 Oracle 資料庫,這裡使用的是 Thin 驅動程式 */
Oracle.connect("jdbc:oracle:thin:@192.168.0.110:1521:orcl", "scott", "tiger");
Emp st = new Emp();
st.runExample();
} catch(SQLException e) {
System.err.println("Error running the example:" + e);
} finally {
try {
Oracle.close();
} catch(SQLException e) { }
}
}
void runExample() throws SQLException { /* 定義 runExample 函數擷取並處理結果 */
MyIter iter; /* 聲明 iterator 類的一個執行個體 */
#sql iter = {select EMPNO,ENAME from emp}; /* 執行嵌入的 SQL 陳述式,並返回結果給 iterator */
while(iter.next()) {
/* 迴圈遍曆結果的每一條記錄並輸出 */
System.out.print("EMPNO = " + iter.empno()+" ");
System.out.println("ENAME = " + iter.ename());
}
}
}
運行:
$sqlj -compile=false -C-classpath=$ORACLE_HOME/sqlj/lib/* Emp.sqlj
$ javac Emp.java
$ java Emp
EMPNO = 7369 ENAME = SMITH
EMPNO = 7499 ENAME = ALLEN
EMPNO = 7521 ENAME = WARD
EMPNO = 7566 ENAME = JONES
EMPNO = 7654 ENAME = MARTIN
EMPNO = 7698 ENAME = BLAKE
EMPNO = 7782 ENAME = CLARK
EMPNO = 7788 ENAME = SCOTT
EMPNO = 7839 ENAME = KING
EMPNO = 7844 ENAME = TURNER
EMPNO = 7876 ENAME = ADAMS
EMPNO = 7900 ENAME = JAMES
EMPNO = 7902 ENAME = FORD
EMPNO = 7934 ENAME = MILLER