Java调用存储过程

package com.unit.wjh;
import java.sql.ResultSetMetaData;
import java.sql.CallableStatement; 
import java.util.HashMap; 
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;
import java.sql.Types;   
  
public class test {  
  public test() {  
  }  
  public static void main(String[] args ){  
	String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";  
	String strUrl="jdbc:sqlserver://localhost:1433;DatabaseName=Leading";    
	//String userName="sa1";   
	//String userPwd="123456"; 
    Statement sm = null;  
    int rs = 0;  
    Connection conn = null;  
    try {  
      Class.forName(driver);  
      conn =  DriverManager.getConnection(strUrl, "sa1", "123456");  
      CallableStatement proc = null;  
      proc = conn.prepareCall("{ call proc_update_unit(?,?,?,?) }");  
      proc.setInt(1,12345);
      proc.setString(2, "米");
      proc.setString(3, "箱");
      proc.setInt(4,-1);
      //proc.registerOutParameter(1, Types.VARCHAR);  
     // proc.registerOutParameter(5, Types.VARCHAR);  
      /*  proc.execute();  
      String testPrint = proc.getString(1)+proc.getString(2);  
      System.out.println("存储过程返回的值是:"+testPrint);  */
      rs= proc.executeUpdate();
       //System.out.println();
      System.out.println(rs);
     
		//处理执行结果
//		if (rs!=null && rs.next()) {
//			ResultSetMetaData rsmd = rs.getMetaData();
//			HashMap<String, String> map = new HashMap<String,String>();
//			for (int i = 1; i <= rsmd.getColumnCount(); i++) {
//				map.put(rsmd.getColumnName(i),rs.getString(i));
//			}
//			System.out.println(map.toString());
//			//return true;
//		}
    }  
    catch (SQLException ex2) {  
      ex2.printStackTrace();  
    }  
    catch (Exception ex2) {  
      ex2.printStackTrace();  
    }  
  }  
}  

注意,以下使用数据库为sql2000,驱动jtds1.2.2 一、调用存储过程(无结果集返回) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); callableStatement.execute(); //获得sql的消息并输出,这个估计很多人都需要 SQLWarning sqlWarning = callableStatement.getWarnings(); while (sqlWarning != null) { System.out.println("sqlWarning.getErrorCode() = " + sqlWarning.getErrorCode()); System.out.println("sqlWarning.getSQLState() = " + sqlWarning.getSQLState()); System.out.println("sqlWarning.getMessage() = " + sqlWarning.getMessage()); sqlWarning = sqlWarning.getNextWarning(); } //close ConnectionHelper.closeConnection(callableStatement, connection); 二、调用存储过程,返回sql类型数据(非记录集) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); //重点是这句1 callableStatement.registerOutParameter(3, Types.INTEGER); callableStatement.execute(); //取返回结果,重点是这句2 //int rsCount = callableStatement.getInt(3); //close ConnectionHelper.closeConnection(callableStatement, connection); 三、重点来了,返回记录集,多记录集 注意,不需要注册返回结果参数,只需要在sql中select出结果即可 例如:select * from tableName 即可得到返回结果 Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?) }"); //此处参数与结果集返回没有关系 callableStatement.setString(1, "xxxxxxxx"); callableStatement.execute(); ResultSet resultSet = callableStatement.getResultSet(); //以上两个语句,可以使用ResultSet resultSet = callableStatement.executeQuery();替代 //多结果返回 ResultSet resultSet2; if (callableStatement.getMoreResults()) { resultSet2 = callableStatement.getResultSet(); while (resultSet2.next()) { } } //close ConnectionHelper.closeConnection(callableStatement, connection); 提示:多结果返回可以使用如下代码(以上主要让大家明白,单一结果和多结果的区别): Boolean hasMoreResult = true; while (hasMoreResult) { ResultSet resultSet = callableStatement.getResultSet(); while (resultSet.next()) { } hasMoreResult = callableStatement.getMoreResults(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值