一、从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