class DBManager{
//省略连接部分
//下面是其中一个方法
public ResultSet executeQuery(String queryStr)
{
ResultSet rs=null;
try
{
rs=stmt.executeQuery(queryStr);
}
catch(SQLException e)
{
System.out.println("SQLException"+e.getMessage());
}
return rs;
}
}另外一个类 class QueryTableModel extends AbstractTableModel {
private final boolean DEBUG=true;
private String sqlStr;
private ResultSet rs=null;
public QueryTableModel(String sqlStr) {
this.sqlStr=sqlStr;
rs=dbm.executeQuery(sqlStr);
}
public int getColumnCount() {
return dbm.countColumns();
}
public int getRowCount() {
int row=0;
try{
ResultSet rsq=dbm.executeQuery(sqlStr);
rsq.last();
row=rsq.getRow();
rsq.beforeFirst();
}
catch(SQLException se){
JOptionPane.showMessageDialog(null,"SQLException!!!:"+se.getMessage());
}
finally{
return row;
}
}
public String getColumnName(int columnIndex) {
columnIndex++;
return dbm.getColumnName(columnIndex);
}
public Object getValueAt(int rowIndex, int columnIndex) {
String str=null;
try{
str=rs.getString(++columnIndex);
System.out.println(str);
}
catch(SQLException e){
System.out.println("ex:"+e.getMessage());
}
return str;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex!=0){
return true;
}
return false;
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
fireTableCellUpdated(rowIndex, columnIndex);
}
}//用类QueryTableModel创建JTabel getValueAt()方法出现
ResultSet is closed Exception
但在constructor里已经得到一个ResultSet(而且测试过Result在constructor范围内可用)
请问为何?
//省略连接部分
//下面是其中一个方法
public ResultSet executeQuery(String queryStr)
{
ResultSet rs=null;
try
{
rs=stmt.executeQuery(queryStr);
}
catch(SQLException e)
{
System.out.println("SQLException"+e.getMessage());
}
return rs;
}
}另外一个类 class QueryTableModel extends AbstractTableModel {
private final boolean DEBUG=true;
private String sqlStr;
private ResultSet rs=null;
public QueryTableModel(String sqlStr) {
this.sqlStr=sqlStr;
rs=dbm.executeQuery(sqlStr);
}
public int getColumnCount() {
return dbm.countColumns();
}
public int getRowCount() {
int row=0;
try{
ResultSet rsq=dbm.executeQuery(sqlStr);
rsq.last();
row=rsq.getRow();
rsq.beforeFirst();
}
catch(SQLException se){
JOptionPane.showMessageDialog(null,"SQLException!!!:"+se.getMessage());
}
finally{
return row;
}
}
public String getColumnName(int columnIndex) {
columnIndex++;
return dbm.getColumnName(columnIndex);
}
public Object getValueAt(int rowIndex, int columnIndex) {
String str=null;
try{
str=rs.getString(++columnIndex);
System.out.println(str);
}
catch(SQLException e){
System.out.println("ex:"+e.getMessage());
}
return str;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex!=0){
return true;
}
return false;
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
fireTableCellUpdated(rowIndex, columnIndex);
}
}//用类QueryTableModel创建JTabel getValueAt()方法出现
ResultSet is closed Exception
但在constructor里已经得到一个ResultSet(而且测试过Result在constructor范围内可用)
请问为何?
public QueryTableModel(String sqlStr) {
this.sqlStr=sqlStr;
rs=dbm.executeQuery(sqlStr);
}
如果改为
public QueryTableModel(String sqlStr) {
this.sqlStr=sqlStr;
try{
rs=dbm.executeQuery(sqlStr);
}
catch(Exception se){
System.out.println("error");
}
}
并没有exception
而且在constructor内,rs是可用的~