程序运行效率的问题!
我想实现点击书的某一节点时同时通知两个表改变数据!功能已经实现了,但是每次当我不断的点击树节点时,程序运行的会越来越慢,最后就没有反应了!不知问题出在哪里,各位帮我看看吧!代码可能有点长!(我觉着问题可能出现在表模型上)
//这是表模型
class MyTableModel extends AbstractTableModel{
private Vector vector;
//要显示的列名
private String[] columnName;
//需要显示的列数
int[] column;
private ResultSet rs;
public MyTableModel(int[] col,String[] colName){
columnName = colName;
column = col;
}
//得到列名
public String getColumnName(int col){
return columnName[col];
}
//得到列数
public int getColumnCount(){
return columnName.length;
}
//得到行数
public int getRowCount(){
return vector.size();
}
//得到某一行某一列的值
public Object getValueAt(int row,int col){
return ((String[])vector.elementAt(row))[col];
}
//清除数据
public void clearAll(){
vector.clear();
}
//传入数据
public void setVector(Vector vec){
if(vector == null)
vector = vec;
}
public void query(String s) {
vector = new Vector();
DBConnection dbconn;
try{
dbconn = new DBConnection();
rs = dbconn.getResult(s);
}
catch(Exception e){
JOptionPane.showMessageDialog(null,
e.toString());
}
try{
while(rs.next()){
String[] record = new String[column.length];
for (int i = 0; i<column.length; i++){
record[i] = rs.getString(column[i]);
}
//将记录存入向量
vector.addElement(record);
}
}
catch(Exception re){
JOptionPane.showMessageDialog(null,
re.toString() );
}
finally{
rs = null;
}
}//查询记录
}//抽象表模型类
//这是树的监听器(modZgxx1和modZgxx2是表模型对象的引用)
private class TreeListener implements TreeSelectionListener{
String sql;
//方法重写
public void valueChanged(TreeSelectionEvent me){
String sql = getSQL();
if(me.getSource().equals(tBmxx)){
changeZgxx1();
changeZgxx2();
}
}
//通知第一个表改变记录
private void changeZgxx1(){
//清除所有记录
modZgxx1.clearAll();
//重新执行查询
modZgxx1.query(sql);
//通知数据改变
modZgxx1.fireTableDataChanged();
modZgxx1.equals("");
}
//通知第二个表改变记录
private void changeZgxx2(){
//清除所有记录
modZgxx2.clearAll();
//重新执行查询
modZgxx2.query(sql);
//通知数据改变
modZgxx2.fireTableDataChanged();
modZgxx2.equals("");
}
//得到相应的查询语句(没有问题)
private String getSQL(){
ResultSet rs = null;
//存放部门编号以便查询
String tempBmbh = "";
//获得选中的树节点所显示的信息
String node =
tBmxx.getSelectionPath().getLastPathComponent().toString();
//传入bmxx类
bmxx.setBmmc(node);
try{
//从部门信息表中得到记录
rs = sysBmxx.findBmxx(bmxx);
//将游标移到第一条之前
rs.beforeFirst();
//移到第一条
rs.next();
//获得部门编号
tempBmbh = rs.getString(1);
//sql语句
sql = "SELECT * FROM rs_zgjbxx WHERE bmbh = '"
+ tempBmbh + "'";
}
catch(Exception e){
JOptionPane.showMessageDialog(null,
"未找到相关记录: "+e.toString());
}
return sql;
}
}