jdbc里connect的close()的问题

开拓者Amadues 2015-06-20 01:51:38
Connection lo_conn;
lo_conn=xxx;

假如直接lo_conn.close();,提示未对异常作处理。
写在prestatement的try里就可以。

这里有一些不理解,为什么我开了一个连接后,不能直接关闭?
另外顺便问下,在关闭数据库连接的时候,应该注意些什么?什么时候应该注意要关闭?
...全文
1333 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
开拓者Amadues 2015-06-23
  • 打赏
  • 举报
回复
引用 5 楼 finemi 的回复:
[quote=引用 4 楼 Raffin 的回复:] 另外close掉之后是不是数据库就正式提交了的,没有回滚的机会了?如果我希望两笔数据库操作一起提交(但是代码逻辑部分不在一起),应该怎么写代码比较好?
jdbc默认自动提交的,如果你关闭了自动提交(开启事务),则必须在close之前显式的commit或者rollback。至于关闭该次连接后还能不能处理没有正确提交或回滚的事务,至少从jdbc的机制上来说是不行的。 你的意思是想做业务级别的长事务吧,可以参考hibernate的长事务实现方式,纯jdbc的方式做长事务我也没尝试过。[/quote] 是的,我自己就是做业务级别的开发的,一个方法里流程可以很长,各种不同界面间的切换,涉及到多个数据库操作,但只能提交一次,如果当中任何一步发生问题都要回滚。 按照JDBC这种用前打开数据库,用完提交关闭是不行的,有没有可能在程序刚运行时就打开,然后一直到最后再关闭?你觉得可行不?
开拓者Amadues 2015-06-22
  • 打赏
  • 举报
回复
另外close掉之后是不是数据库就正式提交了的,没有回滚的机会了?如果我希望两笔数据库操作一起提交(但是代码逻辑部分不在一起),应该怎么写代码比较好?
开拓者Amadues 2015-06-22
  • 打赏
  • 举报
回复
引用 2 楼 finemi的回复:
检查异常(checked exception)和非检查异常(unchecked exception)的问题而已。 java异常分为这两种,后者全部是RuntimeException的直接或间接子类,比如NullPointerException 前者是非RuntimeException子类中的其他所有异常类,比如SQLException,FileNotFoundExcpetion。 对于检查异常,必须使用try-catch捕获或者显式throws声明。 至于数据库连接,用完就关,使用finally保证关闭连接语句被执行到。 要注意的就是conn.close()之前判断一下conn是否为空,因为当发异常未获得连接时conn可能会null。 try{ if(conn!=null){ conn.close(); } }catch(SQLException ex){ //... }
谢谢,那我把close写在prestatment的try也能通过编译和正常执行,是不是不大好?应该单独写close的try?
finemi 2015-06-22
  • 打赏
  • 举报
回复
检查异常(checked exception)和非检查异常(unchecked exception)的问题而已。 java异常分为这两种,后者全部是RuntimeException的直接或间接子类,比如NullPointerException 前者是非RuntimeException子类中的其他所有异常类,比如SQLException,FileNotFoundExcpetion。 对于检查异常,必须使用try-catch捕获或者显式throws声明。 至于数据库连接,用完就关,使用finally保证关闭连接语句被执行到。 要注意的就是conn.close()之前判断一下conn是否为空,因为当发异常未获得连接时conn可能会null。 try{ if(conn!=null){ conn.close(); } }catch(SQLException ex){ //... }
finemi 2015-06-22
  • 打赏
  • 举报
回复
引用 3 楼 Raffin 的回复:
谢谢,那我把close写在prestatment的try也能通过编译和正常执行,是不是不大好?应该单独写close的try?
没有好或者不好,有些书或者人都会建议不要使用过于庞大的try-catch,而应该让异常捕获更细致,这个看自己的习惯就好,如果你需要精确的知道这几句SQL执行代码的异常发生处,就分开,不需要就写一起、实际上他们都是SQLException这个异常
finemi 2015-06-22
  • 打赏
  • 举报
回复
引用 4 楼 Raffin 的回复:
另外close掉之后是不是数据库就正式提交了的,没有回滚的机会了?如果我希望两笔数据库操作一起提交(但是代码逻辑部分不在一起),应该怎么写代码比较好?
jdbc默认自动提交的,如果你关闭了自动提交(开启事务),则必须在close之前显式的commit或者rollback。至于关闭该次连接后还能不能处理没有正确提交或回滚的事务,至少从jdbc的机制上来说是不行的。 你的意思是想做业务级别的长事务吧,可以参考hibernate的长事务实现方式,纯jdbc的方式做长事务我也没尝试过。
日知己所无 2015-06-20
  • 打赏
  • 举报
回复
"提示未对异常作处理"是IDE比如eclipse帮你提示一下而已,用命令行javac应该能编译过去

67,541

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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