再问如何关闭数据库连接
测试类:
db ds =new db();
Connection conn = ds.getconn();
UserDB ud = new UserDB(conn);
System.out.println("表的信息总数="+ud.count());
List li = ud.allUser();
Iterator it = li.iterator();
System.out.println("显示表中的数据");
while(it.hasNext()){
User ur = (User) it.next();
System.out.println("----------------------");
System.out.println("id="+ur.getId());
System.out.println("name="+ur.getUsername());
System.out.println("pasd="+ur.getPassword());
}
显示数据总数的方法
public int count() throws Exception {
int count = 0;
String countSql = "SELECT COUNT(*) from tbl_user";
try {
//Statement stmt = conn.createStatement();
ps = conn.prepareStatement(countSql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
count = rs.getInt(1);
}
BaseDB.closedb(conn);
} catch (Exception e) {
e.printStackTrace();
}
// finally {
// // BaseDB.closedb(conn);
// try {
// if (conn != null)
// conn.close();
// } catch (Exception ea) {
// ea.printStackTrace();
// }
// }
return count;
}
显示数据的方法
public Vector allUser() throws Exception {
Vector allUser = new Vector();
String selectSql = "select id,username,password from tbl_user";
try {
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(selectSql);
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
allUser.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// BaseDB.closedb(conn);
// try {
// if (conn != null)
// conn.close();
// } catch (Exception ea) {
// ea.printStackTrace();
// }
}
return allUser;
}
--
public UserDB(Connection conn) {
this.conn = conn;
}
通过构造函数得到数据库连接。。
问题:为什么在显示为什么不让我关闭数据库连接啊。
问题点数:100、回复次数:6Top
1 楼kuazhang123()回复于 2006-03-04 09:34:59 得分 0
请问路过的高人,我的代码是不是有问题啊??郁闷。。Top
2 楼kuazhang123()回复于 2006-03-04 09:43:32 得分 0
我是新手,我想在这个测试类中既要得到数据,又要显示数据的总数,为什么把两个方法中的finally都屏蔽就可以正常显示,不屏蔽就不可以啊。如果用完数据库连接不关闭的话,那么不就不合理了吗?请问我该如何修改。。Top
3 楼lydvqq(碧水情缘♀黑哥)回复于 2006-03-04 09:59:56 得分 0
请看你的BaseDB.closedb是怎么写的Top
4 楼shazi_pig(傻子)回复于 2006-03-04 10:04:59 得分 0
BaseDB.closedb(conn);
} catch (Exception e) {
e.printStackTrace();
}
// finally {
// // BaseDB.closedb(conn);
重复的关闭了.而且代码的写法我不太喜欢,在我们的外面定义了conn,这就表示我们在外面必需关闭.同时conn传给了类的内部,作为成员,那么又必需关闭.我们可以把conn作为参数给方法就可以了.没有必要作为属性.做为了属性,我们在前面的方法关闭后,后门的还必需重新得到联接,要不conn为空了.Top
5 楼lydvqq(碧水情缘♀黑哥)回复于 2006-03-04 10:09:41 得分 0
同意楼上的说法.你把con传给BaseDB了.就完全交给BaseDB去处理.说不定BaseDB是个连接池.根本就不用关闭.Top
6 楼wenm_owen(星星)回复于 2006-03-04 12:34:16 得分 0
你要定义为全局的才可以嘛Top




