JAVA调用sqlserver存储过程的实现(返回多个结果集的实现)
2014-08-20 12:13
721 查看
Sqlserver使用的为2008R2
1、存储过程
slqserver存储过程里面返回的结果集只需要在最后select,然后在java中获取即可,Oracle则需要另外处理。
2、java程序实现,首先导入对应的驱动包
①返回结果集为一个的情况
②返回结果集为多个的情况
着重看红色部分
1、存储过程
USE [YZC_BI] GO /****** Object: StoredProcedure [dbo].[CalYlfwColumnData] Script Date: 08/20/2014 09:24:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[CalYlfwColumnData] @xmbm varchar(max),@tjsp varchar(max),@startdate varchar(10),@enddate varchar(10) -- Add the parameters for the stored procedure here --<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0> AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; select * from table END
slqserver存储过程里面返回的结果集只需要在最后select,然后在java中获取即可,Oracle则需要另外处理。
2、java程序实现,首先导入对应的驱动包
①返回结果集为一个的情况
package me.hua.main.database; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class CallProcedure { String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=dbname"; Connection conn = null; CallableStatement cs = null;// PreparedStatement,Statement ResultSet rs; public void getConn() { try { Class.forName(driver); conn = DriverManager.getConnection(url, "sa", "sasa"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public void callProc() { try { cs = conn.prepareCall("{call CalYlfwColumnData(?,?,?,?)}"); cs.setString(1, "123"); cs.setString(2,"123"); cs.setString(3,"201301"); cs.setString(4,"201312"); ResultSet rs = cs.executeQuery(); while(rs != null && rs.next()){ System.out.println("ID:"+rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (cs != null) cs.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { CallProcedure dao = new CallProcedure(); dao.getConn(); dao.callProc(); } }
②返回结果集为多个的情况
着重看红色部分
/** * 返回结果为多个结果集的存储过程调用 * @param procName * @param param * @return 返回多个结果集 */ public ArrayList<List<ChartDateModel>> callProc(String procName,Map<String,String> param) { getConn(); ArrayList<List<ChartDateModel>> resultList = new ArrayList<List<ChartDateModel>>(); try { //拼接调用存储过程的sql String sql = "{call "; sql += procName; sql += "("; for(int i = 0; i < param.size();i++){ if(i != 0){ sql += ",?"; }else{ sql += "?"; } } sql += ")}"; cs = conn.prepareCall(sql); //设置参数 for(int i = 1; i <= param.size();i++){ cs.setString(i, param.get(i+"")); } boolean flag = cs.execute(); ResultSet result; if("CalYlfwColumnData".equals(procName)){ //医疗收费柱状图 int resultCount = 0; do{ <span style="color:#FF0000;">result = cs.getResultSet();</span> if(result != null){ if("1".equals(param.get("6"))){//初始化方法 if( resultCount == 0 || resultCount == 1){ List<ChartDateModel> dataList = new ArrayList<ChartDateModel>(); while(result.next()){ ChartDateModel chartDataModel = new ChartDateModel(); chartDataModel.setId(result.getString(1)); chartDataModel.setName(result.getString(2)); chartDataModel.setLineValue(result.getString(3));//调价后总收入 chartDataModel.setValue(result.getString(4));//调价前总收入 chartDataModel.setValue1(result.getString(5));//药品加成 dataList.add(chartDataModel); } resultList.add(dataList); }else if(resultCount == 2){ List<ChartDateModel> dataList = new ArrayList<ChartDateModel>(); while(result.next()){ ChartDateModel chartDataModel = new ChartDateModel(); chartDataModel.setXmbm(result.getString(1)); chartDataModel.setXmmc(result.getString(2)); chartDataModel.setJjdw(result.getString(3));// chartDataModel.setSfjg(result.getString(4)==null?0f:Float.parseFloat(result.getString(4)));// chartDataModel.setYwl(result.getString(5)==null?0f:Float.parseFloat(result.getString(5)));// chartDataModel.setTjsp(result.getString(6)==null?0f:Float.parseFloat(result.getString(6))); chartDataModel.setTjzs(result.getString(7)==null?0f:Float.parseFloat(result.getString(7))); chartDataModel.setXmlb(result.getString(8)); dataList.add(chartDataModel); } resultList.add(dataList); } }else if("2".equals(param.get("6"))){ if( resultCount == 0){ List<ChartDateModel> dataList = new ArrayList<ChartDateModel>(); while(result.next()){ ChartDateModel chartDataModel = new ChartDateModel(); chartDataModel.setXmbm(result.getString(1)); chartDataModel.setXmmc(result.getString(2)); chartDataModel.setJjdw(result.getString(3));// chartDataModel.setSfjg(result.getString(4)==null?0f:Float.parseFloat(result.getString(4)));// chartDataModel.setYwl(result.getString(5)==null?0f:Float.parseFloat(result.getString(5)));// chartDataModel.setTjsp(result.getString(6)==null?0f:Float.parseFloat(result.getString(6))); chartDataModel.setTjzs(result.getString(7)==null?0f:Float.parseFloat(result.getString(7))); chartDataModel.setXmlb(result.getString(8)); dataList.add(chartDataModel); } resultList.add(dataList); } } resultCount++; } <span style="color:#FF0000;">cs.getMoreResults(); continue;</span> }while(result != null); System.out.println("count:"+resultCount); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (cs != null) cs.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return resultList; }
相关文章推荐
- SQLServer和ORACLE 存储过程的调用(返回结果集)
- Java调用SqlServer中的存储过程出现结果集为空的情况
- Java调用存储过程返回多个结果集
- java调用存储过程同时获取[返回参数]和[结果集]
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- Java调用SQL Server存储过程同时返回参数和结果集
- Oracle 存储过程调用 返回结果集 实现分页
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- Java调用SQL Server存储过程同时返回参数和结果集
- Java调用存储过程二(返回一行或多行结果集)
- MySQL 存储过程调用 返回结果集 实现分页
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- java调用存储过程无法取得返回参数
- Java 调用 Oracle 存储过程返回结果集
- java 调用oracle的存储过程返回记录集
- 理解JBDC更新计数行以及调用存储过程返回多个结果集
- 调用存储过程,java中通过bboss persistent实现数据库存储过程的调用(位置变量绑定)
- 调用带参数的存储过程,并返回结果集--oracle