讨论一下类设计中数据库链接的使用问题!

Tonglu 2005-08-31 11:05:33
大家在程序的设计中一般什么情况下用传入的链接,什么情况直接去链接池里取空闲的链接?
有没有什么心得?或者有什么麻烦?
欢迎大家来讨论。
...全文
324 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tonglu 2005-09-04
  • 打赏
  • 举报
回复
谢谢楼上各位的帮助,结帖先!
Tonglu 2005-09-04
  • 打赏
  • 举报
回复
搞定了,也看了hibernate中的事务处理(幸好找一位仁兄flysnow的例子,看的非常明白,在此特意感谢),如果以后做的话看来真要用hibernate了,毕竟接触的项目在数据库关系上还是比较复杂地。

这次偶偷懒了,把工程中和服务器的SDK换成了J2EE的SDK就全搞定了也不用下什么JTA包了,爽呀。
mxlmwl 2005-09-04
  • 打赏
  • 举报
回复
呵呵,要是还搞不定,就给俺发消息吧,偶不经常看贴的。:)
mxlmwl 2005-09-04
  • 打赏
  • 举报
回复
建议你看看hibernate的事务处理机制
http://dev.csdn.net/article/56/56778.shtm

还有,不是推荐你用apache的commons-dbutils了吗,参考一下它的实现也可以啊,或者直接引用这个包就可以了,把相关部分交给它去做就可以了,你不需要考虑具体的技术实际细节。

你既然采用JTA来进行事务处理,那么jta.jar这个包你引用了么?
Tonglu 2005-09-03
  • 打赏
  • 举报
回复
楼上“wanchao2001(如果可以重来,我还是选择程序员)”兄弟,建议以后回帖时先看帖。这样回答问题即自己宝贵的浪费了时间又赚不到分
Tonglu 2005-09-03
  • 打赏
  • 举报
回复
解释:是不让 import javax.transaction.UserTransaction 这个类,是一个interface 类不知道为什么
具体操作如下:
1、从sun下了个包
2、把打了个javax.jar包放到WEB-INF\lib里面,并在工程里引用这个JAR包
3、打开自己的文件输入 import javax.transaction.UserTransaction;
结果第三步出错,“can not be resolved”,偶晕之
Tonglu 2005-09-03
  • 打赏
  • 举报
回复
楼上 星哥3 帮忙搞定呀,重分酬谢呀
Tonglu 2005-09-03
  • 打赏
  • 举报
回复
:< 又遇到问题了,从sun上下了JTA,打了个JAR包放到工程里面,结果不让 import 从baidu上bai从google上go都没有查到相应的解决方法,为这个问题我都快死了,就为了设计一个合理的程序,楼上帮忙解决一下呀
cyicecream 2005-09-03
  • 打赏
  • 举报
回复
呵呵,事务的控制本来是一直如此,只不过有些程序确实写的不正规,导致后续的人进入误区。
一言难尽,楼主的学习态度不错
Roy_Sashulin 2005-09-03
  • 打赏
  • 举报
回复
我深得你们都没有讲到重点
wanchao2001 2005-09-02
  • 打赏
  • 举报
回复
我也有个事务的方法,给大家看看
//执行事务处理语句
public boolean runTrans(PreparedStatement [] pst){
boolean b=false;
try{
openConnection();
con.setAutoCommit(false);
for(int i=0;i<pst.length;i++){
pst[i].executeUpdate();
}
con.commit();
b=true;
}
catch(Exception e){
try{
con.rollback();
e.printStackTrace();
}
catch(Exception ex){
ex.printStackTrace();
}
}
finally{
try{
for(int i=0;i<pst.length;i++){
pst[i].close();
}
closeConnection();
}
catch(SQLException sqle){
sqle.printStackTrace();
}
}
return b;
}
mingr6370 2005-09-02
  • 打赏
  • 举报
回复
mark
Tonglu 2005-09-02
  • 打赏
  • 举报
回复
解释:果然带星的就是不一样,楼上 两位星哥其实我感觉所说的方法是一样的,不知道星哥们是什么意见,且看下面分解

代码先:
public int delete(int sID) {
 DataBaseConnection dbc = null;
 dbc = new DataBaseConnection();
 dbc.getConnection();
 UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
 try {
  transaction.begin(); //开始JTA事务
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  transaction.commit(); //提交JTA事务
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  try {
   transaction.rollback();//JTA事务回滚
  }
  catch (Exception ex) {
   //JTA事务回滚出错处理
   ex.printStackTrace();
  }
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}
这应该就是"星哥1"所说的transaction ,其实也应该是 "星哥2" 所说的"统一加事务"了
现在发现带星的果然不一样 ^_^
详见:http://dev.csdn.net/article/43/43272.shtm
这种方法的确能解决我的问题,小弟谢楼上客位先,再看两天如果楼下没有反对意见就结帖!
Tonglu 2005-09-02
  • 打赏
  • 举报
回复
to:mxlmwl(飞星)
嫩说的“统一加事务”很吸引人,我得先查点资料,再来参与讨论,楼上 星哥2 (晕,这年头叫星的人可真多呀:>只能加个2区分了),如果有什么资料可提供参考的话最好能共享一下,分不够可以另开帖加分,其实我觉得传来传去也不太合适。
mxlmwl 2005-09-02
  • 打赏
  • 举报
回复
绝对不能传连接,这么传来传去的也不好管理。

只要用一个统一的类就管理连接可以了,如果不用ORM的话,也就是不用hibernate之类的东西了,只用jdbc来实现,你可以参考apache的dbutil包。统一加事务,否则你的程序就是典型的新手上路的程序,实际运行根本不堪一击。
Tonglu 2005-09-01
  • 打赏
  • 举报
回复
楼上的意思是不是指一个业务开始时调用一个Tansaction对象,然后在该业务的执行过程中始终使用一个连接而通过Tansaction在各个方法中进行传递?最后业务完成后统一执行数据库操作?
raul_177 2005-09-01
  • 打赏
  • 举报
回复
学习,前几天写代码的时候也遇到这个问题。
loveyousomuch 2005-09-01
  • 打赏
  • 举报
回复
hibernate
北极猩猩 2005-09-01
  • 打赏
  • 举报
回复
没错,这样的话数据库相关操作可以集中在Transaction类中进行,而不会分散在程序的各处。
Tonglu 2005-08-31
  • 打赏
  • 举报
回复
解释:
1、方法a和方法b
2、方法a要调用方法b

现在方法b也可以直接取取链接池里的资源也可以用方法a中已经取出的链接
像这种情况对于方法b来说直接用方法a的接力链接应该要好一点,
但是如果把所有的类似于b的方法都用他的上一组传入的链接不知道合不合理?
我看大多数都是在b里面直接再取一个链接
像这种情况的话如果在a里面有多步操作需要回滚时b里因为有新的链接所以会造成阻塞
加载更多回复(6)

62,615

社区成员

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

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