gpt4 book ai didi

java - "SQLite JDBC: inconsistent internal state"尝试从 ResultSetMetaData 获取 ColumnCount

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:47 25 4
gpt4 key购买 nike

正如标题所暗示的那样,我正在尝试从结果数据集中检索表模型。我仍在学习如何使用数据库,所以我目前正在使用以下代码:

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import java.util.Vector;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class DbUtils {
public static TableModel resultSetToTableModel(ResultSet rs) {
try {
ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
Vector columnNames = new Vector();

// Get the column names
for (int column = 0; column < numberOfColumns; column++) {
columnNames.addElement(metaData.getColumnLabel(column + 1));
}

// Get all rows.
Vector rows = new Vector();
while (rs.next()) {
Vector newRow = new Vector();

for (int i = 1; i <= numberOfColumns; i++) {
newRow.addElement(rs.getObject(i));
}

rows.addElement(newRow);
}

return new DefaultTableModel(rows, columnNames);
} catch (Exception e) {
e.printStackTrace();

return null;
}
}
}

但我现在遇到的问题是,每当程序到达检索列计数的行时,它都会给我“内部状态不一致”错误。完整列表在这里:

java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state
at org.sqlite.core.CoreResultSet.checkCol(CoreResultSet.java:81)
at org.sqlite.jdbc3.JDBC3ResultSet.getColumnCount(JDBC3ResultSet.java:699)
at DbUtils.resultSetToTableModel(DbUtils.java:14)
at Window.main(Window.java:170)

我已经在堆栈溢出上检查了与此相关的唯一其他问题,但没有从中得到任何见解。有什么我可以做的吗?

谢谢!

最佳答案

我已经看到当 rs.next() 没有更多记录指向 ResultSet rs 时,经常会出现此错误.

我在这段代码中发现了错误,这里的buildModel是类BuildModel的一个对象,构建方法buildOneTablebuildSecondTable 使用 rs.next()

        ps = conn.prepareStatement(sqlQuery);
rs = ps.executeQuery();
oneTable.setModel(buildModel.buildOneTable(rs));
twoTable.setModel(buildModel.buildSecondTable(rs));
ps.close();
rs.close();

在上面给出的代码中,您可以看到两个表都是使用 buildModel 类的方法 buildOneTablebuildSecondTable 构建的,并且只有一个PreparedStatement 变量 ps 被使用。错误出现是因为 buildOneTable(在 buildModel 内)中的 rs.next() 指向所有记录,因为单个 ps 用于构建方法,它们共享相同的 next() 指针,现在在构建第二个表时没有更多的记录指向。要解决此错误,您可以执行以下操作:

  1. 使用 rs.first()next() 指针重新指向 resultSet rs 的开头>.
  2. 或者像我的情况一样再次执行语句:

        ps = conn.prepareStatement(sql); 
    rs1 = ps.executeQuery();
    presentTable.setModel(buildModel.buildPresentLeaveTable(rs1));
    rs1.close();
    rs2 = ps.executeQuery();
    pastTable.setModel(buildModel.buildPastLeaveTable(rs2));
    ps.close();
    rs2.close();

关于java - "SQLite JDBC: inconsistent internal state"尝试从 ResultSetMetaData 获取 ColumnCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com