因为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();
分享到:
相关推荐
本篇文章将详细探讨如何在C#中执行SQL Server的存储过程,并将结果集封装到一个`DataSet`对象中。 #### 一、基本概念 **存储过程(Stored Procedure)**:是一种预编译的SQL代码,可以被多次调用并在服务器上执行...
// 获取结果集,如果存储过程返回结果 ResultSet rs = cs.getResultSet(); while (rs.next()) { // 处理结果集 } } catch (SQLException e) { e.printStackTrace(); } finally { if (cs != null) { try { ...
同时,`sqljdbc4.jar`通常也包含了对更多SQL Server特性如存储过程、XML数据类型的支持。 使用这两个驱动程序时,开发者需要在Java代码中加载对应的驱动,然后创建一个数据库连接。例如: ```java Class.forName(...
总的来说,Java通过JDBC调用SQL Server存储过程涉及连接数据库、创建CallableStatement对象、设置参数、执行存储过程以及处理结果。了解这些步骤,将使你能够灵活地在Java应用程序中集成和利用SQL Server的存储过程...
在 SQL Server 中,存储过程是一个预编译的 SQL 语句集,可以对数据库中的数据进行操作。在本例中,创建了一个名为 `InsertUser` 的存储过程,该存储过程用于向 `BookUser` 表中插入新用户信息。 2. 存储过程的参数...
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDatabase", "myUsername", "myPassword"); ``` 其中,`localhost:1433`是SQL Server默认监听的IP和端口,`...
如果存储过程有多个结果集,可以使用`ResultSet.nextResult()`方法切换到下一个结果集。注意正确关闭`ResultSet`、`CallableStatement`和`Connection`以避免资源泄漏。 4. **异常处理**: 在实际应用中,务必处理...
### Java程序通过JDBC连接SQLServer2000数据库全解 #### 一、环境搭建与配置 在深入了解如何利用Java程序通过JDBC连接SQLServer2000之前,我们首先需要确保具备以下条件: 1. **安装SQL Server 2000**: 首先需要...
在使用SQL Server JDBC时,开发者需要配置JDBC URL,它包含了数据库的地址、端口、实例名等信息,例如:"jdbc:sqlserver://localhost:1433;databaseName=myDatabase"。此外,还需要提供数据库用户名和密码来建立连接...
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myDB"; Connection conn = DriverManager.getConnection(url, "username", "password"); ``` 4. 执行SQL:通过Connection对象创建...
6. **高级查询功能**:提供了对SQL Server特有的功能如存储过程、触发器、视图、XML类型等的支持,方便开发者进行复杂的数据操作。 7. **安全特性**:支持Windows集成认证、SQL Server身份验证以及SSL加密,确保...
微软已经推出了更新的版本,如SQL Server JDBC 8.x,它们支持更高的SQL Server版本,提供了更好的性能和更多的特性。因此,如果还在使用SQL Server 2000,可能需要考虑升级数据库或至少使用与之兼容的驱动版本,以...
4. **存储过程**:通过`CallableStatement`调用SQLServer的存储过程,如: ```java CallableStatement cstmt = conn.prepareCall("{call myProc(?, ?)}"); cstmt.setString(1, "param1"); cstmt....
SQL Server JDBC驱动2.0提供了多种特性,如支持批处理、事务管理、预编译语句(PreparedStatement)、结果集(ResultSet)、游标(Cursor)、元数据查询以及SQL Server特有的功能,如XML列类型和存储过程。...
标题中的"jdbc sqlserver2014"指的是Java Database Connectivity (JDBC) 驱动程序,用于连接Java应用程序和Microsoft SQL Server 2014数据库。SQL Server 2014是微软的一个关系型数据库管理系统,提供了高性能、可...
在这个JSP示例中,`sql:setDataSource`定义了数据源,`sql:query`标签用于调用存储过程并获取结果集。然后,使用JSTL的`forEach`循环遍历结果集并显示数据。 总结起来,SQL Server调用存储过程涉及到数据库层面的...
例如,它可能包含了处理TDS(Tabular Data Stream)协议的类,这是SQL Server用于网络通信的协议,以及处理特定SQL Server存储过程和其他特性的方法。 3. msutil.jar:这个文件可能包含了一些实用工具和辅助类,...
3. 创建数据库连接:`Connection conn = DriverManager.getConnection("jdbc:sqlserver://服务器地址:端口;databaseName=数据库名", "用户名", "密码");` 4. 执行SQL语句:创建Statement或PreparedStatement对象,...
这个驱动程序提供了与SQL Server交互所需的所有类和接口,如`com.microsoft.sqlserver.jdbc.SQLServerDriver`,它是实现JDBC `java.sql.Driver`接口的类,用于建立到SQL Server的连接。 2. **msbase.jar**: 这个...
String url = "jdbc:sqlserver://localhost:1433;databaseName=myDatabase"; String username = "myUsername"; String password = "myPassword"; try (Connection conn = DriverManager.getConnection(url, ...