Java ';getRow()和#x27;方法仅允许用于滚动游标SQLException错误

Java ';getRow()和#x27;方法仅允许用于滚动游标SQLException错误,java,sql,jdbc,derby,embedded-database,Java,Sql,Jdbc,Derby,Embedded Database,我试图从我在Netbeans中设置的嵌入式数据库中填充我的JTable 我的数据库包含3行和3列,我希望将它们插入JTable,并使该表在GUI应用程序中可见 然而,正如上面的标题所说,我得到了一个java.sql.SQLException错误,并且我的表在GUI应用程序中不可见 这是我的代码: public void FillTable(JTable table, String Query) { try { Class.forName("org.apache.d

我试图从我在Netbeans中设置的嵌入式数据库中填充我的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,同时又避免出现未知错误

这个错误到底意味着什么?我不确定“滚动光标”是什么。

如中所述:

注意:对于结果集类型为
type\u FORWARD\u的
ResultSet
s,对
getRow
方法的支持是可选的 [……]

抛出:
[…]
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);
}
我已经有一段时间没有使用swing了,但是从表模型中删除现有行并调用
addRow
可能更简单

int rowIdx = 0;
while (rs.next()) {
    Object[] row = new Object[columns];
    // ...

    ((DefaultTableModel) table.getModel()).insertRow(rowIdx++, row);
}