程序运行效率的问题!

wanglei810522 2004-09-26 03:12:29
我想实现点击书的某一节点时同时通知两个表改变数据!功能已经实现了,但是每次当我不断的点击树节点时,程序运行的会越来越慢,最后就没有反应了!不知问题出在哪里,各位帮我看看吧!代码可能有点长!(我觉着问题可能出现在表模型上)

//这是表模型
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;
}

}
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JerKii 2004-09-28
  • 打赏
  • 举报
回复
“调用Connection的close根本就无法显示数据”???这是什么意思?
使用完数据库连接后肯定要关闭!Statement和Connection都应该关掉!

你可以给你的DBConnection添加一个方法如dcclose,由他来执行Statement和Connection的关闭
wanglei810522 2004-09-28
  • 打赏
  • 举报
回复
rs == null和rs.close()有什么区别?(rs为ResultSet的引用)
wanglei810522 2004-09-28
  • 打赏
  • 举报
回复
我都加了,但是还是不行!程序还是老问题!
wanglei810522 2004-09-27
  • 打赏
  • 举报
回复
是调用Statement的close方法还是调用Connection的close方法?调用Statement的close方法比以前还要慢,调用Connection的close根本就无法显示数据!我用的是jdbc:odbc驱动,是不是因为这个原因?
peter20011012 2004-09-26
  • 打赏
  • 举报
回复
UP
awded 2004-09-26
  • 打赏
  • 举报
回复
数据库连接没有关闭。第一个try块后面加一个finally,把数据库连接关闭就行了。
wanglei810522 2004-09-26
  • 打赏
  • 举报
回复
是不是程序太长了,懒得看呀!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧