首页 \ 问答 \ java.sql.SQLException:ResultSet已关闭(java.sql.SQLException: ResultSet closed)

java.sql.SQLException:ResultSet已关闭(java.sql.SQLException: ResultSet closed)

我无法进行进一步的处理,因为我在运行此代码时关闭了ResultSet。 我在sqlite数据库表的15行之后添加了值,我想找到15行的平均值,并且应该存储在ArrayList中。

这是代码: -

try {
    Class.forName("org.sqlite.JDBC");
    c = DriverManager.getConnection("jdbc:sqlite:test.db");
    c.setAutoCommit(false);
    System.out.println("Opened database successfully3");
    stmt = c.createStatement();
    rs = stmt
            .executeQuery("SELECT TIME,BID,ASK FROM '" + title + "' ;");
    System.out.println("Opened database successfully 20");
    while (rs.next()) {
        i++;
        System.out.println(i);
        if (i > 15) {
            System.out.println("i am in");
            List<String> stocklist = new ArrayList<String>();
            String main = rs.getString(1);
            System.out.println(rs.getString(1));
            String s[] = main.split(" ", 2);
            String date = s[0];
            String time = s[1];
            stocklist.add(date);
            stocklist.add(time);
            stocklist.add(df.format(rs.getFloat("BID")));
            stocklist.add(df.format(rs.getFloat("ASK")));
            rs1 = stmt
                    .executeQuery("SELECT ASK FROM '" + title + "' ;");
            int j = 1;
            while (rs1.next()) {
                if (j < i) {
                    System.out.println(rs1.getFloat("ASK"));
                    avg = avg + rs1.getFloat("ASK");
                }
                j++;
            }
            rs1.close();

            System.out.println("i am out");
            avg = avg / 15;
            changepercent = ((rs.getFloat("ASK") - avg) / avg) * 100;
            stocklist.add(df.format(changepercent));
            stocklist.add("ETE");
            stocklist.add("HUN");
            stocklist.add("ALU");
            stocklist.add("ETE");
            stocklist.add("HUN");
            stocklist.add("ALU");
            stocklist.add("ETE");
            stocklist.add("HUN");
            hntm.addRow(stocklist);
        }
    }
    rs.close();
    stmt.close();
    c.close();
} catch (Exception e) {
    System.err.println(e.getClass().getName() + ": " + e.getMessage());
    System.exit(0);
}

I cant not do the further process because I get ResultSet closed while running this code. I am adding the value after 15 row of the sqlite database table and I want to find average value of 15 row and that should be store in ArrayList.

Here is the code:-

try {
    Class.forName("org.sqlite.JDBC");
    c = DriverManager.getConnection("jdbc:sqlite:test.db");
    c.setAutoCommit(false);
    System.out.println("Opened database successfully3");
    stmt = c.createStatement();
    rs = stmt
            .executeQuery("SELECT TIME,BID,ASK FROM '" + title + "' ;");
    System.out.println("Opened database successfully 20");
    while (rs.next()) {
        i++;
        System.out.println(i);
        if (i > 15) {
            System.out.println("i am in");
            List<String> stocklist = new ArrayList<String>();
            String main = rs.getString(1);
            System.out.println(rs.getString(1));
            String s[] = main.split(" ", 2);
            String date = s[0];
            String time = s[1];
            stocklist.add(date);
            stocklist.add(time);
            stocklist.add(df.format(rs.getFloat("BID")));
            stocklist.add(df.format(rs.getFloat("ASK")));
            rs1 = stmt
                    .executeQuery("SELECT ASK FROM '" + title + "' ;");
            int j = 1;
            while (rs1.next()) {
                if (j < i) {
                    System.out.println(rs1.getFloat("ASK"));
                    avg = avg + rs1.getFloat("ASK");
                }
                j++;
            }
            rs1.close();

            System.out.println("i am out");
            avg = avg / 15;
            changepercent = ((rs.getFloat("ASK") - avg) / avg) * 100;
            stocklist.add(df.format(changepercent));
            stocklist.add("ETE");
            stocklist.add("HUN");
            stocklist.add("ALU");
            stocklist.add("ETE");
            stocklist.add("HUN");
            stocklist.add("ALU");
            stocklist.add("ETE");
            stocklist.add("HUN");
            hntm.addRow(stocklist);
        }
    }
    rs.close();
    stmt.close();
    c.close();
} catch (Exception e) {
    System.err.println(e.getClass().getName() + ": " + e.getMessage());
    System.exit(0);
}

原文:https://stackoverflow.com/questions/21728494
更新时间:2022-08-25 21:08

最满意答案

要将子项添加到项目,请对该项目使用void QStandardItem::appendRow(QStandardItem * item)QStandardItem还有方法child()parent() ,它们将帮助您识别是否有父/子。 QModelIndex类也是如此,因此它也可以帮助您识别是否存在与索引相关的子级或父级。


To add child to an item, use void QStandardItem::appendRow(QStandardItem * item) on that item. The QStandardItem has also methods child() and parent() which will help you identify if there are parents/children. So does the QModelIndex class, so it also can help you identifying if there are children or parent related to the index.

相关问答

更多
  • 您不要将QComboBox存储在QStandardItemModel中。 假设您有以下选择: A B C D 并且你有一个包含QListView中的两个项目的列表,第一个值是A,第二个是D: QListView* pView = new QListView(); QStandardItemModel* pModel = new QStandardItemModel(); pView->setModel(pModel); pModel->appendRow(new QStandardItem("A") ...
  • QDomeNode是一个使用显式共享的类。 这意味着同一节点的所有副本都在相同的数据上运行。 所以你不必使用指针。 不同地址的原因是因为QDomNode::parentNode返回父级的副本。 QDomeNode is a class that uses explicit sharing. That means all copies of the same node operate on same data. So you don't have to use pointers. And the reason ...
  • 您的问题是您正在使用动态分配的字符串。 QStandardItem的构造函数需要QString & ,而不是QString * 。 由于指针基本上是一个整数,因此使用指针会使编译器混淆解析为QStandardItem(int rows, int columns = 1)构造函数。 如果你使用standard_model->setItem(0,0,new QStandardItem(*file_content)); ,它将起作用standard_model->setItem(0,0,new QStandard ...
  • 在Qt中, 可持续性有三个要求 : 类型必须是可分配的数据类型 该类型必须定义一个==运算符 必须为类型定义qHash函数 因此,如果PyQt想要保持与Qt的一致性,它应该只在上述条件适用时定义__hash__ ,并且它的实现应该简单地委托给Qt提供的任何qHash函数。 将Python 2与PyQt4 / 5一起使用时的行为应该被认为是错误的,因为它给出的结果与Qt不一致。 通过查看可清洗类型(以Qt术语)发生的情况可以看出这一点 : 使用Python 3: >>> a = QtCore.QUrl('fo ...
  • QStandardItemModel是关于将数据存储在模型中的,所以每个单元都由一个包含该单元数据的QStandardItem表示。 如果数据已经存储在其他地方并且不应该被复制,那么QStandardItemModel是一个错误的方法,并且定制模型是QStandardItemModel的。 在从QAbstractItemModel派生的树结构的情况下,自定义模型仅仅是视图和数据之间的接口,所以数据只在内存中驻留一次。 A post in qtcentre suggested Chapter 4 of Adv ...
  • 要将子项添加到项目,请对该项目使用void QStandardItem::appendRow(QStandardItem * item) 。 QStandardItem还有方法child()和parent() ,它们将帮助您识别是否有父/子。 QModelIndex类也是如此,因此它也可以帮助您识别是否存在与索引相关的子级或父级。 To add child to an item, use void QStandardItem::appendRow(QStandardItem * item) on that ...
  • 要获取QStandardItem本地位置,您可以使用QAbstractItemView :: visualRect : QModelIndex index = MY_QStandardItemModel->indexFromItem(MY_QStandardItem); QRect rect = MY_QTableView->visualRect(index); Qpoint localPoint = rect.topLeft(); // <- the local position 要获得全球定位,您可以 ...
  • Qt文档列出了项目数据角色 。 字体可以像这样改变: font = item.font() font.setBold(True) item.setFont(font) The Qt Documentation lists the item data roles. The font can be changed like this: font = item.font() font.setBold(True) item.setFont(font)
  • 我相信你在寻找的是 QStandardItem::setData ( const QVariant & value, int role = Qt::UserRole + 1 ) 你可以使用这样的东西: QStandardItem item; item.setData(QVariant(MyClass),Qt::UserRole); 所以我认为你需要做的是将自定义类强制转换为QVariant(如上所示)并设置相应的角色,就像我使用UserRole一样。 然后在提取数据时,您可以将其类型 ...
  • 看起来你想要setItemPrototype 。 这为模型提供了一个项目工厂,因此它将在必要时隐式使用您的自定义类。 您需要做的就是在item类中重新实现clone() : class MyItem(QtGui.QStandardItem): '''This is the item I'd like to drop into the view''' def __init__(self, parent=None): super(MyItem, self).__init__(p ...

相关文章

更多

最新问答

更多
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • 电脑高中毕业学习去哪里培训
  • 电脑系统专业就业状况如何啊?
  • IEnumerable linq表达式(IEnumerable linq expressions)
  • 如何在Spring测试中连接依赖关系(How to wire dependencies in Spring tests)
  • Solr可以在没有Lucene的情况下运行吗?(Can Solr run without Lucene?)
  • 如何保证Task在当前线程上同步运行?(How to guarantee that a Task runs synchronously on the current thread?)
  • 在保持每列的类的同时向数据框添加行(Adding row to data frame while maintaining the class of each column)
  • 的?(The ? marks in emacs/haskell and ghc mode)
  • 一个线程可以调用SuspendThread传递自己的线程ID吗?(Can a thread call SuspendThread passing its own thread ID?)
  • 延迟socket.io响应,并“警告 - websocket连接无效”(Delayed socket.io response, and “warn - websocket connection invalid”)
  • 悬停时的图像转换(Image transition on hover)
  • IIS 7.5仅显示homecontroller(IIS 7.5 only shows homecontroller)
  • 没有JavaScript的复选框“关闭”值(Checkbox 'off' value without JavaScript)
  • java分布式框架有哪些
  • Python:填写表单并点击按钮确认[关闭](Python: fill out a form and confirm with a button click [closed])
  • PHP将文件链接到根文件目录(PHP Linking Files to Root File Directory)
  • 我如何删除ListView中的项目?(How I can remove a item in my ListView?)
  • 您是否必须为TFS(云)中的每个BUG创建一个TASK以跟踪时间?(Do you have to create a TASK for every BUG in TFS (Cloud) to track time?)
  • typoscript TMENU ATagParams小写(typoscript TMENU ATagParams lowercase)
  • 武陟会计培训类的学校哪个好点?
  • 从链接中删除文本修饰(Remove text decoration from links)