奇怪为什么他不把连接写到构造函数中?

yuyu123 2003-09-24 03:41:19
下面是数据库Bean的一个片段,奇怪为什么他不把连接
con = DriverManager.getConnection(conStr);
写到构造函数中?




// 构造函数
public DBAccess()
{
try
{
Class.forName(DBDriver);

}
catch(Exception e)
{
System.out.println(e.toString());
}
}

// 执行查询操作 select
public ResultSet executeQuery(String sql)
{
try
{
con = DriverManager.getConnection(conStr);
Statement stmt = con.createStatement();
rs = stmt.executeQuery(sql);
}
catch(Exception e)
{
System.out.println(e.toString());
}

return rs;
}


...全文
71 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gboy2003 2003-09-24
  • 打赏
  • 举报
回复
up
Schlemiel 2003-09-24
  • 打赏
  • 举报
回复
ResultSet和Statement用不着手动close的。对这两种对象调用close方法将直接导致connection被关闭,它们只不过是提供一个简便的关闭途径而已。
如果——多么令人遗憾的“如果”——你坚持用JDBC,应该做一个Singleton来管理数据库连接,所有需要数据库连接的程序都从这里获取,用完之后再调用一下这个Singleton提供的close方法。这样,在最简单的情况下,你最多保持一条不关闭的数据库连接。而且,你还可以很轻松地在这个Singleton里实现一个连接池。
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
加个这方法对吗?

public void close()
{
if (rs!=null) rs.close();
if (stmt!=null) stmt.close();
if (conn!=null) conn.close();
}
zcjl 2003-09-24
  • 打赏
  • 举报
回复
楼主,态度不要那么火爆嘛
毕竟人家是来给你解答疑问的
不是来吵架的

顺便问一下,
stmt.close();
rs.close();
短开连接时,这些写不写?,系统会自动清除吗?
------------------------------------------------
这些都要自己关闭的
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
顺便问一下,
stmt.close();
rs.close();
短开连接时,这些写不写?,系统会自动清除吗?
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
顺便问一下,
stmt.close();
rs.close();
短开连接时,这些写不写?,系统会自动清除吗?
zez 2003-09-24
  • 打赏
  • 举报
回复
呵呵,你看的都是入门的书,只讲道理,有几个作者是真正的程序员? 有几个作者真正做过项目? 那种书误人子弟,特别对于 尽信书 的人:) ...

看书要会选书. effitive java programe ,gof的 design pattern ...

------------------------------------------------------
我们还年轻牛奶会有的奶牛也会有的
可天天在 csdn 混这些会有吗 ??
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
我看过所有的书上都是想我第一贴那样写的,难道作者就不知道写Finaly ??
zez 2003-09-24
  • 打赏
  • 举报
回复
k,你学过java没?
我哪句是胡扯你指出来我看看??

建立连接在方法里,方法结束就立刻把连接关了.一般当然就是在finaly里 ...
当然有好的办法,比如单例模式.怕说了你也不懂...

像你把连接写到构造函数,要知道java里没有所谓的析构函数,你用完了这个类,只能靠垃圾收集器来帮你回收资源.但垃圾收集器是根本不受控制的,很可能它永远也不给你回收... 你知道吗?

------------------------------------------------------
我们还年轻牛奶会有的奶牛也会有的
可天天在 csdn 混这些会有吗 ??
Schlemiel 2003-09-24
  • 打赏
  • 举报
回复
这谁写的代码?finally块到哪里去了?既然都已经写了这么难看的try...catch...,干吗不在finally里关闭连接?
建议在ctor里打开连接的人也同样低幼,你以为这是C++,还有个dtor等着你用啊?如果你想只打开一个连接,就建一个singleton来管理连接。
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
胡扯! 要是不把连接写到构造中。每查询一个就新建一个连接,又怎么关呢???
zez 2003-09-24
  • 打赏
  • 举报
回复
你把连接写到构造函数里,那你在哪把它关呢???
数据库连接是很宝贵的资源,你的类一创建就建立一个连接,而你直到类销毁的时候才让让jvm帮你销毁.很可能你不小心建立成千上万的类,而垃圾收集器可能永远也不给你销毁...
你就等着死机吧:)

------------------------------------------------------
我们还年轻牛奶会有的奶牛也会有的
可天天在 csdn 混这些会有吗 ??
yuyu123 2003-09-24
  • 打赏
  • 举报
回复
我觉得放在构造中有个最大的好处,打开一个连接就行了,不用每查询一个就要建立一个连接,那样的话数据库中的存多少进程啊,不信你用看看mysql 数据库中的进程数,真实可怕!!
cocoom 2003-09-24
  • 打赏
  • 举报
回复
构造函数的意义是帮助类构造具体的对象,在构造函数建立桥接驱动程序目的是为了构造CONNECTION对象,所以方在构造函数中能说的过去,当然你也可以不放在其中,方在方法中,程序由你写,是活的

81,115

社区成员

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

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