Java 使用abstracttablemodel的JTable在插入后未更新

Java 使用abstracttablemodel的JTable在插入后未更新,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,这是我文章的后续问题 我的JTable是使用abstracttablemodel填充的。我实现了一个insertRow方法,该方法在数据库中运行良好,但不会刷新JTable。如下面的代码所示,在插入之后,我使用fireTableRowsInserted方法更新模型,但这似乎不起作用。使用insertRow方法的abstracttablemodel如下所示: 类ResultSetTableModel扩展了AbstractTableModel { 专用终端连接; 非公开最终声明; 私有结果集结果集

这是我文章的后续问题

我的JTable是使用
abstracttablemodel
填充的。我实现了一个insertRow方法,该方法在数据库中运行良好,但不会刷新JTable。如下面的代码所示,在插入之后,我使用
fireTableRowsInserted
方法更新模型,但这似乎不起作用。使用insertRow方法的
abstracttablemodel
如下所示:

类ResultSetTableModel扩展了AbstractTableModel
{
专用终端连接;
非公开最终声明;
私有结果集结果集;
私有结果元数据结果元数据;
私有整数行;
私有静态最终字符串oracleDriver=“oracle.jdbc.driver.oracleDriver”;
//跟踪数据库连接状态
私有布尔值dbConnStatus=false;
//构造函数初始化rSet并获取其
//元数据对象;还确定行数
PublicResultSetTableModel(字符串oracleConnection、字符串用户名、字符串密码、字符串查询)引发SQLException
{
//连接到数据库
connection=getDBConnection(oracleConnection、用户名、密码);
//create语句查询数据库
语句=connection.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
//更新数据库连接状态
dbConnStatus=true;
//设置查询并执行它
setQuery(查询);
}
私有静态连接getDBConnection(字符串oraConn、字符串用户、字符串pwd)
{
连接dbConn=null;
尝试
{
类forName(oracleDriver);
}
捕获(ClassNotFoundException ClassExcepp)
{
System.out.println(classExcep.getMessage());
}
尝试
{
dbConn=DriverManager.getConnection(oraConn,user,pwd);
返回dbConn;
}
捕获(SQLException SQLEXEP)
{
System.out.println(sqlexep.getMessage());
}
返回dbConn;
}
//获取表示列类型的类
@SuppressWarnings({“unchecked”,“rawtypes”})
公共类getColumnClass(int列)引发IllegalStateException
{
//确保数据库连接可用
如果(!dbConnStatus)
抛出新的IllegalStateException(“未连接到数据库”);
//确定列的Java类
尝试
{
String className=resultSetMetaData.getColumnClassName(列+1);
//返回表示类名的类对象
返回Class.forName(className);
}
捕获(例外e)
{
e、 printStackTrace();
}
return Object.class;//如果出现上述问题,则假定为Object类型
}
//删除结果集中的行
public void removatorow(字符串empID)
{
int rsRow=0;
尝试
{
//将光标设置为数据集的开头(第一行之前)
如果(!resultSet.isBeforeFirst())
resultSet.beforeFirst();
//迭代resultSet以查找与匹配的记录
//正确的员工ID。找到后删除行
while(resultSet.next())
{
if(resultSet.getString(“EMPLOYEENO”).equals(empID))
{
rsRow=resultSet.getRow();
绝对结果集(rsRow);
resultSet.deleteRow();
打破
}
}
resultSet.last();
numberOfRows=resultSet.getRow();
fireTableDataChanged();
}
捕获(SQLE异常)
{
e、 printStackTrace();
}
}
//将行添加到结果集中
public void insertRow(字符串fName、字符串lName、字符串userID、字符串公司、字符串组)
{
//获取用户的显示名称
字符串displayName=fName.substring(0,1).concat(“.”).concat(lName);
尝试
{
//将光标移动到暂存行以插入记录
resultSet.moveToInsertRow();
结果集updateString(“EMPLOYEENO”,userID);
resultSet.updateString(“FIRSTNAME”,fName);
resultSet.updateString(“LASTNAME”,lName);
结果集updateString(“DISPLAYNAME”,DISPLAYNAME);
结果集updateString(“组名”,组);
结果集更新字符串(“公司名称”,公司);
resultSet.insertRow();
resultSet.beforeFirst();
//resultSet.last();
//row=resultSet.getRow();
//fireTableDataChanged();
//firetablestructured();
fireTableRowsInserted(this.getRowCount()-1,this.getRowCount()-1);
} 
捕获(SQLE异常)
{
e、 printStackTrace();
} 
}
//获取结果集中的列数
public int getColumnCount()引发IllegalStateException
{
//确保数据库连接可用
如果(!dbConnStatus)
抛出新的IllegalStateException(“未连接到数据库”);
//确定列数
尝试
{
返回resultSetMetaData.getColumnCount();
}
捕获(SQLException SQLException)
{
sqlException.printStackTrace();
}
返回0;//如果上面出现问题,则返回0作为列数
}
//获取ResultSet中特定列的名称
公共字符串getColumnName(int列)引发IllegalStateException
{
//确保数据库连接可用
如果(!dbConnStatus)
抛出新的IllegalStateException(“未连接到数据库”);
//确定列名
尝试
{
返回resultSetMetaData.getColumnName(列+1);
}
捕获(SQLException SQLException)
{
sqlException.printStackTrace();
}
return“”;//如果出现上述问题,请为列名返回空字符串
}
//返回结果集中的行数
public int getRowCount()引发IllegalStateException
{
//确保数据库连接可用
如果(!dbConnStatus)
抛出新的IllegalStateException(“未连接到数据库”);
返回numberOfRows;
}
//获取特定行和列中的值
公共对象getValueAt(int行,int列)引发IllegalStateException
{
//确保数据库连接可用
如果(!dbConnStatus)
抛出新的IllegalStateException(“未连接到数据库”);
//在指定的结果集行和列处获取值
尝试
{
绝对结果集(行+1);
返回resultSet.getObject(列+1);
}
捕获(SQLException SQLException)
{
sqlException.printStackTrace();