`
zhuyx808
  • 浏览: 120500 次
  • 性别: Icon_minigender_1
  • 来自: 快来看~天上米有灰机
社区版块
存档分类
最新评论

JDBC取sqlserver存储过程多结果集的解决方法

阅读更多
因为sqlserver2k的官方驱动问题,一直以来用jdbc没有很好的办法取多结果集,公司系统里采用的是2种方式来搞,一种是增删查改用jdbc方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果集的问题进行研究。

原来在odbc中取结果集的方式是
Connection DBConn = null;
		Statement stmt = null;
		ResultSet RS = null;
		DataBase db = new DataBase();
		String temp = "";
		StringBuffer sb = new StringBuffer();
		
			DBConn = db.connect(Database);
			try
		                {
			stmt = DBConn.createStatement();
			stmt.execute(SQL);
			RS = stmt.getResultSet();
			while (RS == null && stmt.getMoreResults()) {
				RS = stmt.getResultSet();
			}
			int c;
			
			sb.append("<?xml version=\"1.0\" encoding=\"" + this.encoding + "\"?>");
			sb.append("<root>");
			while (true) {
				if (RS != null) {
					while (RS.next()) {
						InputStream is = RS.getBinaryStream(1);
						InputStreamReader isr = new InputStreamReader(is,"UnicodeLittle");
						while ((c = isr.read()) != -1) {
							sb.append((char) c);
						}
												
							
																}
				}
				if (stmt.getMoreResults()) {
					RS.close();
					RS = stmt.getResultSet();
				} else {
					break;
				}
			}
			sb.append("</root>");
					}
		catch(Exception e)
		{
			return e.getMessage();
	 
		}
		finally
		{
			db.close(RS, stmt, DBConn);
			
		}
		return sb.toString();
	

上面是由存储过程生成xml文件用odbc读取并转化为字符串,现在使用了jdbc方式,取结果集的代码如下:
	Connection DBConn = null;
		CallableStatement stmt = null;
		ResultSet RS = null;
		DataBase db = new DataBase();
		String temp = "";
		StringBuffer sb = new StringBuffer();
		DBConn = db.connectjdbc(Database);
		try
		{
			stmt=DBConn.prepareCall(SQL, ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
			stmt.executeQuery();
			int updateCount=-1;
			sb.append("<?xml version=\"1.0\" encoding=\"" + this.encoding+ "\"?>");
			sb.append("<root>");
			  do{ 
		            updateCount = stmt.getUpdateCount(); 
		            if(updateCount != -1){//说明当前行是一个更新计数 
//		            处理. 
		            	stmt.getMoreResults(); 
		            	continue;//已经是更新计数了,处理完成后应该移动到下一行 
//		            不再判断是否是ResultSet 
		            } else {
		            		while (true)
				            {
				            	RS = stmt.getResultSet(); 
								if (RS != null) {
										ResultSetMetaData rsmd = RS.getMetaData();  //获取字段名
										int numberOfColumns = rsmd.getColumnCount(); //获取字段数
										int i=0;
										while(RS.next()){ //将查询结果取出                        
											 for (i=1; i<=numberOfColumns;i++){   
										    	String date=RS.getString(i); 
										    	sb.append(date);
											 	}   
										 }
										RS.close();
								}
								if (stmt.getMoreResults()) 
								{
									RS = stmt.getResultSet();
								}
								else {
									break;
								}
							}
		            	}
		         }while(!(updateCount == -1 && RS == null)); 
			  
			  
			  
		}
		catch(Exception e)
		{
			return e.getMessage();
		}
		finally
		{
			db.close(RS, stmt, DBConn);
		}
		sb.append("</root>");
		
		return sb.toString();
分享到:
评论
1 楼 huter111 2008-11-18  

相关推荐

    执行Sqlserver存储过程返回DataSet

    执行Sqlserver存储过程返回DataSet

    JAVA JDBC连接 SQLServer2012 Maven项目

    eclipse使用jdbc方式连接sql server 2012数据库 调用存储过程

    SQL Server存储过程示例

    SQL Server存储过程示例,在存储工程中Transaction使用示例,游标的使用示例,自定义异常的使用示例,以及Java调用SQL Server存储过程的示例代码。包括JDBC和Spring两种调用方式。

    用JDBC访问存储过程

    使用jdbc访问SqlServer数据库的存储过程

    Java调用SQL Server的存储过程详解

     使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示: {call procedure-name}  作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中...

    SQL Server存储过程同时返回分页结果集和总数

    按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。  我对于这样一个业务存储过程总结如下:1、内核层,通常也就是要查询的字段或者要计算...

    SQLServer数据脚本转为达梦数据脚本.doc

    此文档主要是将SQLServer数据脚本转为达梦数据库数据脚本,截图为主,有需要的可以参考!

    Microsoft JDBC Driver for SQL Server.zip

    它是数据的集合,可以包含多个表、视图、索引、存储过程等。 表(Table): 表是 SQL Server 中最常见的数据存储结构。它由一系列有序的行和列组成,用于存储数据。每个表有一个名称,并且由一个或多个列组成。 列...

    jdbc调用存储过程,函数,游标

    NULL 博文链接:https://sxpujs.iteye.com/blog/376972

    jdbc callStatement

    jdbc callStatement sql server 存储过程 愿与大家共享

    SQL Server的通用分页存储过程 未使用游标,速度更快!

    为了解决这种大数据量请求的问题,就不得不使用分页模式了 在这方面,JDBC就强悍得多,它可以将指定的行数和SQL请求一并发送给SQL Server,这样只返回分页后的数据,JDBC的原理还不清楚,但在实际使用中,速度还是...

    SQLServer连接jar包.zip

    jdbc for SQL Server,sqljdbc4.jar,测试可用。 JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。 执行流程: 连接数据源,如:数据库。 为数据库传递查询和更新指令。 处理数据库...

    ms-sqlserver-jdbc-tester:应用程序使用9.2.0 SQL Server JDBC驱动程序测试与MS SQL Server的JDBC连接

    ms-sqlserver-jdbc-tester 一个简单的Spring Boot命令行应用程序,用于测试JDBC与SQL Server数据库的连接。怎么跑从页面下载JAR,或者从该存储库中签出代码并运行: mvn clean package执行JAR文件。 下面的例子: ...

    sqlserver分布式事务攻略

    在SQL_SERVER中使用分布式事务全攻略(图解)

    JDBC 3.0数据库开发与设计

    4.2.5 SQL Server存储过程编程经验技巧 4.3 成批更新(BatchedUpdate) 4.3.1 成批更新所使用的对象 4.3.2 使用成批更新的实例 4.4 行集合对象 4.4.1 设计时行集合 4.4.2 运行时行集合 4.4.3 非标准JDBC API...

    jsp+sqlserver 2000投票问卷管理系统

    2)数据库连接方式是使用JDBC For SQL Server驱动。 用户使用时要修改opendata.jsp文件,修改SQL Server登陆用户名和密码。 3)目前的数据库连接、访问、修改都是通过页面完成,效率不是太高,在新版本中将使用...

    JDBC连接数据库实例+附源码

    目的:使用JDBC连接MySQL数据库并且完成增删改查。 介绍:1)一种执行SQL语言的Java API。... 5)jdbc可以直接调用数据库存储过程。  6)jdbc操作数据库的效率很高。  7)学会了jdbc,什么数据库存取数据都会了。

    DBHelper (附源码) 数据库连接通用接口-java版

    只需2个方法,getData、updateData你就可以完成查询和更新数据库数据,通过重载形式定义,支持普通SQL语句和存储过程。 目前DBHelper暂只支持连接主流的MySQL、Oracle、SQL Server。使用DBHelper将为你带来巨大便利...

    jtds-1.2.jar和jdbc.jar

    jdbc MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而...用于远程连接 sql server 执行sql语句,调取存储过程等

    Mycat-server-1.6-RELEASE源码

    支持mysql和oracle存储过程,out参数、多结果集返回(1.6) 支持zookeeper协调主从切换、zk序列、配置zk化(1.6) 支持库内分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)...

Global site tag (gtag.js) - Google Analytics