`
农村哥们
  • 浏览: 293333 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbc调用存储过程

阅读更多
一:无返回值的存储过程

存储过程为:

CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)  AS

BEGIN

   INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

END TESTA;

然后呢,在java里调用时就用下面的代码:

package com.hyq.src;



import java.sql.*;

import java.sql.ResultSet;



public class TestProcedureOne {

  public TestProcedureOne() {

  }

  public static void main(String[] args ){

    String driver = "oracle.jdbc.driver.OracleDriver";

    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;

    CallableStatement cstmt = null;



    try {

      Class.forName(driver);

      conn =  DriverManager.getConnection(strUrl, " hyq ", " hyq ");

      CallableStatement proc = null;

      proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");

      proc.setString(1, "100");

      proc.setString(2, "TestOne");

      proc.execute();

    }

    catch (SQLException ex2) {

      ex2.printStackTrace();

    }

    catch (Exception ex2) {

      ex2.printStackTrace();

    }

    finally{

      try {

        if(rs != null){

          rs.close();

          if(stmt!=null){

            stmt.close();

          }

          if(conn!=null){

            conn.close();

          }

        }

      }

      catch (SQLException ex1) {

      }

    }

  }

}

当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。

二:有返回值的存储过程(非列表)

存储过程为:

CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)  AS

BEGIN

   SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;

END TESTB;

在java里调用时就用下面的代码:

package com.hyq.src;



public class TestProcedureTWO {

  public TestProcedureTWO() {

  }

  public static void main(String[] args ){

    String driver = "oracle.jdbc.driver.OracleDriver";

    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;

    try {

      Class.forName(driver);

      conn =  DriverManager.getConnection(strUrl, " hyq ", " hyq ");

      CallableStatement proc = null;

      proc = conn.prepareCall("{ call HYQ.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 ex2) {

      ex2.printStackTrace();

    }

    catch (Exception ex2) {

      ex2.printStackTrace();

    }

    finally{

      try {

        if(rs != null){

          rs.close();

          if(stmt!=null){

            stmt.close();

          }

          if(conn!=null){

            conn.close();

          }

        }

      }

      catch (SQLException ex1) {

      }

    }

  }

}



}

注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

三:返回列表

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,

1,  建一个程序包。如下:

CREATE OR REPLACE PACKAGE TESTPACKAGE  AS

TYPE Test_CURSOR IS REF CURSOR;

end TESTPACKAGE;

2,建立存储过程,存储过程为:

CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS

BEGIN

    OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;

END TESTC;

可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。

在java里调用时就用下面的代码:

package com.hyq.src;

import java.sql.*;

import java.io.OutputStream;

import java.io.Writer;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import oracle.jdbc.driver.*;





public class TestProcedureTHREE {

  public TestProcedureTHREE() {

  }

  public static void main(String[] args ){

    String driver = "oracle.jdbc.driver.OracleDriver";

    String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

    Statement stmt = null;

    ResultSet rs = null;

    Connection conn = null;



    try {

      Class.forName(driver);

      conn =  DriverManager.getConnection(strUrl, "hyq", "hyq");



      CallableStatement proc = null;

      proc = conn.prepareCall("{ call hyq.testc(?) }");

      proc.registerOutParameter(1,oracle.jdbc.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 ex2) {

      ex2.printStackTrace();

    }

    catch (Exception ex2) {

      ex2.printStackTrace();

    }

    finally{

      try {

        if(rs != null){

          rs.close();

          if(stmt!=null){

            stmt.close();

          }

          if(conn!=null){

            conn.close();

          }

        }

      }

      catch (SQLException ex1) {

      }

    }

  }

}
分享到:
评论

相关推荐

    JDBC 调用存储过程方法

    本篇文章将深入探讨如何使用JDBC调用存储过程。 首先,存储过程是预编译的SQL代码集合,它们封装在数据库中,可以接收输入参数,处理数据,然后返回结果或输出参数。存储过程在提高性能、增强安全性和简化复杂操作...

    JDBC调用存储过程

    本文将详细讲解如何使用JDBC来调用存储过程,以实现数据的增删改查操作。 首先,理解存储过程是数据库中的一个重要概念。存储过程是一组预先编译好的SQL语句集合,它可以包含控制流语句、输入/输出参数,甚至可以有...

    jdbc调用存储过程实现增删改查

    ### JDBC调用存储过程 1. **加载驱动**:使用`Class.forName()`方法加载Oracle的JDBC驱动,例如`oracle.jdbc.driver.OracleDriver`。 2. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 3....

    jdbc调用存储过程,函数,游标

    本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...

    JDBC调用存储过程的小例子

    在这个“JDBC调用存储过程的小例子”中,我们将探讨如何使用JDBC来执行数据库中的存储过程,这是一个非常实用的功能,特别是在处理复杂的业务逻辑或批量数据操作时。 首先,我们需要了解什么是存储过程。存储过程是...

    31.jdbc调用存储过程?.avi

    jdbc调用存储过程?.avi

    JDBC调用存储过程.pdf

    ### JDBC调用存储过程知识点详解 #### 一、引言 在Java开发中,通过Java Database Connectivity (JDBC) 来访问数据库是非常常见的操作。其中,调用存储过程是实现复杂业务逻辑的一种重要方式。存储过程是预编译好...

    jdbc执行存储过程

    在给定的代码片段中,我们可以看到一个典型的使用JDBC调用存储过程的例子。下面,我们将分步骤解析这段代码: 1. **加载JDBC驱动**: ```java try{ Class.forName(...

    PLSQL jdbc调用存储过程(入门)

    PLSQL jdbc调用存储过程(入门)

    jdbc调用存储过程 函数例子

    本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的接口来访问不同类型的数据库。通过JDBC,开发者可以进行数据库连接、执行SQL...

    Java面试题31.jdbc调用存储过程.mp4

    Java面试题31.jdbc调用存储过程.mp4

    JDBC调用MySQL5存储过程[文].pdf

    在软件开发中,JDBC...尽管JDBC调用存储过程相对简单,但设计和开发存储过程本身可能需要更深入的数据库知识和SQL编程技巧。在实际应用中,存储过程可以提高性能,封装复杂的业务逻辑,并提供数据库层面的安全性。

    android通过jdbc方式连接mysql,并执行存储过程

    android通过jdbc方式连接mysql,并执行存储过程。连接数据库部分最好新建一个线程来实现和主线程分开。编译之前确定添加了mysql-connector-java-5.0.8-bin库否则会出错

    jdbc针对存储过程通用的jdbc封装.zip

    JDBC调用存储过程的基本步骤如下: 1. 加载数据库驱动并建立连接:使用`Class.forName()`加载驱动,然后通过`DriverManager.getConnection()`建立与数据库的连接。 2. 创建CallableStatement对象:与...

    hibernate框架调用存储过程

    本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...

    JDBC存储过程的调用

    JDBC存储过程的调用

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...

Global site tag (gtag.js) - Google Analytics