当前位置: 代码迷 >> Eclipse >> 关于结果集元数据ResultSetMetaData解决思路
  详细解决方案

关于结果集元数据ResultSetMetaData解决思路

热度:54   发布时间:2016-04-23 00:26:46.0
关于结果集元数据ResultSetMetaData
ResultSetMetaData的对象得到数据库的属性后必须保持数据库连接不关闭才能传递信息吗?注意本例中的对象metaData
public class TableModel extends AbstractTableModel{
private ResultSet resultSet;
private ResultSetMetaData metaData;
private int numberOfRows;
private int numberOfColumns;
final int PAGE_SIZE=5;
protected int thisPage,totalPages,totalRows;

public TableModel(String tableName,int thisPage){
this.thisPage=thisPage;
setQuery(tableName);
}

public String[] getColumnNames(){
String[] columnName=null;
try{
columnName=new String[numberOfColumns];
for(int i=0;i<numberOfColumns;i++){
columnName[i]=metaData.getColumnName(i+1);
}
}catch(Exception sqlException){
sqlException.printStackTrace();
}
return columnName;
}

public void setQuery(String tableName){
Connection con=null;
Statement statement=null;
try{
con=DBConnector.getConnection();
statement=con.createStatement();
resultSet=statement.executeQuery(" select * from "+tableName);


resultSet.last();
totalRows=resultSet.getRow();


resultSet=statement.executeQuery(" select * from "+tableName+" limit "+(thisPage-1)*PAGE_SIZE+" , "+PAGE_SIZE);

resultSet.last();
numberOfRows=resultSet.getRow();


metaData=resultSet.getMetaData();
numberOfColumns=metaData.getColumnCount();

}catch(SQLException e){
e.printStackTrace();
}finally{
DBConnector.closeConnection(con);
}



这样运行到getColumnNames()报错,原因是No operations allowed after connection closed.问题是metaData在setQuery(tableName)之后就已经有值了,所以应该与关不关闭连接没关系吧,而如果去掉DBConnector.closeConnection(con);则运行没报错,为什么会这样呢?
------解决方案--------------------
ResultSetMetaData 结果集元数据也是建立在数据库连接的基础上的
跟statement,resultset一样,必须在连接的情况下使用,如果关闭连接了,自然就拿不到了。
------解决方案--------------------
ResultSet集合中存储的是执行Sql语句产生的临时表集合,一旦关闭,这些临时表就会消失,数据自然不复存在。。
------解决方案--------------------
ResultSetMetaData 结果集元数据也是建立在数据库连接的基础上的
跟statement,resultset一样,必须在连接的情况下使用,如果关闭连接了,自然就拿不到了。