Java ';getRow()和#x27;方法仅允许用于滚动游标SQLException错误
我试图从我在Netbeans中设置的嵌入式数据库中填充我的JTable 我的数据库包含3行和3列,我希望将它们插入JTable,并使该表在GUI应用程序中可见 然而,正如上面的标题所说,我得到了一个java.sql.SQLException错误,并且我的表在GUI应用程序中不可见 这是我的代码: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
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);
}