jdbc 处理mysql procedure返回的多个结果集

1:测试数据库表user

mysql> desc user$$
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

2:存储过程,返回id>n_id 的与id<n_id的两个结果集

delimiter $$
create procedure p_get_user_list(in n_id int)
begin
    select id, name, age from user where id > n_id;
    select id, name, age from user where id < n_id;
end $$

3:JDBC操作

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package jdbctest;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author y
 */
public class Jdbctest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        funtest();
    }

    public static void funtest(){
        Connection conn = null;
        CallableStatement calState = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");

            calState = conn.prepareCall("{call p_get_user_list(?)}");
            calState.setInt(1, 3);

            boolean oprFlag = calState.execute();
            //使用外循环来控制结果集的个数,内循环控制每个结果集的记录
            while(oprFlag){
                rs = calState.getResultSet();
                System.out.println("=================");
                while(rs.next()){
                    System.out.println("id:"+rs.getInt("id")+"\t"+
                                "name:"+rs.getString("name")+"\t"+
                                "age:" +rs.getInt("age"));
                }
                oprFlag = calState.getMoreResults();
            }
        }catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Jdbctest.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            if(null !=rs ){
                try {
                    rs.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Jdbctest.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(null != calState){
                try {
                    calState.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Jdbctest.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if(null != conn){
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Jdbctest.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

    }

}

4:测试结果

run:
=================
id:4    name:test2    age:30
id:5    name:test3    age:24
=================
id:1    name:里斯    age:25
id:2    name:王五    age:26
成功构建 (总时间: 0 秒)

jdbc 处理mysql procedure返回的多个结果集

时间: 2024-10-16 07:00:31

jdbc 处理mysql procedure返回的多个结果集的相关文章

mysql procedure返回多数据集

返回多数据集写法:第一种 DROP PROCEDURE IF EXISTS `p_query_user` ; DELIMITER // CREATE PROCEDURE p_query_user( p_inout_user_id INT ) begin declare c varchar(100) default '0'; SELECT * FROM T_SD_USER WHERE USER_ID = p_inout_user_id ; SET p_inout_user_id =2222; en

MyEclipse通过JDBC连接MySQL数据库基本介绍

转载自:http://www.jb51.net/article/31876.htm 1.前提是MyEclipse已经能正常开发Java工程 2.安装MySQL 个人使用的是版本是 mysql-5.0.22-win32.zip 网址:http://www.mysql.com/downloads/mysql/#downloads 3.下载JDBC驱动 个人使用的是 mysql-connector-java-5.1.22.zip,所需要的就是解压缩之后其中的 mysql-connector-java-

JDBC链接Mysql数据库+执行sql

package com.wangbingan.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /**  * JDBC链接数据库  *   * @author Administrator  *   */ public class JdbcUtil { public static void main(Strin

通过JDBC连接Mysql之基础篇

1 JDBC基础知识 Q1 什么是JDBC技术 Java Database Connectivity :Java访问数据库的解决方案 Q2 JDBC如何实现访问数据库 JDBC定义了一套标准通用接口,由数据库厂商来实现这些接口连接数据库 Q3 JDBC有哪些标准通用接口 DriverManager 驱动管理 Connection/DatabaseMetaData 连接接口 Statement/PreparedStatement/CallableStatement 语句对象接口 ResultSet

JDBC连接MySQL数据库及演示样例

JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成.JDBC为数据库开发者提供了一个标准的API,据此能够构建更高级的工具和接口,使数据库开发者能够用纯 Java API 编写数据库应用程序,而且可跨平台执行,而且不受数据库供应商的限制.

JAVA使用JDBC连接MySQL数据库 二(2)

本文是对 <JAVA使用JDBC连接MySQL数据库 二>的改进. 上节使用的是PreparedStatement来执行数据库语句,但是preparedStatement需要传递一个sql语句参数,才能创建.然而,DBHelper类只是起到打开和关闭数据库的作用,所以sql语句是要放到应用层部分的,而不是放到DBHelper类中. 而statment不需要传递一个sql语句参数,就能创建. 修改部分如下: public class DBHelper { String driver = &quo

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能. 方案: 对于较大的数据量,通常采用分页查询的方式.不同的数据库产品有不同的数据库级的分页查询策略.例如:Oracle通常使用rownum的方式:而Mysql使用limit的方式. Oracle采用rownum和子查询实现分页查询,SQL语句如下, select * from (select rownum rn,empno,ename,jo

JDBC对MySQL数据库存储过程的调用

一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用户通过指定存储过程的名字并给出參数(假设该存储过程带有參数)来运行它. 2.与一般SQL语句相比.使用存储过程有哪些长处.有哪些缺点 长处: 1).降低了脚本的运行环节,缩短了获取数据的时间.存储过程仅仅在创建的时进行编译,在调用使用的时候直接运行.不需再次编译:而一般SQL语句每次运行前都须要编译

JDBC连接数据库(MySql)步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。

主要内容:  JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能. 把十一个功能都放在一起. 一.JDBC连接数据库(编辑)步骤(主要有六个步骤).  1.注册驱动: Class.formName("com.mysql.jdbc.Driver");  2.获取连接:(1) param1:  要连接数据库的url-----> String url="jdbc:mysql:/