JAVA调用存储过程

原创 2013年12月04日 09:55:41

下面是在网上找的一些关于用JAVA调用Oracle的函数,觉得不错,自己就整理了一下

create table TESTTB
(
ID VARCHAR2(30),
NAME VARCHAR2(30)
)

Insert into testtb values('1','21');
Insert into testtb values('2','22');
Insert into testtb values('3','23');
Insert into testtb values('4','24');

 

1、用来插入数据,没有返回值

CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2, PARA2 IN VARCHAR2)
AS
BEGIN
INSERT INTO HUANGBIAO.TESTTB(ID, NAME) VALUES (PARA1, PARA2);
END TESTA;

 

package hb.com;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.OracleTypes;

public class TestProcedureDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		CallableStatement proc = null;
		ResultSet rs = null;
		try {
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			System.out.println("driver is ok");
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:orcl", "huangbiao", "huangbiao");
			proc = conn.prepareCall("{ call HUANGBIAO.TESTA(?,?) }");
			proc.setString(1, "100");
			proc.setString(2, "TestOne");
			proc.execute();
			
		} catch (SQLException e) {
			try {
				// 如果出现异常将操作回滚,这样就能保证数据的一致性
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

 

2、查询只有一个返回值的结果集合

CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2, PARA2 OUT VARCHAR2)
AS
BEGIN
SELECT NAME INTO PARA2 FROM TESTTB WHERE ID = PARA1;
END TESTB;

 

package hb.com;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import oracle.jdbc.OracleTypes;

public class TestProcedureDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		CallableStatement proc = null;
		ResultSet rs = null;
		try {
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			System.out.println("driver is ok");
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:orcl", "huangbiao", "huangbiao");
			proc = conn.prepareCall("{ call HUANGBIAO.TESTB(?,?) }");
			proc.setString(1, "100");
			proc.registerOutParameter(2, Types.VARCHAR);
			proc.execute();
			String testPrint = proc.getString(2);
			System.out.println("testPrint is " + testPrint);
			
		} catch (SQLException e) {
			try {
				// 如果出现异常将操作回滚,这样就能保证数据的一致性
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

 

3、查询有多个返回值的集合(一组数据)

CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE TEST_CURSOR IS REF CURSOR;
end TESTPACKAGE;

CREATE OR REPLACE PROCEDURE TESTC(P_CURSOR out
TESTPACKAGE.TEST_CURSOR) IS
BEGIN
OPEN P_CURSOR FOR
SELECT * FROM HUANGBIAO.TESTTB;
END TESTC;

 

package hb.com;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.OracleTypes;

public class TestProcedureDemo3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		CallableStatement proc = null;
		ResultSet rs = null;
		try {
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			System.out.println("driver is ok");
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@localhost:1521:orcl", "huangbiao", "huangbiao");
			proc = conn.prepareCall("{ call huangbiao.testc(?) }");
			proc.registerOutParameter(1,OracleTypes.CURSOR);
			proc.execute();
			rs = (ResultSet) proc.getObject(1);
			
			while (rs.next()) {
				System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"
						+ rs.getString(2) + "</td></tr>");
			}
			
		} catch (SQLException e) {
			try {
				// 如果出现异常将操作回滚,这样就能保证数据的一致性
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

  

附件中有我参考的文档,还有自己在本机上调试的代码

 

使用SQLPLUS调用存储过程

create or replace procedure proc_select(
table_id in varchar2
)as
hbsql varchar2(500);
begin
	hbsql:='select name from testtb where id='||table_id;
	execute immediate hbsql;
end;
备注:上面的变量不能使用sql,即“hbsql”不能写为“sql”
execute proc_select('3');


create or replace procedure proc_insert
(
id in varchar2, --输入序号
name in varchar2 --输入姓名
) as
str_sql varchar2(500);
begin
str_sql:='insert into testtb values(:1,:2)';
execute immediate str_sql using id,name; --动态执行插入操作
exception
when others then
null;
end ;

SQL> execute proc_insert('11',’dinya’);

 

在Java中调用存储过程(详细)

在Java中调用存储过程(详细)       本文阐述了怎么使用DBMS存储过程。我阐述了使用存储过程的基本的和高级特性,比如返回ResultSet。本文假设你对DBMS和JDBC已经非常熟悉,也假设...
  • yfm10
  • yfm10
  • 2009年03月21日 01:18
  • 39381

Java代码调用存储过程和存储方法

准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安装位置,例如: 1.创建一个JDBC数据库连接工具类: package...
  • sinat_35626559
  • sinat_35626559
  • 2017年05月11日 23:07
  • 2084

DB2的存储过程及在java里面的调用

CREATE PROCEDURE proc_with_variables (IN p_empno VARCHAR(6)) LANGUAGE SQL SPECIFIC pro...
  • u011498933
  • u011498933
  • 2017年02月22日 16:38
  • 268

Java中调用sqlServer的存储过程的几种简单情况

先在sqlServer写一个查询全部数据的存储过程。if exists(select * from sysobjects where name='usp_selectAllInfo') drop pr...
  • chaplinlong
  • chaplinlong
  • 2016年03月30日 09:16
  • 759

java调用存储过程 返回结果集

Java代码调用存储过程: public Map rankInfo(Map rankMap,String start,String end, String userId,String officeI...
  • u010953431
  • u010953431
  • 2017年03月28日 18:26
  • 1542

Java学习笔记1-JDBC数据库连接和无参存储过程

简单的回顾了一下之前学习的JDBC数据库连接, 现在梳理一下:方便自己整理,把JDBC这块知识划分成两部分,第一部分是简单的数据库连接,实现简单的增删改查操作;第二部分比较复杂,包括JDBC调用存储过...
  • Yan_Song_
  • Yan_Song_
  • 2016年03月28日 00:34
  • 1099

在Java中调用带参数的存储过程

JDBC调用存储过程: CallableStatement在Java里面调用存储过程,写法那是相当的固定:Class.forName(....Connection conn = DriverManag...
  • c_p_h
  • c_p_h
  • 2017年03月21日 16:07
  • 399

java调用oracle存储过程例子

1,导jar包---ojdbc6.jar 2,建立一个分页存储过程 create or replace procedure my_page(v_in_tableName in varchar2, ...
  • u013614451
  • u013614451
  • 2015年05月28日 23:42
  • 624

jdbc调用postgresql的存储过程

import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; imp...
  • pyl574069214
  • pyl574069214
  • 2016年05月11日 17:29
  • 953

JAVA调用数据库存储过程

下面将举出JAVA对ORACLE数据库存储过程的调用          ConnUtils连接工具类:用来获取连接、释放资源 复制代码 package com.ljq....
  • u013700340
  • u013700340
  • 2014年05月03日 21:50
  • 1532
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA调用存储过程
举报原因:
原因补充:

(最多只允许输入30个字)