/**
*
* 说明:
* (1)本例使用JDBC_ODBC桥进行数据库连接,故此需要ODBC数据源
* (2)本例中SQL为更新语句,故此使用载体的executeUpdate方法,并且返回受影响记录数
* (3) 配置连接ORACLE的odbc数据源ora
*/
//导入所需类包
import java.sql.*;
public class JdbcTestOra2 {
public static void main(String args[]) {
try {
//装载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立数据库连接
Connection con = DriverManager.getConnection("jdbc:odbc:ora","scott","tiger");
//创建SQL语句载体
Statement st = con.createStatement();
//执行SQL语句,接收执行结果
int rs = st.executeUpdate("update emp set comm=1000");
//处理结果
System.out.println("修改记录数:"+rs);
//释放数据库资源,注意顺序
st.close();
con.close();
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
/**
* 说明:
* (1)本例使用JDBC_ODBC桥进行数据库连接,故此需要ODBC数据源
* (2)本例中SQL语句载体为可输入参数型,注意参数的表示和赋值
* (3)本例中SQL为查询语句,故此使用载体的executeQuery方法,并且返回结果集
* (4) 配置连接ORACLE的odbc数据源ora
*/
//导入所需类包
import java.sql.*;
public class JdbcTestOra3 {
public static void main(String args[]) {
try {
//装载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立数据库连接
Connection con = DriverManager.getConnection("jdbc:odbc:ora","scott","tiger");
//创建可输入参数的SQL语句
PreparedStatement ps = con.prepareStatement("select * from emp where empno=?");
//为参数赋值,注意下标从1开始
ps.setInt(1, 7934);
//执行SQL语句,接受结果集
ResultSet rs = ps.executeQuery();
//处理结果
while (rs.next()) {
System.out.println("员工编号:"+rs.getInt("empno"));
System.out.println("员工姓名:"+rs.getString("ename"));
}
//释放数据库资源,注意顺序
rs.close();
ps.close();
con.close();
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
/**
* 说明:
* (1)本例使用JDBC_ODBC桥进行数据库连接,故此需要ODBC数据源
* (2)本例中SQL语句载体为调用存储过程型,注意参数的表示和赋值,
* 尤其是OUTPUT参数的注册与值获取
* (3)本例中涉及到存储过程pro1,其定义如下:
* create or replace procedure add_pro(cs1 number,cs2 number,cs3 out number)
* as
* begin
* cs3:=cs1/cs2;
* exception
* when others then
* raise_application_error(-20001,'0做除数');
* end;
* 该存储过程接受两个int类型输入参数,并将计算结果以输出参数
* 形式返回
* (4) 配置连接ORACLE的odbc数据源ora
*/
//导入所需类包
import java.sql.*;
public class JdbcTestOra4 {
public static void main(String args[]) {
try {
//装载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立数据库连接
Connection con = DriverManager.getConnection("jdbc:odbc:ora","scott","tiger");
//创建调用存储过程的载体
CallableStatement
cs = con.prepareCall("{call add_pro(?,?,?)}");
//为输入参数赋值,注意下标从1开始
cs.setInt(1, 33);
cs.setInt(2, 0);
//声明注册输出参数
cs.registerOutParameter(3, Types.INTEGER);
//执行存储过程
cs.execute();
//获取输出参数
int rs = cs.getInt(3);
//处理结果
System.out.println("存储过程执行结果:"+rs);
//释放数据库资源
cs.close();
con.close();
}
catch (SQLException ee){
if (ee.getErrorCode() == 20001)
System.out.println("0做了除数");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
/**
* 说明:
* (1)本例使用JDBC_ODBC桥进行数据库连接,故此需要ODBC数据源
* (2)本例中SQL语句载体调用包中的函数
* (3)本例中涉及到程序包,其定义如下:
create or replace package java_refcursor as
type myrctype is ref cursor return EMP%ROWTYPE;
function job_listing (j varchar2) return myrctype;
end java_refcursor;
create or replace package body java_refcursor as
function job_listing (j varchar2) return myrctype is
rc myrctype;
begin
open rc for select * from emp where job = j;
return rc;
end;
end java_refcursor;
*
* 利用ref cursor返回结果集
*/
//导入所需类包
import java.sql.*;
import java.io.*;
// Importing the Oracle Jdbc driver package makes the code more readable
import oracle.jdbc.*;
public class JdbcTestOra5 {
public static void main(String args[]) {
try {
//装载驱动程序
//JDBC-ODBC桥不支持ref cursor,所以必须使用thin驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立数据库连接
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","scott","tiger");
//创建调用存储过程的载体
CallableStatement call =
con.prepareCall ("{ ? = call java_refcursor.job_listing (?)}");
//执行存储过程
call.registerOutParameter (1, OracleTypes.CURSOR);
call.setString (2, "MANAGER");
call.execute ();
//取得引用游标
ResultSet rset = (ResultSet)call.getObject (1);
//获取存储过程返回的结果集(第一个)
while (rset.next ())
System.out.println (rset.getString ("ENAME"));
//释放数据库资源
rset.close();
call.close();
con.close();
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}