我正在做一个项目,用我的数据库中的数据填充一个表。我正在使用 try-with-resources 语句,因为我希望在离开我的语句后关闭我Connection
的 、Statement
和对象。在我的块中,我声明了一个使用匿名内部类的对象,该对象使用数据库中的数据填充表。ResultSet
try-with-resources
try
JTable
问题:我java.sql.SQLException: Operation not allowed after ResultSet closed
从匿名内部类中的任何方法获取,这些方法试图访问 try-with-resources 括号内的资源。
问题:我需要做什么或改变什么,以便我的资源可以被try-with-resources
声明中的匿名内部类访问
public class School extends JFrame{
private JTable mytable;
String url="jdbc:mysql://localhost:3306/students";//am connecting to the students database
String username="";
String password="";
public School(){
super("computer science students");
try(Connection con=DriverManager.getConnection(url, username,password);
Statement smt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rst=smt.executeQuery("select * from students.studentstable")){
final ResultSetMetaData metadata=rst.getMetaData();
mytable=new JTable(new DefaultTableModel(){
@Override
public int getRowCount(){
try{
rst.last();
return rst.getRow();
}catch(SQLException sqlex){
System.out.println(sqlex);
return 0;
}
}
@Override
public int getColumnCount(){
try{
return metadata.getColumnCount();
}catch(SQLException sqlex){
System.out.println(sqlex);
return 0;
}
}
@Override
public Class getColumnClass(int col){
try{
String classname=metadata.getColumnClassName(col+1);
return Class.forName(classname);
}catch(SQLException |ClassNotFoundException sqlex){
System.out.println(sqlex.getMessage());
return Object.class;
}
}
@Override
public String getColumnName(int col){
try{
String name=metadata.getColumnName(col+1);
return name;
}catch(SQLException sqlex){
System.out.println(sqlex.getErrorCode());
return "";
}
}
@Override
public Object getValueAt(int row,int col){
try{
rst.absolute(row+1);
return rst.getObject(col+1);
}catch(SQLException sqlex){
System.out.println(sqlex.getErrorCode());
return "";
}
}
});
JScrollPane pane=new JScrollPane(mytable);
add(pane);
}catch(SQLException sqlexc){
System.out.println(sqlexc);
}
}
public static void main(String[] args) {
School frame=new School();
frame.setVisible(true);
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}