今天看到一本关于oracle sqlj的书于是想试一试。但我的ubuntu14只安装了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/* 选项
四、实例
import sqlj.runtime.*; //Java 运行时支持
import sqlj.runtime.ref.*;
import oracle.sqlj.runtime.*; //Oracle 扩展
#sql iterator MyIter(String empno, String ename);
class Emp
{
public static void main(String args[])
{
try {
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 {
MyIter iter;
#sql iter = {select EMPNO,ENAME from emp};
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