JDBC调用存储过程和函数
来源:互联网 发布:淘宝首页备份在哪里的 编辑:程序博客网 时间:2024/05/21 08:54
1.JAVA中如何来调用存储过程
CallableStatement:用于执行SQL存储过程和函数的接口
简单步骤:
A.编写你自己的存储过程(当然,你最好先通过测试)
B.编写的JAVA调用类
C.得到期望的输出
A:声明存储过程:
CREATE OR REPLACE PROCEDURE PRO_QUERY_DEPT(
P_DEPTNO IN DEPT.DEPTNO%TYPE,
P_DNAME OUT DEPT.DNAME%TYPE
)
AS
BEGIN
SELECT DNAME INTO P_DNAME FROM DEPT WHERE DEPTNO = P_DEPTNO;
DBMS_OUTPUT.PUT_LINE(P_DNAME);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END;
Oracle下执行存储过程的实例:
declare
name varchar2(50);
birthday date;
begin
PRO_UNITTEST_STUDENTS(1,name,birthday);
dbms_output.put_line(name);
dbms_output.put_line(birthday);
end;
B:使用JDBC来调用:
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "java:oracle:thin:@127.0.0.1:1521:GUZHE";
String user = "scott";
String password = "tiger";
Connection con = DriverManager.getConnection(url, user, password); //连接数据库
String sql = "{call PRO_QUARY_DEPT(?,?)}"; //执行的SQL语句,用CALL子句+存储过程名+参数来调用
CallableStatement cst = con.prepareCall(sql); //可执行SQL存储过程和函数的SQL语句分析容器
cst.setInt(1, 30); //设置第一个参数的值
cst.registerOutParameter(2, Types.VARCHAR); //声明第二个参数是OUT输出的,并说明其返回类型
cst.execute(); //执行
String str = null;
str = cst.getString(2);//得到第二个参数的值,即希望得到的输出数据
System.out.println(str);
2.使用JDBC来调用函数
其过程与JDBC调用存储过程非常类似
声明函数:
CREATE OR REPLACE FUNCTION FUNC_QUERY_DEPT(
P_DEPTNO IN DEPT.DEPTNO%TYPE,
P_DNAME OUT DEPT.DNAME%TYPE
)
RETURN VARCHAR2
AS
BEGIN
SELECT DNAME INTO P_DNAME FROM DEPT WHERE DEPTNO = P_DEPTNO;
DBMS_OUTPUT.PUT_LINE(P_DNAME);
RETURN 'OK';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END;
oracle下调用函数:
sql>var income number
sql>call annual.income('SCOTT') into :imcome;
sql>print income
使用JDBC来调用这个函数:
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "java:oracle:thin:@127.0.0.1:1521:GUZHE";
String user = "scott";
String password = "tiger";
Connection con = DriverManager.getConnection(url, user, password); //连接数据库
String sql = "{? = call FUNC_QUARY_DEPT(?,?)}"; //执行的SQL语句,用CALL字句+函数名+参数来调用
CallableStatement cst = con.prepareCall(sql); //可执行SQL存储过程和函数的SQL语句分析容器
cst.setInt(2, 30); //设置第二个参数的值
cst.registerOutParameter(1, Types.VARCHAR); //声明第一个参数是OUT输出的,并说明其返回类型(第一个问号,函数的返回值)
cst.registerOutParameter(3, Types.VARCHAR); //声明第三个参数是OUT输出的,并说明其返回类型(第三个问号)
cst.execute(); //执行
String str = null;
str = cst.getString(2);//得到第二个参数的值,即希望得到的输出数据
System.out.println(str);
3.使用JDBC调用函数或者过程获取多行查询结果,需要使用游标
两种方式:
A.在包中声明一个游标,然后定义一个存储过程或者函数,并使用已定义的游标作为输出参数
首先需要定义一个游标类型,以便可以在函数的参数中引用这个类型
CRATE OR REPLACE PACKAGE PACK_DEPT
IS
TYPE CUR IS REF CURSOR;
END;
再次定义一个过程,其参数为刚刚在包中定义的游标类型
CREATE OR REPLACE PROCEDURE PRO_FIND_DEPTS(
MY_CUR OUT CUR PACK_DEPT.CUR
)
IS
BEGIN
OPEN MY_CUR FOR SELECT * FROM DEPT;
END;
在JDBC中调用:
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "java:oracle:thin:@127.0.0.1:1521:GUZHE";
String user = "scott";
String password = "tiger";
Connection con = DriverManager.getConnection(url, user, password); //连接数据库
String sql = "{call PRO_FIND_DEPTS(?)}"; //执行的SQL语句,用CALL字句+函数名+参数来调用
CallableStatement cst = con.prepareCall(sql); //可执行SQL存储过程和函数的SQL语句分析容器
cst.registerOutParameter(1, OracleTypes.CURSOR); //声明第一个参数是OUT输出的,并说明其返回类型
cst.execute(); //执行
ResultSet rs = (ResultSet)cst.getObject();//得到第一个参数的值,即希望得到的游标
while(rs.next()){
System.out.println(rs.getString("DNAME"));
}
B.使用系统默认的游标:SYS_REFCURSOR
先定义要调用的过程
CREATE OR REPLACE PROCEDURE PRO_ALL_DEPTS(
MY_CUR OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN MY_CUR FOR SELECT * FROM DEPT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END;
在JDBC中的定义过程与上面一样
4.在JDBC中提取元数据信息:
元数据:表述数据的数据
数据库的元数据:指的是字段名,字段类型,字段长度等
- JDBC调用存储过程和函数
- jdbc调用存储过程和函数
- jdbc调用存储过程和函数
- JDBC(13)—JDBC调用存储过程和函数
- JDBC:调用函数&存储过程
- JDBC-MYSQL-存储函数和存储过程的调用
- jdbc调用oracle存储过程和存储函数
- JDBC 调用存储函数 存储过程
- JDBC : 数据库的分页语句 && 调用函数和存储过程
- jdbc调用存储过程
- Jdbc调用存储过程
- jdbc调用存储过程
- jdbc调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- Jdbc存储过程调用
- jdbc调用存储过程
- 2009年混合语言编程总结
- c++中RTTI的观念和使用
- C++的四种cast操作符的区别--类型转换
- 关于C++中RTTI的编码实现
- 3.8
- JDBC调用存储过程和函数
- ubuntu 9.10 Eclipse 3.5.2安装pdt(php development toolkit)
- 学习asp.net比较完整的流程
- c# 同步调用外部程序及终止执行
- gdb查看stl容器中的内容
- 项目列表
- 揭秘孙小小《PPT演示之道》
- 有关HashMap()的遍历!
- pclint C++ Test和Logiscope