精华内容
下载资源
问答
  • com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭

    万次阅读 多人点赞 2013-03-14 20:09:06
    com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭 提示错误: com.microsoft.sqlserver.jdbc.SQLServerException:结果集已关闭 错误引起原因: ResultSet内嵌套使用ResultSet引起的 ...

    com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭

    提示错误:

    com.microsoft.sqlserver.jdbc.SQLServerException:结果集已关闭

    错误引起原因:

    ResultSet内嵌套使用ResultSet引起的

    问题的引起:

    我做了一个简单的demo:

         Connection conn = null;

         Statement stat = null;

         ResultSet rs = null;

         ResultSet rs_2 = null;

    try {

        conn = DbPool.getConnection();

        stat = conn.createStatement();

        rs = stat.executeQuery(sql);

        while (rs.next()) {

        …………….省略。。。。

            rs_2= stat.executeQuery(sql_test);

                  while(rs.next()){

               ……..省略

    }

    }

    错误就这样引起了。

    可以很直接的看出:首先我用Statement对象产生了一个ResultSet对象rs,遍历此对象,取出一个值作为条件拼装了另一个SQL,然后又用同一个Statement对象产生了第二个ResultSet对象rs_2,错误就此产生了-------外层的rs只执行了一次,循环倒第二个值时就提示错误:结果集已经关闭!

    错误原因:

    在java里每个ResultSet结果集都需要一个单独的statement来支撑,如果想使用多个Result就必须使用创建多个statement。

    解决办法:

    1.创建2个Statement对象,嵌套的内外层各用一个;

    2.不要采用ResultSet的嵌套-----首先遍历外层Resulet,把结果集放入一个List,然后遍历这个List,在这个List中在使用Statement对象重新产生了ResultSet对象

    延伸理解:

    执行了Statement的任何一个方法,比如execute(),executeUpdate(),executeQuery()等方法,这时候它的返回值就和这个Statement绑定了,如果要使用此返回值,在使用期间就不能再利用这个Statement做其他事情了,因为它是独占的,一旦在此期间被使用,则返回值自动会被清空(对于execute(),executeUpdate()的返回值就无所谓了,因为她们返回的都是一个boolean或int类型的值,不是一个List,没有遍历的必要)。。。

    所有,当遇到我们通过一个Statement的executeQuery()得到一个ResultSet对象时候,如果在遍历这个ResultSet期间想再次使用Statement执行另一个SQL,其一是另一个SQL用Statement2(新产生的Statement对象)执行,其二是把ResultSet对象里面的值放到一个集合中,然后遍历集合,此时因为ResultSet是没用的,所有Statement可以使用;------但是我们可以看出,第二种做法有自身的局限性,因为一旦这个ResultSet对象非常大,把它放入一个集合显然是不明智的。。。。

    展开全文
  • -- 首先检查 --执行SQL select * ...-- 然后 ,遍历结果集  ResultSet res=state.executeQuery("select * from student"); while((res.next()) ////判断是否有记录 {  String textField1=res.getS
    -- 首先检查 --执行SQL select * from student 是否有结果
    -- 其次,加一个 判断:
    -- 然后 ,遍历结果集 
    ResultSet res=state.executeQuery("select * from student");
    while((res.next()) 判断是否有记录
    {
        String textField1=res.getString("SNumber");
       String textField2=res.getString("SName");
       String textField3=res.getString("SClass");
       String textField4=res.getString("SMajorin");
       String textField5=res.getString("SBirth");
       String textField6=res.getString("SHeadmaster");
    }
    展开全文
  • 报这个错时因为我的java类里是ResultSet内嵌套ResultSet,但是用的同一个Statement,这样不行,得创建两个Statement
    报这个错时因为我的java类里是ResultSet内嵌套ResultSet,但是用的同一个Statement,这样不行,得创建两个Statement
    展开全文
  • 我使用SQL Server 2005来创建数据库.在实施过程中,我试图创建一个功能,使学生能够注册他们的科目,因此该功能基本上搜索学生完成其先决条件的科目.所以我写了下面的代码:package GUIs;import java.sql.*;import ...

    我是使用NetBeans的

    Java初学者,我试图创建类似于教师注册系统的东西.我使用SQL Server 2005来创建数据库.

    在实施过程中,我试图创建一个功能,使学生能够注册他们的科目,因此该功能基本上搜索学生已完成其先决条件的科目.所以我写了下面的代码:

    package GUIs;

    import java.sql.*;

    import javax.swing.*;

    public class AddSubToStd extends javax.swing.JFrame {

    final void FillList1(){

    try{

    String url = "jdbc:sqlserver://localhost:1433;databaseName=BIS";

    String username = "sa";

    String password = "*****";

    Connection conn = DriverManager.getConnection(url,username,password);

    Statement stmt = conn.createStatement();

    DefaultListModel DLM = new DefaultListModel();

    ResultSet res = stmt.executeQuery("SELECT * FROM Students");

    while(res.next()){

    DLM.addElement(res.getString("ID"));

    }

    List1.setModel(DLM);

    }

    catch(SQLException e){

    JOptionPane.showMessageDialog(null, e.toString());

    }

    }

    final void FillList2(){

    try{

    String url = "jdbc:sqlserver://localhost:1433;databaseName=BIS";

    String username = "sa";

    String password = "*****";

    Connection conn = DriverManager.getConnection(url,username,password);

    Statement stmt = conn.createStatement();

    DefaultListModel DLM = new DefaultListModel();

    String Query = "SELECT * FROM FinishedCourses WHERE ID = '"+List1.getSelectedValue()+"'";

    ResultSet res = stmt.executeQuery(Query);

    ResultSet res1;

    String S_Code;

    String Query1;

    while(res.next()){

    S_Code = res.getString("S_Code");

    Query1 = "SELECT * From Subjects WHERE Prerequisite = '"+S_Code+"'";

    res1 = stmt.executeQuery(Query1);

    while(res1.next()){

    DLM.addElement(res.getString("S_Code"));

    }

    }

    conn.close();

    stmt.close();

    List2.setModel(DLM);

    }

    catch(SQLException e){

    JOptionPane.showMessageDialog(null, e.toString());

    }

    }

    public AddSubToStd() {

    initComponents();

    FillList1();

    }

    但我得到SQLException,当我尝试调用FillList2()时,结果集已关闭

    private void UpdateAllowedActionPerformed(java.awt.event.ActionEvent evt) {

    try{

    String url = "jdbc:sqlserver://localhost:1433;databaseName=BIS";

    String username = "sa";

    String password = "*****";

    Connection conn = DriverManager.getConnection(url,username,password);

    FillList2();

    }

    catch(SQLException e){

    JOptionPane.showMessageDialog(null, e.toString());

    }

    }

    有人请帮忙.

    展开全文
  • 结果集已关闭 错误处理方法

    千次阅读 2018-09-04 18:47:12
    网上有很多说法,考虑的程度大多都比较深,但...我曾经调用sql server数据库中的存储过程时遇到过这种情况,set nocount on/set nocount off 的具体作用就不解释了,这上面解释的已经很详细。 https://www.cnblogs....
  • 该楼层疑似违规被系统折叠隐藏此楼查看此楼String UserName = "sa";String Password = "sa";String driverName = ...String Url = "jdbc:sqlserver://127.0.0.1;database=book3";try {try...
  • Microsoft SQL Server 2005 Express Edition SP3

    热门讨论 2012-03-04 10:55:14
    如果您的计算机安装 SQL Server 2000 管理工具和 SQL Server Express 的默认实例,则可以使用 SQL Server 安装程序安装 SQL Server 2000 的默认实例。但是,这样做会禁用安装的 SQL Server Express 实例。因此,...
  • SQL Server的流水模式

    2009-05-15 19:46:00
    sqlserver企业管理器打开某个数据库的某个表,修改记录,关闭表就会提示:“在流水模式下,事务无法启动”,修改不了数据。原理:SQL Server 用来将结果集返回到客户端的默认模式。行按照其放置在结果集中的顺序...
  • 第2部分为SQLServer 2008的准备篇,介绍了SQL Server 2008的功能、特性、各版本的比较、安装方法、SQL Server 2008的服务、客户端的工具等;第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server ...
  • 第2部分为SQLServer 2008的准备篇,介绍了SQL Server 2008的功能、特性、各版本的比较、安装方法、SQL Server 2008的服务、客户端的工具等;第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server ...
  • 支持多个结果集的查询 性能提升 打开查询而不支持将所有行提取到客户端(FetchAll = False) 增加了单向支持 快速获取身份价值 StoredProc支持刷新 FullRefresh支持 执行更新和删除时检查旧行值 在从提交到回滚的...
  • 此方法将返回一个 SqlParameter 对象数组,这些对象使用缓存(与传递给该方法的连接字符串和命令文本相对应)中的参数的名称、值、方向和数据类型等进行了初始化。 注意: 用作参数的键的连接字符串通过简单的...
  •  游标的定义为:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。这里特别提出游标的概念,是...
  • 展开全部1.你的程序(工程)内是否引进Microsoft SQL Server 2000 Driver for ...同时保证程序正常(异常的捕获、结果集关闭、连32313133353236313431303231363533e59b9ee7ad9431333365633865接的关闭等)。2.你的SQ...
  • 16.4.2 用SQL Server 2005 Analysis Services的数据创建指标 361 16.5 手动实现KPI 363 16.6 小结 364 第17章 实现业务数据目录 365 17.1 确定业务数据 365 17.1.1 确定数据源 365 17.1.2 确定场景和目标 366 17.2 ...
  • 数据库调试工具

    2012-04-29 20:32:02
    1.3:修正当查询结果中的第一个记录集已关闭时,其它记录集不显示的bug。 1.4:增加功能:读入Execl和目录文件时,可以选择是否将第一行作为字段名。 1.5:修正因记录集非空导致的非查询类语句影响行数不显示的问题...
  • C#开发经验技巧宝典

    2008-10-14 20:21:45
    0984 如何获取存储过程返回的结果集 573 0985 取得数据表某个单元格的值 573 0986 在ASP.NET2.0下将数据绑定DropDownList 573 0987 在ADO.NET中实现数据库的事务处理 574 0988 将任意文件保存到数据库中 ...
  • 实例152 追加查询结果存在的表中 259 实例153 用VB实现SQL Server 2000存储过程 调用 260 实例154 动态创建Access数据库及数据表 263 实例155 拼音简码查询 267 实例156 在程序中应用视图 269 第4章 ...
  • 实例152 追加查询结果存在的表中 259 实例153 用VB实现SQL Server 2000存储过程 调用 260 实例154 动态创建Access数据库及数据表 263 实例155 拼音简码查询 267 实例156 在程序中应用视图 269 第4章 ...
  • 实例219 获取组合查询中两个结果集的差集 6.17 内连接查询 实例220 简单内连接查询 实例221 复杂内连接查询 实例222 使用inner join实现自身连接 实例223 使用inner join实现等值连接 实例224 使用inner join实现...
  • 实例219 获取组合查询中两个结果集的差集 6.17 内连接查询 实例220 简单内连接查询 实例221 复杂内连接查询 实例222 使用inner join实现自身连接 实例223 使用inner join实现等值连接 实例224 使用inner join实现...
  • 实例219 获取组合查询中两个结果集的差集 6.17 内连接查询 实例220 简单内连接查询 实例221 复杂内连接查询 实例222 使用inner join实现自身连接 实例223 使用inner join实现等值连接 实例224 使用inner join实现...
  • SQLHelper.cs

    热门讨论 2009-03-09 10:22:10
    此方法将返回一个 SqlParameter 对象数组,这些对象使用缓存(与传递给该方法的连接字符串和命令文本相对应)中的参数的名称、值、方向和数据类型等进行了初始化。 注意: 用作参数的键的连接字符串通过简单的...
  • PLSQLDeveloper下载

    2012-05-04 11:30:27
     游标的定义为:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标来标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。这里特别提出游标的概念,是...
  • C#.net_经典编程例子400个

    热门讨论 2013-05-17 09:25:30
    311 7.9 程序控制 312 实例222 打开控制面板中的程序 313 实例223 添加程序托盘 314 实例224 不出现在任务栏上的程序 314 实例225 怎样调用外部的Exe文件 315 实例226 关闭外部开启...
  • 实例266 关闭外部开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 改变系统提示信息 366 实例271 获取系统环境变量 367 ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    全书包括窗体与界面设计、控件应用、组件应用、图形技术、多媒体技术、文件系统、操作系统与Windows相关程序、注册表、数据库技术、SQL查询相关技术、LINQ查询技术、报表与打印技术、图 表技术、硬件相关开发技术、...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助...实例266 关闭外部开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 136
精华内容 54
关键字:

sqlserver结果集已关闭