JDBC之存储过程

存储过程的语法创建就不说了,这里这篇博客 就挺详细了http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html。

1. Java代码调用没有参数的存错过程

  首显示创建一个个存储过程:

DELIMITER $$

USE `jdbcdemo`$$

DROP PROCEDURE IF EXISTS `selectAll`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `selectAll`()
BEGIN
SELECT * FROM boy; 得到所有的数据
    END$$

DELIMITER ;

其次在代码中调用这个存储过程,当然首先还是获得数据库的连接。 获取连接在上一片博客中http://www.cnblogs.com/xlurenjia/p/5901983.html。

Java 中的代码

public List<Boy> querayProcedure(){
        List<Boy> list = new ArrayList<>();
        Connection conn = DBUtil.getConnection();
        try {
            CallableStatement statement = conn.prepareCall("call selectAll()"); 调用存储过程
            statement.execute();
            ResultSet rs = statement.getResultSet();  // 获得结果集,其余操作就跟平常的操作都一样了
            while (rs.next()) {
                String name = rs.getString("user_name");
                Boy gd = new Boy();
                gd.setUser_name(name);
                list.add(gd);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return list;
    }

2. 有带IN参数的存储过程

DELIMITER $$

USE `jdbcdemo`$$

DROP PROCEDURE IF EXISTS `select_filter`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `select_filter`(IN sp_name VARCHAR(20))
BEGIN
    IF sp_name IS NULL OR sp_name = ‘‘ THEN
      SELECT * FROM boy;
        ELSE
      IF LENGTH(sp_name) = 11 AND SUBSTRING(sp_name, 1, 1)=1 THEN
        SELECT * FROM boy WHERE mobile = sp_name;
      ELSE
        SELECT * FROM boy WHERE user_name LIKE CONCAT(‘%‘, sp_name, ‘%‘);
      END IF;
    END IF;
    END$$

DELIMITER ;

Java中的代码

public List<Boy> querayProcedureFilter(String sp_name){
        List<Boy> list = new ArrayList<>();
        Connection conn = DBUtil.getConnection();
        try {
            CallableStatement statement = conn.prepareCall("call select_filter(?)");
            statement.setString(1, sp_name); //将参数穿进去
            statement.execute();
            ResultSet rs = statement.getResultSet();
            while (rs.next()) {
                String name = rs.getString("user_name");
                Boy gd = new Boy();
                gd.setUser_name(name);
                list.add(gd);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return list;
    }

3. 带有OUT的存储过程

DELIMITER $$

USE `jdbcdemo`$$

DROP PROCEDURE IF EXISTS `select_count`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `select_count`( OUT sp_count INT)
BEGIN
SELECT COUNT(1)INTO sp_count FROM boy;
END$$

DELIMITER ;

Java中代码

public int querayCountByProceureOut(){

        int count = 0;
        try {
            Connection conn = DBUtil.getConnection();
            CallableStatement cs = conn.prepareCall("call select_count(?)");
            cs.registerOutParameter(1, Types.INTEGER); // 注册你要获得的结果,执行之后获得结果
            cs.execute();
            count = cs.getInt(1);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return count;
    }
    
时间: 2024-10-09 07:24:11

JDBC之存储过程的相关文章

Java数据库连接——JDBC调用存储过程,事务管理和高级应用

阅读目录 一.JDBC常用的API深入详解及存储过程的调用1.存储过程(Stored Procedure)的介绍2.JDBC调用无参存储过程3.JDBC调用含输入参数存储过程4.JDBC调用含输出参数存储过程二.JDBC的事务管理1.JDBC实现事务管理2.通过代码实现事物的管理三.数据库连接池(dbcp.c3p0)1.dbcp使用步骤2.c3p0使用步骤3.连接池总结四.JDBC的替代产品(Hibernate.Mybatis)1.Commons-dbutils 2.Hibernate简介3.M

Java数据库连接--JDBC调用存储过程,事务管理和高级应用

相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它.存储过程是数据库中 的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 一个存储过程是一个可编程的函数,它在数据

使用JDBC操作存储过程

  使用JDBC操作存储过程,可以借助于一个借口CallableStatement实现. 此时调用存储过程的sql语句为:{call procedure_name [(arg1),(arg2)]} 而CallableStatement可以通过数据库连接对象的prepareCall()方法获得 例如: conn.prepareCall(sql); 如果此时的存储过程有输出参数,可以通过他的registerOutParameter()方法将输出参数注册为JDBC类型.例如: registerOutP

JDBC调用存储过程的例子

下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员工信息表作为本次的例子: 如果你的Oracle里没有 emp默认的员工表,需要创建类似以下的 emp表. 在PL/SQL中需要写以下的调用存储过程的代码: 1 --在初次打开PL/SQL时要运行以下这行代码 2 set serveroutput on 3 4 5 --存储过程 6 CREATE OR

jdbc调用存储过程

JDBC调用存储过程 通用JDBC连接类(简版) package com.qy.dbUtil; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; imp

JDBC学习笔记(12):使用JDBC调用存储过程与批处理

存储过程:是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行.    存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快.同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量.简单网络负担. 创建存储过程: DELIMITER $$ DROP

使用JDBC调用存储过程

1 DELIMITER $$ 2 3 DROP PROCEDURE IF EXISTS `jdbc`.`addUser` $$ 4 CREATE PROCEDURE `jdbc`.`addUser` (in pname varchar(45),in birthday date,in money float,out pid int) 5 BEGIN 6 insert into user(name,birthday,money) value(pname,birthday,money); 7 sele

原生jdbc执行存储过程

1 //定时任务,结转 . 2 //表名 fys_sch_lvyou2 ,存储过程名:fys_sch_lvyou2_carrayover 3 //无参调用:{call insertLine} 4 //有参调用:{call fys_sch_lvyou2_carrayover(?,?) 然后传递参数即可 5 public void startCarrayOver(){ 6 //获取要结转的时间:当前月(2016年09月30日)的上月,2016年08月 7 Calendar c = Calendar.

jdbc调用存储过程和函数

1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ String sql = "{call get_rax(?,?)}"; Connection conn = JdbcUtil.getConnection(); CallableStatement cstmt = conn.prepareCall(sql); //为第一个?号设置值,从1开始 cst