`

(转)java中如何最简单的调用存储过程

阅读更多

 

例子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
 }

}

 

以上四个例子仅做参考.

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    JAVA面试题最全集

    给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和...

    java开源包8

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    mybatis-base增删改查分页批量操作简单动态sql调用存储过程.zip

    标签是Mabits动态SQL中最常用的一个标签之一,它的作用是根据给定条件包含或排除不同的部分,以生成不同的SQL语句。在XML文件中,标签通常被嵌套在其他标签内,如、和等标签内,用于控制生成的SQL语句的结构和内容。...

    java开源包11

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包6

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包9

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包4

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包101

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包5

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包10

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包3

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

Global site tag (gtag.js) - Google Analytics