编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

JDBC操作存储过程:JDBC执行存储过程有IN参数,有OUT参数,并返回简单值

    前面我们讲了JDBC执行存储过程只有IN参数,没有OUT参数。这篇文章我们来讲下有IN参数,有OUT参数,并返回简单值的情况

    操作数据库:mysql

    操作目的:建立一个名为sp_insertDetail的存储过程,该存储过程目的是在t_user中插入一条数据,并返回成功插入数据后,目前数据库里一共有几条数据。

    sp_insertDetail存储过程的代码如下,还是通过mysql客户端直接创建吧,就不通过JDBC创建该存储过程了,如果还是需要通过JDBC创建存储过程,可以看之前的这篇文章:JDBC创建存储过程

create procedure sp_insertDetail(in sp_name VARCHAR(20),out sp_count INT)
begin  
INSERT into t_user(name) values(sp_name,2);
SELECT COUNT(*) INTO sp_count FROM t_user;
end

在mysql客户端中执行以上代码,可以看到以下输出结果

[SQL]create procedure sp_insertDetail(in sp_name VARCHAR(20),out sp_count INT)
begin  
  INSERT into t_user(name) values(sp_name,2);
	SELECT COUNT(*) INTO sp_count FROM t_user;
end

受影响的行: 0
时间: 0.003s

在通过JDBC创建存储过程之前,我们来看下当前的数据库结构

未调用存储过程前的数据库结构

    可以看到存储过程sp_insertDetail已经创建成功了,并且在t_user表中有2条数据,可以预见到,通过JDBC执行存储过程后,应该返回3这个简单的整型值。

    下面我们执行下JDBC执行存储过程的代码,核心代码如下:

String jdbcURL = "jdbc:mysql://localhost:3306/codingwhy?useUnicode=true&characterEncoding=utf-8";
String jdbcUser = "root";
String jdbcPassword = "";
Class.forName("com.mysql.jdbc.Driver",2);
Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword,2);
//JDBC调用存储过程 只有输入IN参数,没有输出OUT参数
String callProcedureSql="{call sp_insertDetail(?,?)}";
CallableStatement callableStatement = conn.prepareCall(callProcedureSql,2);
callableStatement.setString(1, "codingwhy_new",2);
callableStatement.registerOutParameter(2, java.sql.Types.INTEGER,2);
callableStatement.executeQuery(,2);
int sp_count = callableStatement.getInt("sp_count",2);
System.out.println("JDBC执行存储过程成功,目前数据库中共有"+sp_count+"条数据...",2);

执行以上存储过程后,我们再看下当前的数据库结构,如下图所示:

执行成功存储过程后的数据库结构

    可以看到,已经成功插入了记录

    在eclipse的console视图下看到了如下结果

JDBC执行存储过程成功,目前数据库中共有3条数据...

    这样我们就完成了有IN参数,有OUT参数,并返回简单值存储过程的执行

未经允许不得转载: 技术文章 » Java编程 » JDBC操作存储过程:JDBC执行存储过程有IN参数,有OUT参数,并返回简单值