精华内容
下载资源
问答
  • 说到使用java调用存储过程,就不得不说一下java.sql包了。在此包中的Connection类中有个方法:prepareCall(String sql) 创建一个 CallableStatement 对象来调用数据库存储过程。使用此方法调用一个存储过程。返回值...

    说到使用java调用存储过程,就不得不说一下java.sql包了。在此包中的Connection类中有个方法:prepareCall(String sql) 创建一个 CallableStatement 对象来调用数据库存储过程。使用此方法调用一个存储过程。返回值为CallableStatement类,这个类为存储过程设置入参以及出参。详情请参阅api。用到的方法:

    registerOutParameter(String parameterName, int sqlType) 将名为 parameterName 的 OUT 参数注册为 JDBC 类型 sqlType。

    getObject(int parameterIndex)  以 Java 编程语言中 Object 的形式获取指定参数的值。

    setString(String parameterName, String x) 将指定参数设置为给定 Java String 值。

    下面代码实现:

    stmt是一个CallableStatement类。conn是一个Connection类。

    这里测试的存储过程只有一个入参。

    stmt=conn.prepareCall(“{call 存储过程名字(?,?)}”);//?为参数。

    stmt.setString(1, “a”);//设置第一个参数:入参为a。

    stmt.registerOutParameter(2,OracleTypes.CURSOR);//设置第二个参数返回数据JDBC 类型 sqlType。

    stmt.execute();

    res=(ResultSet)stmt.getObject(2);//以 Java 编程语言中 Object 的形式获取出参数的值。

    res.getString(1)

    res.getInt(2)//根据返回字段的顺序取得对应的数据。类型要一致。

    代码只有主要部分,需要获得上述未声明的类就可以使用。

    若有不足,请多多指教!

    共勉,努力学习,一起进步。谢谢!

    展开全文
  • java调用oracle存储过程java代码Map param = new HashMap();param.put("in_str", "1,2,3,4");...//调用存储过程,参数以map的形式传递String lsn = param.get("out_str");//出参mybatis的接口定义String execProced...

    java调用oracle存储过程

    java代码

    Map param = new HashMap();

    param.put("in_str", "1,2,3,4");//入参

    wxMapper.execProcedure(param);//调用存储过程,参数以map的形式传递

    String lsn = param.get("out_str");//出参

    mybatis的接口定义

    String execProcedure(Map param);

    mybatis的xml文件

    {call lsq_pkg_test(

    #{in_str,mode=IN,jdbcType=VARCHAR},#{out_str,mode=OUT,jdbcType=VARCHAR})}

    存储过程

    create or replace procedure lsq_pkg_test (in_str in out varchar2,out_str out varchar2) is

    --如果入参不需要修改则为(in_str in varchar2),否则为(in_str in out varchar2).相当于多加了一个out

    v_res_str varchar2(20);

    v_current varchar2(20);

    tmp_str number;

    tmp_s varchar2(100);

    begin

    v_res_str:='';

    v_current:='';

    loop

    EXIT WHEN in_str IS NULL;

    lsq_pkg_grant_test(in_str, v_res_str, v_current, ',');--字符串的截取

    select count(*) into tmp_str from 表名 where 字段名= v_current;--根据截取的字符,进行数据库的查询

    if tmp_str =0 then--查询不到数据

    out_str:=CONCAT(tmp_s,v_current) ;--把截取的字符赋值给返回值

    tmp_s:=concat(out_str,',');

    --tmp_s :=out_str;

    in_str:=v_res_str;--把截取后剩下的字符,再一次赋值给原始字符,进行字符串截取

    else

    in_str:=v_res_str;--把截取后剩下的字符,再一次赋值给原始字符,进行字符串截取

    end if;

    end loop;

    end;

    字符串截取的存储过程

    create or replace procedure lsq_pkg_grant_test(P_INSTR IN VARCHAR2,--传入字符串,逗号分隔,输入参数

    P_STRS OUT VARCHAR2,--截取第1个值之后剩下的字符串,输出参数

    P_CURR OUT VARCHAR2, --截取到的第1个值,输出参数

    P_CHAR IN VARCHAR2--以什么字符为分隔字符

    ) is

    CURR_LOCA NUMBER;

    begin

    CURR_LOCA := INSTR(P_INSTR, P_CHAR, 1, 1);

    P_CURR := SUBSTR(P_INSTR, 0, CURR_LOCA - 1);

    IF P_CURR IS NULL THEN

    P_CURR := P_INSTR;

    P_STRS := NULL;

    ELSE

    P_STRS := SUBSTR(P_INSTR, CURR_LOCA + 1);

    END IF;

    end;

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

    2018-04-12 22:02:00
    说到使用java调用存储过程,就不得不说一下java.sql包了。在此包中的Connection类中有个方法:prepareCall(String sql) 创建一个 CallableStatement 对象来调用数据库存储过程。使用此方法调用一个存储过程。返回值...

    说到使用java调用存储过程,就不得不说一下java.sql包了。在此包中的Connection类中有个方法:prepareCall(String sql) 创建一个 CallableStatement 对象来调用数据库存储过程。使用此方法调用一个存储过程。返回值为CallableStatement类,这个类为存储过程设置入参以及出参。详情请参阅api。用到的方法:

    registerOutParameter(String parameterName, int sqlType) 将名为 parameterName 的 OUT 参数注册为 JDBC 类型 sqlType。

    getObject(int parameterIndex)  以 Java 编程语言中 Object 的形式获取指定参数的值。

    setString(String parameterName, String x) 将指定参数设置为给定 Java String 值。

    下面代码实现:

    stmt是一个CallableStatement类。conn是一个Connection类。

    这里测试的存储过程只有一个入参。

    stmt=conn.prepareCall(“{call 存储过程名字(?,?)}”);//?为参数。
     stmt.setString(1, “a”);//设置第一个参数:入参为a。
    stmt.registerOutParameter(2,OracleTypes.CURSOR);//设置第二个参数返回数据JDBC 类型 sqlType。
    stmt.execute();    
     res=(ResultSet)stmt.getObject(2);//以 Java 编程语言中 Object 的形式获取出参数的值。

    res.getString(1)
    res.getInt(2)//根据返回字段的顺序取得对应的数据。类型要一致。

    代码只有主要部分,需要获得上述未声明的类就可以使用。

    若有不足,请多多指教!

    共勉,努力学习,一起进步。谢谢!

     



    转载于:https://www.cnblogs.com/wangyanei2017/p/8810722.html

    展开全文
  • 调用不同数据库的存储过程的主要区别在于查询语句的写法以及...)"call 必须要大写,至于为什么小写无法成功调用存储过程实在是找不出原因。参数部分,有多少个[入参、出参、结果集]就写几个?,在参数这个部分Mssql...

    调用不同数据库的存储过程的主要区别在于查询语句的写法以及获取返回值的方式不同,

    其他的方面都是一样的。

    调用Oracle存储过程

    1. 查询语句的写法

    String procStr = "CALL procNameSpace.procName(?,?,?)"

    call 必须要大写,至于为什么小写无法成功调用存储过程实在是找不出原因。

    参数部分,有多少个[入参、出参、结果集]就写几个?,在参数这个部分Mssql会存在一些差异。

    2. 参数赋值及调用

    Connection connection = getConnection();

    CallableStatement statement = connection.prepareCall(procStr);

    statement.setString(1, parameter)

    statement.registerOutParamenter(2, OracleType.NUMBER);

    statement.registerOUtParamenter(3, OracleType.CURSOR);

    statement.execute();

    int number = statement.getObjece(2);

    Result result = statement.getObject(3);

    入参赋值部分没有什么好说的,关键在于出参及结果集。

    出参及结果集都是调用registerOutParamenter()方法,不同之处在于:

    出参的类型为具体对应的类型,结果集的类型为CURSOR。

    调用Mssql存储过程

    1. 查询语句的写法

    String procStr = "{CALL [procNameSpace.procName](?,?)}";

    Mssql查询语句要在最外部加上大括号,在存储过程名称部分还要加上方括号

    Mssql参数部分,有多少个[入参、出参]就写几个?,与Oracle不同的是结果集不需要在参数部分体现。

    2. 参数赋值及调用

    入参部分与Oracle一致,没有区别。

    出参及结果集部分,Mssql比较特殊,出参与结果集的获取方式不同。

    出参:

    statement = registerOutParameter(2, Types.INTEGER);

    statement.execute();

    int number = statement.getObject(2);

    结果集:

    Result result = statement.executeQuery();

    Mssql出参的调用方式与Oracle基本上一致,只是参数的类型不同。结果集无需定义参数,直接获取就行了。

    出参与结果集不同的获取方法与Mssql存储过程是保存一致的。

    调用EDB存储过程

    EDB数据库是progress的商用版本,使用上基本上与Oracle差不多。

    1. 查询语句的写法

    EDB查询语句要在最外部加上大括号

    String procStr = "{CALL procNameSpace.procName(?,?)}";

    2. 参数赋值及调用

    参数部分与Oracle一样,唯一的区别在于参数的类型。

    EDB出参类型为Types.对应的类型,结果集的类型为Types.OTHER

    展开全文
  • 定义了三个入参,一个出参,其中入参中有一个number型的,有两个varchar2的,且在使用时有一个参数用在like语句上了,所以又多加了两个单引号,在Oracle中直接测试存储过程是正确的,但在java调用时,我直接把字符串...
  • 当过程包中定义了 Type( record ), 并作为包内存储过程出参,如何通过Java进行存储过程调用?本次对此问题进行了验证。
  • 返回系统游标集合说明:调用的是oracle存储过程示例一:多个参数,手动映射返回字段第一步:参数配置(入参、出参)第二步:返回值,将返回值封装到HashMap中第三步:调用存储过程2020/04/18说明:参数映射...
  • 今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 1 Connection conn = ConnectionUtil.getConnect();//取得数据库连接 2 3...
  • Java代码调用存储过程

    2020-05-27 01:00:29
    同时,需要使用Java存储过程调用进行支持。 遇到问题: 存储过程的输出参数形式不统一,Java获取输出结果逻辑复杂 无法复用一套代码解决获取输出参数问题 解决方案: 上游定存储过程创建规则: 所有出参封装到...
  • java调用oracle存储过程

    2015-07-30 18:34:12
    java调用oracle存储过程 java代码 Map param = new HashMap(); param.put("in_str", "1,2,3,4");...//调用存储过程,参数以map的形式传递 String lsn = param.get("out_str");//出参 mybatis的接口定义 Str
  • 一、java调用PROCEDURE1.1 新建存储过程如下代码中,关键字说明:IN :表示入参OUT:表示出参RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的idSEQ_WORK_REPORT_ID.nextval:表示的是序列,读者...
  • SQLJ技术的使用本文不进行相关介绍,如果是想要学习的朋友可以在网上搜索一下,很多资料都有介绍。... 应用程序调用数据库中的存储过程,注册的出参为ORACLE自定义的TYPE或OBJECT类型,存诸过程...
  • 一、新建存储过程 如下代码中,关键字说明: IN :表示入参 OUT:表示出参 RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼网上很多关于java调用oracle存储过程、函数的例子,大部分例子都是,出参是基本类型和光标类型的,没有type类型的,最近用到了type类型,由于网上没有相关资料,弄了好久...
  • service业务层调用dao层 注意:返回值直接从对象...//对象封装了存储过程的入参和出参 count = userPO.getCount(); //count 是存储过程的返回值 dao层接口 public interface userDao { Integer uspGetUser(User...
  • hibernate 调用存储过程

    2009-02-25 13:19:31
    一个出参,业务(通过调用存储过程自动获得一个id) public int findByProcedure(String name) {//name为存储过程的名字 Session session = this.getHibernateTemplate().getSessionFactory()....
  • mapper如下:call你需要调用存储过程,mode=IN,是你的入参,OUT出参 <select id="**********" parameterType="java.util.Map" statementType="CALLABLE"> { CALL ******** ( #{*****,mode=IN,jdbcType=...
  • JDBC调用MySQL5存储过程

    2017-11-14 21:22:00
    JDBC调用MySQL5存储过程,过程有入参和出参,执行存储过程,并获取出参。 一、环境 MySQL5.1 mysql-connector-java-5.1.10 jdk1.5 表 createtableuser( idint(11)notnullauto_increment, ...
  • Java中调用存储过程 -- Mybatis public interface XXXMapper { ​ ... * 原因:存过的入参、出参都在java调用的入参中 * 2.Map里面封装了出参和入参 * 3.引用类型可以直接修改里面的数据,M...
  • missing parameter type,调用存储过程的时候遇到这个问题,后来查看jdbc代码,发现是创建存储过程的时候,【是否入参出参】,【参数名称】和【参数类型】中间都要有个空格,不然java代码是无法正常执行的,但是直接...
  • 最近只是简单的学习了一下存储过程,梳理一下知识点,包括无参,入参,出参存储过程的创建以及JDBC的调用
  • 使用java spring中的JdbcTemplate调用oracle中的存储过程(该存储过程有入参还出参):存储过程: CREATE OR REPLACE PROCEDURE "HIS_BZ_QC"."PROC_APP_REGIST" ( Hosnum In Varchar2,--医院编号 App_Hid In Varchar2
  • SQL Server存储过程

    2016-05-27 19:33:05
    存储过程也分有,有返回值无返回值 */ --常用的系统存储过程 ---列当前系统中的数据库 exec sp_databases ---修改数据库的名称(单用户访问) exec sp_renamedb 'school','university' ---返回某个表列的信

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

java调用存储过程出参

java 订阅