下面将举出JAVA对ORACLE数据库存储过程的调用





        





ConnUtils连接工具类:用来获取连接、释放资源





复制代码

package com.ljq.test;





import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;





/**

 * 连接工具类

 * 

 * ConnUtils类声明为final类说明此类不可以被继承

 * 

 * @author jiqinlin

 * 

 */

public final class ConnUtils {

    private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";

    private static String user = "test";

    private static String password = "test";





    /**

     * 说明要访问此类只能通过static或单例模式

     */

    private ConnUtils() {

    }





    // 注册驱动 (只做一次)

    static {

        try {

            Class.forName("oracle.jdbc.driver.OracleDriver");

        } catch (ClassNotFoundException e) {

            throw new ExceptionInInitializerError(e);

        }

    }





    /**

     * 获取Connection对象

     * 

     * @return

     * @throws SQLException

     */

    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);

    }





    /**

     * 释放资源

     * 

     * @param rs

     * @param st

     * @param conn

     */

    public static void free(ResultSet rs, Statement st, Connection conn) {

        try {

            if (rs != null)

                rs.close();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            try {

                if (st != null)

                    st.close();

            } catch (SQLException e) {

                e.printStackTrace();

            } finally {

                if (conn != null)

                    try {

                        conn.close();

                    } catch (SQLException e) {

                        e.printStackTrace();

                    }

            }

        }

    }

}

复制代码

            





创建带出参存储过程代码:





复制代码

--带出参存储过程

CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT VARCHAR2) AS

BEGIN 

  SELECT o.sname INTO v_name FROM student o where o.id = 2;

END;

复制代码

        





使用java调用带出参的存储过程





复制代码

package com.ljq.test;





import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.Types;





public class ProceTest {





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

        Connection conn = null;

        CallableStatement statement = null;

        String sql = "{call stu_proc(?)}";

        try {

            conn = ConnUtils.getConnection();

            statement = conn.prepareCall(sql);

            statement.registerOutParameter(1, Types.VARCHAR);

            statement.executeUpdate();

            //输出:lisi

            String sname = statement.getString(1);

            System.out.println(sname);

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            ConnUtils.free(null, statement, conn);

        }

    }





}

复制代码

            





创建带出入参存储过程代码





复制代码

--带出入参存储过程

CREATE OR REPLACE PROCEDURE stu_proc(v_id IN NUMBER, v_name OUT VARCHAR2) AS

BEGIN 

  SELECT o.sname INTO v_name FROM student o where o.id = v_id;

END;

复制代码

          





使用JAVA调用带出入参存储过程





复制代码

package com.ljq.test;





import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.Types;





public class ProceTest {





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

        Connection conn = null;

        CallableStatement statement = null;

        String sql = "{call stu_proc(?, ?)}";

        try {

            conn = ConnUtils.getConnection();

            statement = conn.prepareCall(sql);

            statement.setInt(1, 1);

            statement.registerOutParameter(2, Types.VARCHAR);

            statement.executeUpdate();

            //输出:zhangsan

            String sname = statement.getString(2);

            System.out.println(sname);

        } catch (SQLException e) {

            e.printStackTrace();

        }finally{

            ConnUtils.free(null, statement, conn);

        }

    }





}

JAVA调用数据库存储过程的更多相关文章

  1. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  2. JAVA调用oracle存储过程实例

    1.创建添加存储过程 CREATEORREPLACEPROCEDURE stu_proc(v_id INNUMBER, v_name INVARCHAR2, v_age INNUMBER) AS BE ...

  3. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  4. java代码调用数据库存储过程

    由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatemen ...

  5. Java调用MySQL存储过程

    Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse 首先查看MySQL中的数据库的存储过程,接着编写代码调用 mysql> show procedure status; + ...

  6. java调用数据库中的函数和存储过程

    1.调用函数 {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name&g ...

  7. 连接sqlServer数据库&jpa调用存储过程Java获取存储过程返回的多个结果集JAVA调用sqlserver存储过程的实现(返回多个结果集的实现)jdbc多结果集(getMoreResults)

    存储过程: BEGIN select * from teacher; SELECT * FROM student; END public Object GetMyBOProjectProductLis ...

  8. java基础---->java调用oracle存储过程(转)

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天 ...

  9. java基础---->java调用oracle存储过程

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天 ...

随机推荐

  1. java实现异步调用实例

    在JAVA平台,实现异步调用的角色有如下三个角色: 调用者 取货凭证   真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据.  ...

  2. 基于表单数据的封装,泛型,反射以及使用BeanUtils进行处理

    在Java Web开发过程中,会遇到很多的表单数据的提交和对表单数据的处理.而每次都需要对这些数据的字段进行一个一个的处理就显得尤为繁琐,在Java语言中,面向对象的存在目的便是为了消除重复代码,减少 ...

  3. 打Patch实践

    一.找到相应PATCH 确认系统已安装模块版本. SELECTapp.application_short_name, app.application_name, pi.patch_level   FR ...

  4. Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用

    多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流.进程是静态的 ...

  5. ROS_Kinetic_05 ROS基础内容(二)

    ROS_Kinetic_05 ROS基础内容(二) 1. ROS节点node 官网教程:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingNodes ...

  6. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  7. 【一天一道LeetCode】#74. Search a 2D Matrix

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...

  8. 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略

    早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...

  9. 排序算法(二)Sort with Swap(0,*)

    对于一个由0到N-1的序列,如果只能交换0和另一个数的位置,求多少次能够将序列变为递增序列. 输入为<N> <序列>(N和序列之间有一个空格,序列元素之间均有一个空格). 设序 ...

  10. Java进阶(十三)servlet监听器

    servlet监听器 Listener是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当 增加一个HttpSession时 ...