前面讲了JDBC执行存储过程,返回简单值的案列,这篇文章我们来讲解下如何通过JDBC返回结果集ResultSet的案例。
操作数据库:mysql
操作目的:通过JDBC执行存储过程,返回ResultSet结果集。
mysql返回结果集还是很简单的,而 oracle 则需要使用游标来返回结果集了。
存储过程sp_getDetail的代码如下,还是通过mysql客户端直接创建吧,就不通过JDBC创建该存储过程了,如果还是需要通过JDBC创建存储过程,可以看之前的这篇文章:JDBC创建存储过程。
create procedure sp_getDetail(in sp_id INT) begin SELECT * FROM t_user where id>sp_id; end
执行完以上创建存储过程的代码后,可以在客户端看到如下信息:
[SQL]create procedure sp_getDetail(in sp_id INT) begin SELECT * FROM t_user where id>sp_id; end 受影响的行: 0 时间: 0.000s
在执行JDBC调用存储过程之前,我们来看下当前的数据库结构情况,如下图所示:
为了方便查看演示结果,我认为的插入了3条数据,下面我们来执行JDBC执行存储过程并返回结果集的核心代码,代码如下:
String jdbcURL = "jdbc:mysql://localhost:3306/codingwhy?useUnicode=true&characterEncoding=utf-8"; String jdbcUser = "root"; String jdbcPassword = "root"; Class.forName("com.mysql.jdbc.Driver",2); Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword,2); //JDBC执行存储过程并返回结果集ResultSet String callProcedureSql="{call sp_getDetail(?)}"; CallableStatement callableStatement = conn.prepareCall(callProcedureSql,2); callableStatement.setInt(1, 0,2); callableStatement.executeQuery(,2); ResultSet resultSet = callableStatement.getResultSet(,2); while (resultSet.next()) { System.out.println("id:"+resultSet.getInt("id")+"\tname:"+resultSet.getString("name"),2); } System.out.println("JDBC调用存储过程成功...",2);
在eclipse的console视图下看到了如下结果
id:1 name:codingwhy_1 id:2 name:codingwhy_2 id:3 name:codingwhy_3 JDBC调用存储过程成功...
这样我们就完成了JDBC执行存储过程并返回结果集的案例演示了,mysql下返回结果集是不是很简单?