Java中五中常用的调用存储过程方法

本文详细解析了如何使用Java与SQL Server数据库进行交互,通过调用存储过程来实现特定业务逻辑,并着重介绍了如何处理存储过程返回的单个结果集与多个结果集的情况。包括了对存储过程定义、参数设置、执行流程、结果集获取等关键步骤的解释,旨在为开发者提供一种高效的数据操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  例子3:调用有默认值的存储过程

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.SQLException;

  public class TestDefaultProc {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestDefaultProc.getConnection();

  try{

  int id =0;

  //设置调用的存储过程名及默认参数的情况

  CallableStatementproc = connection.prepareCall("{ call test_default_proc(default, ?)}");

  //设置输出参数及返回类型

  proc.registerOutParameter(1,java.sql.Types.INTEGER);

  proc.execute();

  //取出存储过程的返回值

  id =proc.getInt(1);

  System.out.println("人员ID为:"+id);

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  复制代码

  // 以下为存储过程的定义

  // create proctest_default_proc

  // @usernamevarchar(20)='silas',@pid int output

  // as

  // declare@uid int

  // set @uid =0

  // select@uid=userid from users where username=@username

  // if@uid<>0

  // set @pid = @uid

  // else

  // set @pid = 0

  }

  复制代码

  例子4:调用返回两个以上结果集的存储过程(重点)

  import java.sql.CallableStatement;

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  public class TestProcMulResultSet {

  private static Connection connection = null;

  public static ConnectiongetConnection(){

  try {

  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

  connection =DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");

  } catch (ClassNotFoundExceptione) {

  e.printStackTrace();

  } catch (SQLException e){

  e.printStackTrace();

  }

  return connection;

  }

  public static void main(String[] args) {

  Connection connection =TestProc.getConnection();

  try{

  ResultSet rs= null;

  //设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数

  CallableStatementproc = connection.prepareCall("{ calltest_proc_mulresultset(?)}");

  //设置输入参数

  proc.setInt(1,11);

  //调入存储过程

  proc.execute();

  //取出存储过程的结果集

  booleanhasResult = true;

  while (hasResult) {

  rs = proc.getResultSet();

  while(rs.next()) {

  System.out.println("第一条记录第二个字段值为:"+rs.getString(2));

  break;

  }

  hasResult = proc.getMoreResults();

  }

  connection.close();

  }catch (SQLException e){

  e.printStackTrace();

  }

  复制代码

  // create proctest_proc_mulresultset

  // @id int

  // as

  // select * from users where userid=@id

  // select * from users order by userid desc

  }

  }

  复制代码

  以上四个例子仅做参考.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值