精华内容
下载资源
问答
  • java存储过程
    千次阅读
    2018-06-13 11:20:17

    什么是存储过程

    stored procedure允许将运行于数据库层中的持久性逻辑与运行于中间层的商务逻辑有效地分离开来。这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。

    它非常类似于Java语言的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存,这样下次执行的时候直接使用缓存中的语句,这样就可以提高存储过程的性能。

    但是,妨碍存储过程广泛使用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。使用基于Java在存储过程可以解决这一问题。

    选择PL/SQL还是Java

     

    • 对于要求与SQL进行无缝集成的数据库中心来说,使用PL/SQL,从而完成对数据库对象、类型和特性的访问。
    • 出于与数据库的无关性考虑时,可以选择Java。OracleJVM使得Java可以运行在数据库中。

     

    Grails访问存储过程

    给Grails项目配置好数据源以后,就可以访问数据库了。Grails开发平台已经为我们配置好了Hibernate,我们可以使用GORM通过Hibernate访问访问数据库。下面使用GSQL访问存储过程。

    例子:

    1.我们有一个叫“PA_PPRM_PivotCar.P_Tran”的存储过程,有三个输入参数,没有输出参数。作用是简单的insert。

    下面我们来访问这个存储过程。
    class LoginService {
       
            def dataSource
       
        def check(User u) {
     
    我们对存储过程的访问都是在service层进行的,注意声明dataSource,这样Grails平台会将dataSource对象通过Spring注入进来,我们就可以在服务层使用数据源了。
    我们对存储过程的访问在check(User u)方法里,下面是代码:
            Sql sql = new Sql(dataSource)
           
           
    上面的代码是初始化Sql对象,记得引入该类,“import groovy.sql.Sql”,然后就可以访问存储过程了:
            sql.call("call PA_PPRM_PivotCar.P_Tran(?,?,?)",['3','cheng','m'])
    }

    下面我们把上面的“PA_PPRM_PivotCar.P_Tran”进行改造,给这个存储过程一个返回值。

        def retn
          
           sql.call("call PA_PPRM_PivotCar.P_Tran(?,?,?,?)",['3','cheng','m', Sql.VARCHAR]){
               retn = it
        }

    可以看到,存储过程后面跟着四个问号,其中三个代表入参,最后一个代表出参。

    下面,我们再把存储过程的输出参数难度加大,我们现在有这样一个存储过程“PA_PPRM_PivotCar.P_PivotCar_GetList”,它有一个输入参数,还有一个输出参数,但这个输出参数是游标。

    sql.call("call PA_PPRM_PivotCar.P_PivotCar_GetList(?,?)",['2008',Sql.resultSet(OracleTypes.CURSOR)]){
            carModel ->
                 carModel.eachRow(){
                    x ->
                     println"car style: ${x.carStyle},car series: ${x.carseries},car type: ${x.cartype}"
                 }
            }

     

    最后欢迎大家访问我的个人网站:1024s​​​​​​​

    更多相关内容
  • java存储过程

    千次阅读 2021-12-23 19:30:51
    存储过程优点:减少数据库和服务器网络交互,提高执行效率(将写到java程序中的代码抽到数据库) PLSQL不区分大小写,三个部分组成: //声明部分: DECLARE** -- 声明变量、游标(没有可省略) //可执行部分: BEGIN ...

    1、PLSQL编程

    1.1 程序结构

    存储过程优点:减少数据库和服务器网络交互,提高执行效率(将写到java程序中的代码抽到数据库)

    PLSQL不区分大小写,三个部分组成:

    //声明部分:
    DECLARE**
    -- 声明变量、游标(没有可省略)
    
    //可执行部分:
    
    BEGIN
    
    DBMS_output.put_line('hello world');   --  打印语句
    
    //异常部分:(没有的话可省略)
    
    END;
    

    1.2 变量

    1.2.1 普通变量

    变量赋值的方式有两种:

    1、直接赋值语句 := 比如 v_name :=‘zhangsan’

    2、语句赋值,使用 select… into …赋值: (语法:select 值 into 变量)

    CREATE OR REPLACE PROCEDURE TEST01 AS 
     -- 薪水
     v_sal NUMBER ;
     -- 地址
     v_addr VARCHAR2(200);
     -- 姓名
     v_name varchar(200) :='zhangsan';
    BEGIN
     -- 直接赋值
      v_sal :=  1500;
     -- 语句赋值
     select '北京奥森' into v_addr from dual;
     -- 打印输出
     DBMS_OUTPUT.PUT_line( v_addr||v_name||v_sal );   // 北京奥森zhangsan1500
    END TEST01;
    
    注:1、创建新的存储过程直接在AS后面写变量,不需要写declare(可理解为declare优化成as)
       2、需要我们先手动编译,在执行运行(与java语言不同,java语言是运行时自己完成编译)
    

    1.2.2 引用型变量

    好处:不需要考虑表中列的类型,使用%TYPE可以使得编码方式更灵活,更加适应数据库更新

    通过 表名.列名%TYPE 指定变量的类型和长度,如 : v_name emp.ename%TYPE

    create or replace PROCEDURE TEST01 AS 
    
    v_name  a_i_app_use_time.org_name%TYPE;
    v_id  a_i_app_use_time.use_time_id%TYPE;
    
    BEGIN
    
    select  org_name,use_time_id  into v_name,v_id from a_i_app_use_time where use_time_id=517861;
     -- 打印输出
      DBMS_OUTPUT.PUT_line( v_name||v_id ); //合肥供电公司517861
      
    END TEST01;
    

    1.2.3 记录型变量

    慎用!!!接受表中的一整行记录,相当于java中的一个对象

    语法: 变量名称 表名%ROWTYPE , 例如: v_emp emp%rowtype;

    create or replace PROCEDURE TEST01 AS 
         v_emp a_i_app_use_time%rowtype;  // 格式:变量名称 表名%ROWTYPE
    BEGIN
    
    select  *  into v_emp from a_i_app_use_time where use_time_id=517861;
     -- 打印输出 (需要哪个字段用 ‘对象.字段’ 的方式)
     DBMS_OUTPUT.PUT_line(v_emp.org_no||v_emp.emp_no); //34401HF01
    END TEST01;
    

    使用场景:如果一个表有100个字段,使用引用变量声明会特别麻烦,这种情况可以使用记录型变量。

    1.3 流程控制

    1.3.1 条件分支

    语法:

    BEGIN
    
         IF  条件1 THEN  执行1
    
         ELSIF 条件2 THEN 执行2      -- 注意关键字:ELSIF   !!!!!!
    
         ELSE 执行3  
    
         END IF;
    
    END
    
    //判断表中数据总条数,进行条件打印
    CREATE OR REPLACE PROCEDURE STUDY AS 
    v_count NUMBER;
    
    BEGIN
    
    SELECT count(1) into v_count from a_i_app_use_time;  //count(1)效率比count(*)高
    if v_count>15 then
    DBMS_OUTPUT.put_line('总条数为:'||v_count);
    elsif v_count<=5 then                                // elsif 是关键字,不分开
    DBMS_OUTPUT.put_line('0000:'||v_count);
    else
    DBMS_OUTPUT.put_line('1111:'||v_count);
    end if;                 //过程执行语句,有开始就要有结束 
    
    END STUDY;
    

    1.3.2 循环

    CREATE OR REPLACE PROCEDURE STUDY AS 
    v_num number:=1;  //开始的条件
    BEGIN
    loop
    exit when v_num>5;   //结束条件
    v_num :=v_num+1;     //循环条件
    DBMS_OUTPUT.PUT_LINE(v_num);       // 2、3、4、5、6
    end loop;            // 有开始就要有结束
    END STUDY;
    

    2.1 什么是游标

    用于临时存储一个查询返回的多行数据(结果集,类似于java的jdbc连接返回的ResultSet集合),通过遍历游标,可以逐行访问处理该结果集的数据。

    游标的使用方式:声明—>打开—>读取—>关闭

    2.2 语法

    游标声明:

    CURSOR 游标名[(参数列表)] IS 查询语句;

    游标的打开:

    OPEN 游标名;

    游标的取值:

    FETCH 游标名 INTO 变量列表;

    游标的关闭:

    CLOSE 游标名;

    2.3 游标的属性

    游标的属性返回值类型说明
    %ROWCOUNT整型获得FETCH语句返回的数据行数
    %FOUND布尔型最近的FETCH语句返回一行数据则为真,否则为假
    %NOTFOUND布尔型与%FOUND属性返回值相反
    %ISOPEN布尔型游标已经打开时值为真,否则为假

    其中%NOTFOUND是在游标中找不到元素的时候返回TRUE,通常用来判断退出循环。

    2.4 创建和使用

    CREATE OR REPLACE PROCEDURE STUDY AS 
    -- 声明游标
    CURSOR v_data is select org_name,user_mobile from a_i_app_use_time ;
    -- 声明变量去接收游标里的值
    v_name   a_i_app_use_time.org_name%TYPE;
    v_mobile a_i_app_use_time.user_mobile%TYPE;
    BEGIN
    -- 打开游标
    open v_data;
    -- 遍历游标,注意要先fetch
    LOOP
    -- 获取游标数据赋值,注意赋值的顺序
    FETCH v_data into v_name,v_mobile;   
    -- 结束循环的条件
    exit when v_data%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_name||'----'||v_mobile);
    end loop;
    -- 关闭游标
    close v_data;
    END STUDY;
    

    2.5 带参数的游标

    基于参数做具体的查询,有点类似于多了个条件

    create or replace PROCEDURE STUDY AS 
    
    -- 声明游标(带参数)
    CURSOR v_data(id a_i_app_use_time.use_time_id%TYPE) is select org_name,user_mobile from a_i_app_use_time where use_time_id=id ; 
    -- 声明变量去接收游标里的值
    v_name   a_i_app_use_time.org_name%TYPE;
    v_mobile a_i_app_use_time.user_mobile%TYPE;
    BEGIN
    -- 打开游标(输入参数的具体数值)
    open v_data(517866);
    -- 遍历游标
    LOOP
    -- 获取游标数据赋值,注意赋值的顺序
    FETCH v_data into v_name,v_mobile; 
    -- 结束循环的条件
    exit when v_data%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_name||'----'||v_mobile);   // 根据参数只查询到一条数据
    end loop;
    -- 关闭游标
    close v_data;
    END STUDY;
    

    3.1 概念作用

    之前我们编写的PLSQL程序可以进行表的操作,判断、循环逻辑处理的工作,但无法重复调用。

    可以理解为之前的代码全部编写在了main方法中,是匿名程序。Java可以通过封装对象和方法来解决服用问题。

    PLSQL是将一个个PLSQL的业务处理过程存储起来进行复用,这些被存储起来的PLSQL程序称之为存储过程。

    存储过程作用:

    1、在一个开发过程中,为了一个特定的业务功能,会向数据库进行多次连接关闭(非常耗费资源),需要对数据库进行多次的I/O读写,性能比较低。如果把这些业务放到PLSQL中,在应用程序中,只需要调用PLSQL就可以做到连接关闭一次数据库就可以实现我们的业务,大大提高了效率。

    2、ORACLE官方给的建议:能够让数据库操作的不要放在程序中,在数据库中实现基本不会出现错误,在程序中操作可能会存在错误(如果在数据库中操作数据,可以有一定的日志恢复功能)。

    3.2 语法

    create or replace PROCEDURE 过程名称[(参数列表)]  AS
    
    
    BEGIN
    
    END[过程名称]; 
    
    ```plsql
    根据参数的类型,我们将其分为3类讲解:
    
    1、不带参数的
    
    2、带参数的
    
    3、带输入输出(返回值)参数的
    
    3.3 无参存储
    
    **3.3.1 创建存储**
    
    通过工具直接创建即可。
    
    **3.3.2 调用存储过程**
    
    ​```plsql
    // set serveroutput on;   -- 当调用时,显示过程已经完成,却没有显示结果时执行该条语句可解决
    BEGIN
    STUDY; -- 调用day02写好的名为STUDY的存储过程
    STUDY; -- 又调用了一遍,写几遍即调用几遍
    end;
    

    3.4 带输入参数的存储过程

    【示例】

    CREATE OR REPLACE PROCEDURE DEMOTEST ( ID IN NUMBER DEFAULT 517866) AS  -- 入参给定一个默认值
    
    v_name a_i_app_use_time.org_name%TYPE;
    v_ym a_i_app_use_time.stat_ym%TYPE;
    
    BEGIN  
    select org_name ,stat_ym into v_name ,v_ym FROM a_i_app_use_time where use_time_id=id;
    DBMS_OUTPUT.put_line(v_name||v_ym);  //  合肥供电公司20200506
    END DEMOTEST;
    
    ===================================调用上面存储过程如下===================================
    begin
    DEMOTEST(517867);  
    end;
    

    3.5 带输出参数的存储过程

    带输出参数的存储过程通常都是给第三方使用的,比如我们的java

    CREATE OR REPLACE PROCEDURE DEMO_IN_OUT 
    (
      ID IN NUMBER         -- 输入参数作为条件
    , V_YM OUT VARCHAR2    -- 输出参数,需返回
    ) AS 
    BEGIN
    SELECT
        stat_ym into v_ym   FROM a_i_app_use_time where  use_time_id=id;
    END DEMO_IN_OUT;
    
    ================================调用上述存储过程=====================================
    DECLARE  -- 声明变量接收返回值
    v_ym a_i_app_use_time.stat_ym%TYPE;
    begin
    DEMO_IN_OUT(517866,v_ym);     --    注意入参、出参的顺序
    DBMS_OUTPUT.put_line(v_ym);   //    20200506
    end;
    

    3.6 java程序调用存储过程

    ​ 通常指带输出参数的存储过程,我们给一个参数,过程让其完成返回一个结果集,减少了网络了交互。

    ​ 通过JDBC连接中的Connection的prepareCall方法来调用存储过程

    //1. 加载驱动
    Class.forName("oracle.jdbc.driver.OracleDriver");
    //2. 获取连接对象
    Connection conn=DriverManager.getConnect(url,user,password);
    
    //3.获得语句对象
    String sql=“{call 存储过程名称(?,?)}”; -- 转义sql,专门用来调取存储过程,这里有两个参数,两个 ? ?
    Callableable call=conn.prepareCall(sql);
    
    //4设置输入参数
    call.setInt(1,100); -- 什么类型就设置什么类型,与之前sql无异
    
    //5.注册输出参数
    call.registerOutParameter(2,OracleTypes.Varchar); -- 注册类型对应Oracle里面的类型
    
    //6.执行存储过程
    call.execute();
    
    //7.获取输出参数
    String result=call.getString(2);
    
    展开全文
  • java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
  • 数据自动采集接口的实现需要依托于LabVIEW数据采集技术以及Java存储过程,在LabVIEW数据采集过程中引进Java存储过程,借助此接口可以实现实验室数据向船舶数字化平台的导入,有效节省人工操作环节。文章首先对LabVIEW...
  • JAVA存储过程详解

    2010-05-21 21:42:58
    关于存储过程的详细 总结 然大家更好的 了解存储过程 体会其的 强大
  • 基于Oracle 10g的JAVA存储过程应用研究,张楠,,介绍了Oracle和存储过程,在对JAVA存储过程和PL/SQL存储过程的比较分析的基础上, 探讨了JAVA存储过程在Oracle 10g中的应用,详细阐述了JAVA�
  • java调用存储过程

    千次阅读 2021-02-28 14:12:54
    这里是java调用存储过程。packagecom.lijianbo.procedure;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Types;/***@author*存储过程MySQL*/...

    这里是java调用存储过程。package com.lijianbo.procedure;

    import java.sql.CallableStatement;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.Types;

    /**

    * @author

    * 存储过程MySQL

    */

    public class ProcedureMySql {

    public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";

    public static final String URL = "jdbc:mysql://localhost:3306/test";

    public static final String USERNAME = "root";

    public static final String PASSWORD = "root";

    public static void main(String[] args) throws Exception {

    //          test1();

    //          test2();

    testIdAdd();

    }

    public static void test1() throws Exception

    {

    Class.forName(DRIVER_CLASS);

    Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

    String sql = "{CALL test1(?)}"; //调用存储过程

    CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm

    cstm.setString(1, "李"); //存储过程输入参数

    cstm.execute(); // 执行存储过程

    cstm.close();

    connection.close();

    }

    /**

    * 查询总的价格

    * getTotalByUser2

    * call getTotalByUser2(1, true, @total);  -- 加税

    *select @total;

    * @throws Exception

    */

    public static void test2() throws Exception {

    Class.forName(DRIVER_CLASS);

    Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

    String sql = "{CALL getTotalByUser2(?,?,?)}"; //调用存储过程

    CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm

    cstm.setInt(1, 1); //设置第一个传入参数

    cstm.setBoolean(2, true); //设置第二个传入参数

    cstm.registerOutParameter(3, Types.DECIMAL); // 设置返回值类型 即返回值

    cstm.execute(); // 执行存储过程

    System.out.println(cstm.getString(3));

    cstm.close();

    connection.close();

    }

    /**

    *id自增

    * getTotalByUser2

    * call getTotalByUser2(1, true, @total);  -- 加税

    *select @total;

    * @throws Exception

    */

    public static void testIdAdd() throws Exception {

    Class.forName(DRIVER_CLASS);

    Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

    String sql = "{CALL test1(?)}"; //调用存储过程

    CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm

    cstm.setString(1, "测试"); //设置第一个传入参数

    cstm.execute(); // 执行存储过程

    cstm.close();

    connection.close();

    }

    }

    存储过程既可以在java中调用,也可以在触发器中调用,欲知简单实现。可以参考我的上一篇文章“触发器的简单实现”。

    Java在sql中调用存储过程:

    参数封装://存储过程参数封装

    BatchImportParam batchImportParam = new BatchImportParam();

    batchImportParam.setDescn(descn);

    batchImportParam.setExportName(exportName);

    batchImportParam.setExportNo(exportNo);

    batchImportParam.setImportName(importName);

    batchImportParam.setOrderNo(orderNo);

    batchImportParam.setImportNo(importNo);

    batchImportParam.setCreateby(getCurrentUserId(request));

    batchImportParam.setCardProductId(cardProductId);

    batchImportParam.setCardFaceId(cardFaceId);

    batchImportParam.setCardTotalCount(null);

    /*

    * 调用存储过程,执行业务

    */

    //batchImportParam为调用存储

    //过程的封装的参数类,这里也可以采用一个map,向map中传参数。

    batchImportCardManager.batchImportCardAndUser(batchImportParam);

    //返回的参数,我们可以直接在参数集合中去

    //直接获取

    cardTotalCount = batchImportParam.getCardTotalCount();

    System.err.println("==================存储过程成功导入总记录数为:"+cardTotalCount);

    在BatchImportCardDAOImpl中我们采用select关键字查询。@Override

    public Integer batchImportCardAndUser(BatchImportParam batchImportParam) {

    return getSqlSession().selectOne(getSqlMapNamespace() + ".batch_import_cardanduser",batchImportParam);

    }

    在xml中调用存储过程。

    {call batch_import_cardanduser(?,?,?,?,?,?,?,?,?,?)}  

    ]]>

    总结:其实这种在xml中调用也相当于上面的直接在方法中直接调用,都是需要传入参数,返回参数,只是表现形式不一样而已。

    我这里只是一个示例,你可以参考里面的注释,具体存储过程的名字要根据你自己写的来修改。

    时间:2016年12月20日16:59:13

    -------------快速的向一张表中插入10万条数据,怎么做,用sql实现------------

    最开始我想写一句插入的sql,直接循环插入多条数据,结果语法不正确。(sql只能执行一次,不能循环执行,调用一次执行一次)INSERT INTO test1(id,name) VALUES(1+(SELECT MAX(t.id) FROM test1 t),CONCAT('admin',(SELECT MAX(t1.id)+1 FROM test1 t1)))

    WHERE ((SELECT MAX(id) from test1) 

    如下:-- 存储过程

    delimiter ||

    create procedure myproc()

    begin

    declare num int ;

    set num = 1 ;

    while num 

    insert into test1(id, `name`)

    values

    (num, concat("name", num)) ;

    set num = num + 1 ;

    end

    while ;

    end||

    -- 执行这个函数

    call myproc()

    -- 删除这个存储过程

    drop procedure myproc

    -- 清空表

    DELETE from test1

    -- 查询数据

    SELECT * from test1

    总结:存储过程更易写逻辑,难度更低。我们有时候写多条关联查询的时候,sql难度比较大,其实可以写存储过程来实现,只是后期维护难度大点。

    展开全文
  • java 调用存储过程

    2018-06-26 15:09:15
    java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程java 调用存储过程
  • java调用oracle存储过程详解

    千次阅读 2021-03-07 10:56:16
    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧。首先来看一下项目结构:在数据库创建存储过程的脚本,假如,使用的是本地的oracle数据库,那么,就需要...

    之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧。

    首先来看一下项目结构:

    d6cf54b835d82b80d670141f1f470574.png

    在数据库创建存储过程的脚本,假如,使用的是本地的oracle数据库,那么,就需要开启服务-OracleOraDb11g_home1TNSListener和OracleServiceORCL。

    实现:

    输入用户的工号,输出用户名字、薪水以及工作:create or replace procedure queryempinfo(eno in number

    , pename out varchar2

    , psal out number

    , pjob out varchar2)

    as

    begin

    --得到该员工的姓名 月薪和职位

    select ename, sal, job into pename, psal, pjob from emp where empno = eno;

    end;

    之后,在项目当中引入oracle的jdbc的jar包。

    Procedure代码:package com.tomhu.procedure;

    import java.sql.CallableStatement;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import oracle.jdbc.OracleTypes;

    public class Procedure

    {

    private Connection conn;

    private CallableStatement stat;

    private ResultSet rs;

    String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

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

    String username = "scott";

    String password = "******";

    String sql = "call queryempinfo(?,?,?,?)";

    // 调用存储过程

    public void callProcedure()

    {

    try

    {

    Class.forName(driverName);

    conn = DriverManager.getConnection(url, username, password);

    stat = conn.prepareCall(sql);

    // 一个输入参数和三个输出参数

    stat.setInt(1, 7566);

    stat.registerOutParameter(2, OracleTypes.VARCHAR);

    stat.registerOutParameter(3, OracleTypes.NUMBER);

    stat.registerOutParameter(4, OracleTypes.VARCHAR);

    stat.execute();

    String name = stat.getString(2);

    int sal = stat.getInt(3);

    String job = stat.getString(4);

    System.out.println("name: " + name + ", sal: " + sal + ", job: " + job);

    }

    catch (Exception e)

    {

    e.printStackTrace();

    }

    finally

    {

    close(conn, stat, rs);

    }

    }

    // 关闭连接

    public void close(Connection conn, CallableStatement stat, ResultSet rs)

    {

    if (rs != null)

    {

    try

    {

    rs.close();

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    finally

    {

    rs = null;

    }

    }

    if (stat != null)

    {

    try

    {

    stat.close();

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    finally

    {

    stat = null;

    }

    }

    if (conn != null)

    {

    try

    {

    conn.close();

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    finally

    {

    conn = null;

    }

    }

    }

    public static void main(String[] args)

    {

    new Procedure()

    .callProcedure();

    }

    }

    输出结果:name: JONES, sal: 2975, job: MANAGER

    在java当中如何去调用oracle存储过程你都了解了吧,你还想了解更多java程序代码例子吗?更多相关内容请继续的通过奇Q工具网来进行了解吧!希望上面的文章内容可以对你有所帮助哦。

    推荐阅读:

    展开全文
  • 1.定义一个存储过程(不带参数) 使用sql语句定义一个存储过程挺简单的,参考这一篇博文https://blog.csdn.net/qq_44973159/article/details/91491985 create procedure ccgc...package java617存储过程; impor...
  • java存储过程的使用

    2012-09-18 11:00:49
    附上了详细的orcl中的存储过程的创建和在java中的存储过程的使用,并且给出了一个很简单的小demo
  • 提供JAVA调用ORACLE存储过程通用类
  • 因为,Java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。一、如何创建java存储过程?通常有三种方法来创建java存储过程。 使用oracle的sql语句...
  • Java 调用存储过程 返回结果集

    千次阅读 2021-04-10 11:28:00
    用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 我的存储过程: --参数+执行语句 alter PROCEDURE [dbo].[homepagenotification] @uid AS nvarchar(512) , @uname AS nvarchar(512...
  • java存储过程和PL/SQL存储过程的比较,Java存储过程的使用方法。
  • JAVA存储过程

    千次阅读 2007-08-09 15:35:00
    利用Java存储过程简化数据库操作作者:Kuassi Mensah 利用Java存储过程沟通SQL、XML、Java、J2EE和Web服务。 存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离...
  • Java调用带参数的Oracle 存储过程并返回集合,
  • Java调用存储过程--传入集合参数 具体的方法描述分析
  • oracle sqlserver 共用存储过程
  • Java (jdbctemplate)中使用存储过程

    千次阅读 2020-04-23 19:28:11
    (Java (jdbctemplate)中使用存储过程)
  • java调用存储过程 返回结果集

    千次阅读 2017-03-28 18:26:58
    Java代码调用存储过程: public Map rankInfo(Map rankMap,String start,String end, String userId,String officeId, String rankType,String timeType){ try { //排名前十的用户答题详情 List topTenUsers = ...
  • java 调用 mysql存储过程

    千次阅读 2021-12-04 10:16:24
    java调用mysql存储过程,通用方法
  • java调用存储过程的方法,含还有out参数的存储过程,解决方案,在网上找了n久发现这样的资源太少,现在总结一下我的解决方案供大家分享,希望对大家有用
  • Java代码中执行存储过程和函数

    千次阅读 2018-07-30 11:34:09
    一:Java如何实现对存储过程的调用: &nbsp;&nbsp; A:不带输出参数的 &nbsp;&nbsp; —————不带输出参数的———————————- create procedure getsum @n int =0&lt;–此处为参数–&...
  • 1. 使用不带参数的存储过程 2. 使用带有输入参数的存储过程 3. 使用带有输出参数的存储过程 4. 使用带有返回状态的存储过程 5. 使用带有更新计数的存储过程
  • java mybatis调用存储过程

    千次阅读 2021-06-15 10:09:47
    mybaits调用存储过程getdemosp,mode=IN代表传入的参数 {call getdemosp( #{param1,mode=IN,jdbcType=VARCHAR}, #{param2,mode=IN,jdbcType=VARCHAR} )} resultType对应返回的存储过程的字段类型 接收mybatis数据 ...
  • Java调用SQL_Server的存储过程详解 1使用不带参数的存储过程 2使用带有输入参数的存储过程 3使用带有输出参数的存储过程 4 使用带有返回状态的存储过程 5 使用带有更新计数的存储过程
  • 使用java实现oracle存储过程。 共有3个小例子。实现的功能 1、无返回值的存储过程 如 insert 2、有返回值的存储过程(非列表)select id from tab 3、返回列表 如:select * from tab 顺便鄙视下csdn,作为一个it...
  • 存储过程Java中的使用

    千次阅读 2017-08-06 22:54:54
    存储过程的创建参考 存储过程的演示 关键代码如下:import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException;import oracle.jdbc.OracleTypes; import util.JDBCUtil;public...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 929,574
精华内容 371,829
关键字:

java存储过程

友情链接: shudiansheji.zip