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
最满意答案
要将子项添加到项目,请对该项目使用
void QStandardItem::appendRow(QStandardItem * item)
。QStandardItem
还有方法child()
和parent()
,它们将帮助您识别是否有父/子。QModelIndex
类也是如此,因此它也可以帮助您识别是否存在与索引相关的子级或父级。To add child to an item, use
void QStandardItem::appendRow(QStandardItem * item)
on that item. TheQStandardItem
has also methodschild()
andparent()
which will help you identify if there are parents/children. So does theQModelIndex
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全球定位(QStandardItem global position)[2022-09-18]
要获取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 ...