JAVA调用存储过程
2013-12-04 09:55
405 查看
下面是在网上找的一些关于用JAVA调用Oracle的函数,觉得不错,自己就整理了一下
1、用来插入数据,没有返回值
2、查询只有一个返回值的结果集合
3、查询有多个返回值的集合(一组数据)
附件中有我参考的文档,还有自己在本机上调试的代码
使用SQLPLUS调用存储过程
oracle存储过程学习经典_语法_实例_调用_.pdf (308.8 KB)
下载次数: 2
hb_test.rar (1.1 MB)
下载次数: 0
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’);
oracle存储过程学习经典_语法_实例_调用_.pdf (308.8 KB)
下载次数: 2
hb_test.rar (1.1 MB)
下载次数: 0
相关文章推荐
- DB2数据库、触发器、存储过程、JAVA数据库链接(JDBC)、调用层接口(CLI)
- java 调用存储过程
- java 调用存储过程总结
- java中使用ibatis来调用存储过程(上)
- java 调用存储过程【转】
- java调用存储过程
- java调用存储过程
- java 调用存储过程
- JAVA中对存储过程的调用方法 ZT
- java 调用oracle 存储过程
- 在Java中调用存储过程(详细)
- java 调用mysql存储过程
- oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
- Java中调用存储过程
- Navicat创建存储过程和触发器,Java调用
- Java调用存储过程
- Java调用存储过程
- JAVA程序调用MYSQL带有OUTPUT参数的存储过程
- java 调用存储过程 实例
- 存储过程与Java调用