在java应用程序下调用存储函数,存储过程,包
2017-09-21 11:51
295 查看
创建connection链接,释放关闭链接
package demo.untils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
private static String driver="oracle.jdbc.OracleDriver";
private static String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user="scott";
private static String password="tiger";
//注册数据库的驱动
static{
try {
Class.forName(driver);//采用java反射机制,必然会抛出异常
//DriverManager.registerDriver(driver);//一般不采用java提供的这个方法注册驱动
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库链接
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;//如果不成功,测没有获取数据库的链接
}
//释放数据库的资源
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs=null;//让rs迅速成为java垃圾回收的对象
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
st=null;
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
conn=null;
}
}
}
}
调用存储过程
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestProcedure {
/*
*create or replace procedure queryempinform(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
*/
@Test
public void testprocedure(){
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call queryempinform(?,?,?,?)}";
Connection conn =null;
CallableStatement call =null;
try {
//得到一个链接
conn=JDBCUtils.getConnection();
//通过链接创建出statement
call=conn.prepareCall(sql);
//对于in参数,赋值
call.setInt(1, 7839);
//对于out参数 ,声明
call.registerOutParameter(2, OracleTypes.VARCHAR);
call.registerOutParameter(3, OracleTypes.NUMBER);
call.registerOutParameter(4, OracleTypes.VARCHAR);
//执行调用
call.execute();
//取出结果
String name = call.getString(2);
double salary = call.getDouble(3);
String job = call.getString(4);
System.out.println(name+"\t"+salary+"\t"+job);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call,null);
}
}
}调用存储函数
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestFunction {
/*
create or replace function queryempincome(eno in number)
return number
*/
@Test
public void testFunction(){
//{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql ="{?= call queryempincome(?)}";
Connection conn = null;
CallableStatement call= null;
try {
//得到数据库链接
conn=JDBCUtils.getConnection();
//基于链接创建statement
call = conn.prepareCall(sql);
//对于输出参数,声明
call.registerOutParameter(1, OracleTypes.NUMBER);
//对于输入参数,赋值
call.setInt(2, 7839);
//执行调用
call.execute();
//取出年收入的结果(存储函数的结果)
double income = call.getDouble(1);
System.out.println("该员工的年收入是:"+income);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, null);
}
}
}调用包,要注意下出out参数的强制类型转换
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestCursor {
/*
create or replace PACKAGE MYPACKAGE AS
type empcursor is ref cursor;
procedure queryEmpList(dno in number,empList out empcursor);
END MYPACKAGE;
*/
@Test
public void testcursor(){
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call MYPACKAGE.queryEmpList(?,?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
//创建数据库链接
conn = JDBCUtils.getConnection();
//基于链接创建statement
call = conn.prepareCall(sql);
//对于in参数, 赋值
call.setInt(1, 20);
//对于out,参数,声明
call.registerOutParameter(2, OracleTypes.CURSOR);
//执行调用
call.execute();
//取出该部门的所有员工信息
//所有接口都有实现类,不同的是将sql java的接口转换成oracle数据库的接口
rs = ((OracleCallableStatement)call).getCursor(2);
while(rs.next()){
//取出该员工的工号,姓名,薪水,职位
int empno = rs.getInt("empno");
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
String job = rs.getString("empjob");
System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}
package demo.untils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
private static String driver="oracle.jdbc.OracleDriver";
private static String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user="scott";
private static String password="tiger";
//注册数据库的驱动
static{
try {
Class.forName(driver);//采用java反射机制,必然会抛出异常
//DriverManager.registerDriver(driver);//一般不采用java提供的这个方法注册驱动
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库链接
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;//如果不成功,测没有获取数据库的链接
}
//释放数据库的资源
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs=null;//让rs迅速成为java垃圾回收的对象
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
st=null;
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
conn=null;
}
}
}
}
调用存储过程
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestProcedure {
/*
*create or replace procedure queryempinform(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
*/
@Test
public void testprocedure(){
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call queryempinform(?,?,?,?)}";
Connection conn =null;
CallableStatement call =null;
try {
//得到一个链接
conn=JDBCUtils.getConnection();
//通过链接创建出statement
call=conn.prepareCall(sql);
//对于in参数,赋值
call.setInt(1, 7839);
//对于out参数 ,声明
call.registerOutParameter(2, OracleTypes.VARCHAR);
call.registerOutParameter(3, OracleTypes.NUMBER);
call.registerOutParameter(4, OracleTypes.VARCHAR);
//执行调用
call.execute();
//取出结果
String name = call.getString(2);
double salary = call.getDouble(3);
String job = call.getString(4);
System.out.println(name+"\t"+salary+"\t"+job);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call,null);
}
}
}调用存储函数
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestFunction {
/*
create or replace function queryempincome(eno in number)
return number
*/
@Test
public void testFunction(){
//{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql ="{?= call queryempincome(?)}";
Connection conn = null;
CallableStatement call= null;
try {
//得到数据库链接
conn=JDBCUtils.getConnection();
//基于链接创建statement
call = conn.prepareCall(sql);
//对于输出参数,声明
call.registerOutParameter(1, OracleTypes.NUMBER);
//对于输入参数,赋值
call.setInt(2, 7839);
//执行调用
call.execute();
//取出年收入的结果(存储函数的结果)
double income = call.getDouble(1);
System.out.println("该员工的年收入是:"+income);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, null);
}
}
}调用包,要注意下出out参数的强制类型转换
package demo.oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
import demo.untils.JDBCUtils;
public class TestCursor {
/*
create or replace PACKAGE MYPACKAGE AS
type empcursor is ref cursor;
procedure queryEmpList(dno in number,empList out empcursor);
END MYPACKAGE;
*/
@Test
public void testcursor(){
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call MYPACKAGE.queryEmpList(?,?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
//创建数据库链接
conn = JDBCUtils.getConnection();
//基于链接创建statement
call = conn.prepareCall(sql);
//对于in参数, 赋值
call.setInt(1, 20);
//对于out,参数,声明
call.registerOutParameter(2, OracleTypes.CURSOR);
//执行调用
call.execute();
//取出该部门的所有员工信息
//所有接口都有实现类,不同的是将sql java的接口转换成oracle数据库的接口
rs = ((OracleCallableStatement)call).getCursor(2);
while(rs.next()){
//取出该员工的工号,姓名,薪水,职位
int empno = rs.getInt("empno");
String name = rs.getString("ename");
double salary = rs.getDouble("sal");
String job = rs.getString("empjob");
System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}
相关文章推荐
- 在Java语言中调用存储过程、存储函数、包头、包体
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 【存储过程】在java语言中调用存储函数
- Day60-Oracle04 - PLSQL编程、游标cursor、例外exception、存储过程(procedure)、存储函数(function)、java调用存储过程、触发器(trigger)
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- Java 调用 Oracle 存储过程返回结果集
- Oracle数据库中调用Java类开发存储过程、函数的方法
- [Java] JDBC 04 TestProc.java (对存储过程进行调用 CallableStatement)
- 存储过程与Java调用
- java调用存储过程
- "服务器无法继续该事务 3400000006"错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未提交
- java调用plsql存储过程的小列子
- 在JAVA中调用存储过程、并将结果取出来一例
- Java jdbc调用Oracle数据库存储过程
- Java 程序调用存储过程
- java调用存储过程
- 如何用JAVA调用存储过程
- CallableStatement java中调用存储过程
- 触发器,存储过程,oracle调用java方法
- java调用存储过程