'getRow()'方法只允许在滚动游标 SQLException 错误上



我正在尝试从我在NetBean中设置的嵌入式数据库中填充我的JTable。

我的数据库包含3行和3列,我想将其插入一个可Jtable,并在我的GUI应用程序中可见。

但是,我会得到java.sql.sqlexception错误,如上所述,我的桌子在我的GUI应用程序中看不到。

这是我的代码:

public void FillTable(JTable table, String Query)
{
    try
    {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:derby:STOCK_CONTROL");
        Statement stat = conn.createStatement();
        ResultSet rs = stat.executeQuery(Query);
        //Remove previously added rows
        while (table.getRowCount() > 0)
        {
            ((DefaultTableModel) table.getModel()).removeRow(0);
        }
        int columns = rs.getMetaData().getColumnCount();
        while (rs.next())
        {
            Object[] row = new Object[columns];
            for (int i = 1; i <= columns; i++)
            {
                row[i - 1] = rs.getObject(i);
            }
            //The error is being generated here at 'rs.getRow()'
            ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, row);
        }
        rs.close();
        stat.close();
        conn.close();         
    }
    catch (InstantiationException |
            IllegalAccessException |
            ClassNotFoundException |
            SQLException e)
    {
        System.out.println(e);
        e.printStackTrace();
    }
}

我创建表并调用上述方法:

JTable tigerTable = new JTable();
FillTable(tigerTable, "SELECT * FROM TIGER_INFO");

我试图找到有关为什么引起此错误但无效的信息。

我的问题是,我如何从嵌入式数据库中正确填充我的JT,同时也偏离了我出现的这个未知错误?

这个错误到底是什么意思?我不确定一个"滚动光标"是什么。

ResultSet.getRow()中的记录:

注意:支持getRow方法的ResultSet s是可选的,结果集类型的TYPE_FORWARD_ONLY
[..]

投掷:
[..]
SQLFeatureNotSupportedException-如果JDBC驱动程序不支持此方法

您要么需要使用

要求滚动光标
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

或 - 可能更好 - 自己跟踪行号,而不是使用ResultSet.getRow()。例如:

int rowIdx = 0;
while (rs.next()) {
    Object[] row = new Object[columns];
    // ...
    ((DefaultTableModel) table.getModel()).insertRow(rowIdx++, row);
}

我已经做了一段时间以来已经做了任何事情,但是只要从表模型中删除现有行并调用addRow

甚至更简单

最新更新