java 调用MSSQL的存储过程

java调用存储过程

语句写法:

   {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
   {call <procedure-name>[(<arg1>,<arg2>, ...)]}

一。获取存储过程的返回值

存储过程
create procedure GetComputer
as
    select * from t_computer
    if @@error <> 0 return @@error
    return 0

java代码

	/**
	 * 得到存储过程返回的结果集
	 */
	@Test
	public void getProcedureResultSet(){
		Connection conn = null;
		CallableStatement cs = null;
		ResultSet rs = null;
		try {
			conn= DBUtils.getConn();
			cs = conn.prepareCall("{call GetComputer}");
			rs = cs.executeQuery();
			while (rs.next()) {
				System.out.println("分机号:" + rs.getString("extention"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.free(rs, cs, conn);
		}
	}
二,得到存储过程的多个返回值

存储过程

create procedure [dbo].[GetComputerAndAccount]
as
 select * from t_computer
 select * from tx_account

java代码

	/**
	 * 得到存储过程返回的多结果集
	 */
	@Test
	public void getProcedureMoreResultSet(){
		Connection conn = null;
		CallableStatement cs = null;
		ResultSet rs = null;
		try {
			conn= DBUtils.getConn();
			cs = conn.prepareCall("{call GetComputerAndAccount}");
			rs = cs.executeQuery();
			while (rs.next()) {
				System.out.println("分机号:" + rs.getString("extention"));
			}
			if (cs.getMoreResults()) {
				rs = cs.getResultSet();
				while (rs.next()) {
					System.out.println("帐号:" + rs.getString("account_name"));
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.free(rs, cs, conn);
		}
	}

三,得到存储过程的output参数

存储过程

create procedure [dbo].[GetComputerCount]
    @computer varchar(16),
    @count int output
as
 select @count=count(*) from t_computer where computer=@computer

java代码

	/**
	 * 得到存储过程的output参数的值
	 */
	@Test
	public void getProcedureOutputValue(){
		Connection conn = null;
		CallableStatement cs = null;
		ResultSet rs = null;
		try {
			conn= DBUtils.getConn();
			cs = conn.prepareCall("{call GetComputerCount(?,?)}");
			cs.setString(1, "127.0.0.1");
			cs.registerOutParameter(2, Types.INTEGER);
			cs.execute();
			System.out.println(cs.getInt(2));
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.free(rs, cs, conn);
		}
	}

四,得到存储过程的返回值

存储过程

create procedure [dbo].[IsExistComputer]
 @extension varchar(16)
as
 select computer from t_computer where extention=@extension
 if @@rowcount > 0 
   return 1
 else
   return 0
java代码

	/**
	 * 得到存储过程的返回值
	 */
	@Test
	public void getProcedureReturnValue(){
		Connection conn = null;
		CallableStatement cs = null;
		ResultSet rs = null;
		try {
			conn= DBUtils.getConn();
			cs = conn.prepareCall("{? = call IsExistComputer(?)}");
			cs.registerOutParameter(1, Types.INTEGER);
			cs.setString(2, "3001");
			cs.execute();
			System.out.println(cs.getInt(1));
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.free(rs, cs, conn);
		}
	}

五。得到存储过程的数据集和output参数

存储过程

create procedure [dbo].[GetComputer2]
	@computer varchar(16),
    @count int output
as
 select @count=count(*) from t_computer where computer=@computer
 select * from t_computer where computer=@computer
java代码

	/**
	 * 得到存储过程返回的结果集和output参数
	 * 注:同时存在结果集与output值或者Result值,应该先获取结果集,
	 *     对结果集操作后在去获取其它值,不然结果集会关闭
	 */
	@Test
	public void getProcedureResultSetAndOutputValue(){
		Connection conn = null;
		CallableStatement cs = null;
		ResultSet rs = null;
		try {
			conn= DBUtils.getConn();
			cs = conn.prepareCall("{call GetComputer2(?,?)}");
			cs.setString(1, "127.0.0.1");
			cs.registerOutParameter(2, Types.INTEGER);
			//cs.execute();
			rs = cs.executeQuery();
			//先获取output参数值,后取结果集的话,则得不到结果集
			//com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭。
			//System.out.println(cs.getInt(2));
			//rs = cs.getResultSet(); 
			if (rs != null){
				while (rs.next()) {
					System.out.println(rs.getString("extention"));
				}
			}
			System.out.println(cs.getInt(2));
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtils.free(rs, cs, conn);
		}
	}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用MySQL存储过程返回结果集的方法如下: 1. 首先,需要使用Java的JDBC连接到MySQL数据库。 2. 定义一个CallableStatement对象来调用存储过程。CallableStatement是一个预编译的SQL语句对象,可以用来调用存储过程。 3. 在CallableStatement对象中设置存储过程的参数。存储过程的参数包括输入参数和输出参数。可以使用set方法设置输入参数的值。 4. 使用execute方法执行CallableStatement对象,并获取结果集。 5. 使用ResultSet对象来处理返回的结果集。可以使用next方法遍历结果集中的每一行记录,并使用get方法获取字段的值。 下面是一个示例代码,演示了如何使用Java调用MySQL存储过程并返回结果集: ```java // 连接到MySQL数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 定义存储过程调用语句 String sql = "{CALL proce_information(?,?)}"; // 准备CallableStatement对象 CallableStatement cstmt = conn.prepareCall(sql); // 设置输入参数 cstmt.setInt(1, 1); // 注册输出参数 cstmt.registerOutParameter(2, Types.INTEGER); // 执行存储过程 cstmt.execute(); // 获取返回的结果集 ResultSet rs = cstmt.getResultSet(); // 处理结果集 while (rs.next()) { // 获取字段的值 int id = rs.getInt("id"); String name = rs.getString("name"); // 处理结果... } // 关闭连接和资源 rs.close(); cstmt.close(); conn.close(); ``` 以上是一个简单的示例代码,用于演示如何使用Java调用MySQL存储过程并返回结果集。具体的调用方式和参数设置可能会根据存储过程的定义而有所不同,请根据实际情况进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值