`
zhuyx808
  • 浏览: 123432 次
  • 性别: 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

    本篇文章将详细探讨如何在C#中执行SQL Server的存储过程,并将结果集封装到一个`DataSet`对象中。 #### 一、基本概念 **存储过程(Stored Procedure)**:是一种预编译的SQL代码,可以被多次调用并在服务器上执行...

    JAVA JDBC连接 SQLServer2012 Maven项目

    // 获取结果集,如果存储过程返回结果 ResultSet rs = cs.getResultSet(); while (rs.next()) { // 处理结果集 } } catch (SQLException e) { e.printStackTrace(); } finally { if (cs != null) { try { ...

    sqlserver2000-jdbc2.0驱动

    同时,`sqljdbc4.jar`通常也包含了对更多SQL Server特性如存储过程、XML数据类型的支持。 使用这两个驱动程序时,开发者需要在Java代码中加载对应的驱动,然后创建一个数据库连接。例如: ```java Class.forName(...

    Java中调用SQL Server存储过程

    总的来说,Java通过JDBC调用SQL Server存储过程涉及连接数据库、创建CallableStatement对象、设置参数、执行存储过程以及处理结果。了解这些步骤,将使你能够灵活地在Java应用程序中集成和利用SQL Server的存储过程...

    java调用sqlserver存储过程.pdf

    在 SQL Server 中,存储过程是一个预编译的 SQL 语句集,可以对数据库中的数据进行操作。在本例中,创建了一个名为 `InsertUser` 的存储过程,该存储过程用于向 `BookUser` 表中插入新用户信息。 2. 存储过程的参数...

    JDBC连接SQL Server 2008 R2的驱动

    Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDatabase", "myUsername", "myPassword"); ``` 其中,`localhost:1433`是SQL Server默认监听的IP和端口,`...

    jsp如何调用sqlserver存储过程

    如果存储过程有多个结果集,可以使用`ResultSet.nextResult()`方法切换到下一个结果集。注意正确关闭`ResultSet`、`CallableStatement`和`Connection`以避免资源泄漏。 4. **异常处理**: 在实际应用中,务必处理...

    Java程序通过JDBC连接SQLServer2000数据库全解.doc

    ### Java程序通过JDBC连接SQLServer2000数据库全解 #### 一、环境搭建与配置 在深入了解如何利用Java程序通过JDBC连接SQLServer2000之前,我们首先需要确保具备以下条件: 1. **安装SQL Server 2000**: 首先需要...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    在使用SQL Server JDBC时,开发者需要配置JDBC URL,它包含了数据库的地址、端口、实例名等信息,例如:"jdbc:sqlserver://localhost:1433;databaseName=myDatabase"。此外,还需要提供数据库用户名和密码来建立连接...

    最新jdbc for sql server 2000

    String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myDB"; Connection conn = DriverManager.getConnection(url, "username", "password"); ``` 4. 执行SQL:通过Connection对象创建...

    SQL Server JDBC Jar包

    6. **高级查询功能**:提供了对SQL Server特有的功能如存储过程、触发器、视图、XML类型等的支持,方便开发者进行复杂的数据操作。 7. **安全特性**:支持Windows集成认证、SQL Server身份验证以及SSL加密,确保...

    SQL Server Driver for JDBC (JDBC 连接SQL Server 2000 )

    微软已经推出了更新的版本,如SQL Server JDBC 8.x,它们支持更高的SQL Server版本,提供了更好的性能和更多的特性。因此,如果还在使用SQL Server 2000,可能需要考虑升级数据库或至少使用与之兼容的驱动版本,以...

    jdbc for sqlserver

    4. **存储过程**:通过`CallableStatement`调用SQLServer的存储过程,如: ```java CallableStatement cstmt = conn.prepareCall("{call myProc(?, ?)}"); cstmt.setString(1, "param1"); cstmt....

    MS SQL Server JDBC驱动2.0版,sqljdbc_2.0

    SQL Server JDBC驱动2.0提供了多种特性,如支持批处理、事务管理、预编译语句(PreparedStatement)、结果集(ResultSet)、游标(Cursor)、元数据查询以及SQL Server特有的功能,如XML列类型和存储过程。...

    jdbc sqlserver2014

    标题中的"jdbc sqlserver2014"指的是Java Database Connectivity (JDBC) 驱动程序,用于连接Java应用程序和Microsoft SQL Server 2014数据库。SQL Server 2014是微软的一个关系型数据库管理系统,提供了高性能、可...

    sql server调用存储过程

    在这个JSP示例中,`sql:setDataSource`定义了数据源,`sql:query`标签用于调用存储过程并获取结果集。然后,使用JSTL的`forEach`循环遍历结果集并显示数据。 总结起来,SQL Server调用存储过程涉及到数据库层面的...

    jdbc sql server 2000驱动包

    例如,它可能包含了处理TDS(Tabular Data Stream)协议的类,这是SQL Server用于网络通信的协议,以及处理特定SQL Server存储过程和其他特性的方法。 3. msutil.jar:这个文件可能包含了一些实用工具和辅助类,...

    SQL Server JDBC驱动jar包

    3. 创建数据库连接:`Connection conn = DriverManager.getConnection("jdbc:sqlserver://服务器地址:端口;databaseName=数据库名", "用户名", "密码");` 4. 执行SQL语句:创建Statement或PreparedStatement对象,...

    JDBC连接SQL Server时使用的jar包

    这个驱动程序提供了与SQL Server交互所需的所有类和接口,如`com.microsoft.sqlserver.jdbc.SQLServerDriver`,它是实现JDBC `java.sql.Driver`接口的类,用于建立到SQL Server的连接。 2. **msbase.jar**: 这个...

    SQL Server 2000 JDBC驱动的三个Jar包

    String url = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase"; String username = "myUsername"; String password = "myPassword"; try (Connection conn = DriverManager.getConnection(url, ...

Global site tag (gtag.js) - Google Analytics