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程序中调用存储过程

  • 2011年11月09日 17:16
  • 45KB
  • 下载

java调用oracle简单存储过程

  • 2012年01月19日 15:59
  • 48KB
  • 下载

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

Java代码调用存储过程: public Map rankInfo(Map rankMap,String start,String end, String userId,String officeI...

JAVA调用ORACLE存储过程游标使用

  • 2010年03月05日 16:57
  • 19.21MB
  • 下载

Java 调用存储过程中传递集合类型处理方法

public String addplaninfolist(String eventId, String advise, ArrayList P_ARR) { Object[] tmp = new...

java调用oracle存储过程

  • 2011年07月28日 10:47
  • 7KB
  • 下载

java调用存储过程.txt

  • 2014年09月10日 09:27
  • 5KB
  • 下载

java 调用存储过程 实例

共4个一.只有输入参数没有返回结果的存储过程二. 有输入和有一个返回值的存储过程三、返回多行记录的存储过程(返回的是游标)四、Hibernate调用oracle存储过程 一.只有输入参数没有返回结果的...

用java调用oracle存储过程总结

  • 2011年12月24日 09:10
  • 39KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA调用存储过程
举报原因:
原因补充:

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