博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java调用sqlserver存储过程
阅读量:4943 次
发布时间:2019-06-11

本文共 5533 字,大约阅读时间需要 18 分钟。

例子1:调用有返回值的存储过程

 

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class TestProc {  private static Connection connection = null; public static Connection getConnection(){  try {       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");       connection = DriverManager.getConnection             ("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");  } catch (ClassNotFoundException e) {   e.printStackTrace();  } catch (SQLException e) {   e.printStackTrace();  }  return connection; }  public static void main(String[] args) {    Connection connection = TestProc.getConnection();  try{   String poetName = "silas";   int id = 0;   // 设置调用的存储过程名及参数情况   CallableStatement proc = connection.prepareCall("{ call test_proc(?, ?) }");   // 设置输入参数值1的值   proc.setString(1, poetName);   // 设置输出参数及返回类型   proc.registerOutParameter(2,java.sql.Types.INTEGER);   proc.execute();   // 取出存储过程的返回值   id = proc.getInt(2);   System.out.println("人员ID为:"+id);   connection.close();  }catch (SQLException e){   e.printStackTrace();  }  //   以下为存储过程的定义//  create proc test_proc//    @username varchar(20),@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   }}当前以上存储过程中调用了users表,此处建表省略.

 

例子2:调用返回结果集的存储过程

 

import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;public class TestProcResultSet {  private static Connection connection = null; public static Connection getConnection(){  try {   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");   connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");  } catch (ClassNotFoundException e) {   e.printStackTrace();  } catch (SQLException e) {   e.printStackTrace();  }  return connection; }  public static void main(String[] args) {    Connection connection = TestProc.getConnection();  try{   ResultSet rs = null;   // 设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数   CallableStatement proc = connection.prepareCall("{ call test_proc_resultset(?)}");   // 设置输入参数   proc.setInt(1, 11);   // 调入存储过程   proc.execute();   // 取出存储过程的结果集   rs = proc.getResultSet();   for(int i=0;rs.next();i++)    System.out.println("Result的大小为:"+rs.getString(2));   connection.close();  }catch (SQLException e){   e.printStackTrace();  }  //  create proc test_proc_resultset//     @id int//  as     //     select * from users where userid=@id   }}

 

  例子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 Connection getConnection(){  try {   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");   connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");  } catch (ClassNotFoundException e) {   e.printStackTrace();  } catch (SQLException e) {   e.printStackTrace();  }  return connection; }  public static void main(String[] args) {    Connection connection = TestDefaultProc.getConnection();  try{   int id = 0;   // 设置调用的存储过程名及默认参数的情况   CallableStatement proc = 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 proc test_default_proc//    @username varchar(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 Connection getConnection(){  try {   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");   connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");  } catch (ClassNotFoundException e) {   e.printStackTrace();  } catch (SQLException e) {   e.printStackTrace();  }  return connection; }  public static void main(String[] args) {    Connection connection = TestProc.getConnection();  try{   ResultSet rs = null;   // 设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数   CallableStatement proc = connection.prepareCall("{ call test_proc_mulresultset(?)}");   // 设置输入参数   proc.setInt(1, 11);   // 调入存储过程   proc.execute();   // 取出存储过程的结果集   boolean hasResult = 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 proc test_proc_mulresultset//     @id int//     as     //     select * from users where userid=@id//     select * from users order by userid desc }}

  

  

 

 

 

  

 

转载于:https://www.cnblogs.com/zhangdp/archive/2012/12/28/2837734.html

你可能感兴趣的文章
信道容量及信道编码原理学习
查看>>
浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用...
查看>>
从随机过程的熵率和马尔科夫稳态过程引出的一些思考 - 人生逃不过一场马尔科夫稳态...
查看>>
《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数
查看>>
ORA-3136
查看>>
算法笔记_145:拓扑排序的应用(Java)
查看>>
JS获取农历日期
查看>>
PHP中的HTTP协议
查看>>
CSS给文字描边实现发光文字
查看>>
Java WebService入门实例
查看>>
css样式之补充
查看>>
结构与联合
查看>>
关于JS历史
查看>>
软件架构师工作流程
查看>>
将txt文本转换为excel格式
查看>>
BUPT复试专题—众数(2014)
查看>>
css-sprite切割图片(加快网页加载速度)
查看>>
20145316 《信息安全系统设计基础》第十四周学习总结
查看>>
Liferay7 BPM门户开发之18: 理解ServiceContext
查看>>
从零开始学区块链(3)
查看>>