java操作数据库挂死_如何在Java程序中处理数据库超时与死?
什么是数据库锁定与死锁
锁定(Locking)发生在当一个事务获得对某一资源的“锁”时,这时,其他的事务就不能更改这个资源了,这种机制的存在是为了保证数据一致性;在设计与数据库交互的程序时,必须处理锁与资源不可用的情况。锁定是个比较复杂的概念,仔细说起来可能又需要一大篇,所以在本文中,只把锁定看作是一个临时事件,这意味着如果一个资源被锁定,它总会在以后某个时间被释放。
而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去。
如何避免锁
我们可利用事务型数据库中的隔离级别机制来避免锁的创建,正确地使用隔离级别可使程序处理更多的并发事件(如允许多个用户访问数据),还能预防像丢失修改(Lost Update)、读“脏”数据(Dirty Read)、不可重复读(Nonrepeatable Read)及“虚”(Phantom)等问题。
表1:DB2的隔离级别与其对应的问题现象
在只读模式中,就可以防止锁定发生,而不用那些未提交只读隔离级别的含糊语句。一条SQL语句当使用了下列命令之一时,就应该考虑只读模式了:
1、JOIN
2、SELECT DISTINCT
3、GROUP BY
4、ORDER BY
5、UNION
6、UNION ALL
7、SELECT
8、FOR FETCH ONLY (FOR READ ONLY)
9、SELECT FROM
如果包含上述任一命令,可以说你的SQL语句有歧义性,因此,锁可能就是造成其中资源问题的源头。
另外,以下是一些可降低锁数目的建议:
1、 将CURRENTDATA设为NO。这条命令告诉DB2模糊光标为只读。
2、 在适当的时候,尽可能使用User Uncommitted Read(用户未提交的读)。
3、 尽可能关闭所有光标。
4、 有一个正确的提交策略。确保程序不再使用资源时就立即释放它。
如何处理死锁与超时
在程序中使用重试逻辑,可处理以下三种SQL错误代码:
1、 904:返回这个代码表示一条SQL语句是因为已达到资源限度而结束的。程序中可提交或回滚更改,并执行重试逻辑。
2、 911:程序收到这个SQL代码,表示因为没有为锁列表分配足够的内存,现在已达到数据库的最大锁数目。
3、 912:程序收到这个SQL代码,表示死锁或超时,依照904中的方法来解决。
全部
java操作数据库挂死_如何在Java程序中处理数据库超时与死?相关推荐
- jsp在mysql中删除数据_如何在jsp页面中删除数据库中的数据
如何在jsp页面中删除数据库中的数据 各位大虾! 我想在jsp页面上写一个按钮功能,从而动态的删除数据库中的一行数据. 不知道怎么实现 这是我写的一段代码 数据库是MySql UserBean p3= ...
- java 合并两个列表_如何在Java中合并两个列表?
java 合并两个列表 Merging two lists in Java is often a useful operation. These lists can be ArrayLists or ...
- java pdf添加透明水印_如何在PDF文件中添加透明水印
原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...
- java 查找链表中间元素_如何在Java中一次性查找Java中链表的中间元素
如何在一次传递中找到LinkedList的中间元素?这是一个 Java 和非Java程序员面试时经常被问到的编程问题.这个问题类似于检查回文或计算阶乘,有时也会要求编写代码.为了回答这个问题,候选人必 ...
- java字符串字符排列组合_如何在Java中查找字符串的所有排列
java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...
- java类添加单元测试代码_如何在java中单元测试时跳过一段代码
如果问题确实是: 如何在Java 然后我给出的答案同意单元测试时,我跳过一段代码.依赖注入,嘲讽框架绝对是真正的单元测试的正确途径. 但是,如果问题是: 使用JUnit(或其他单元测试框架) 然后我想 ...
- java如何使用水晶报表_在Windows应用程序中使用水晶报表的方法
在Windows应用程序中使用水晶报表的方法 举例说明: (1)创建一个Windows应用程序,选择[解决方案资源管理器] à[添加新项]à[crystal report],输入报表名Reportl. ...
- plsql怎么批量添加数据_如何在PLSQL程序中处理批量数据
如何在 plsql 程序处理批量数据 . Author: Wenxing.zhong Date: 2008-05-29 在 ebao 的应用程序中,有很多的业务需要通过 pl/sql 程序来处理,每天 ...
- 在java读字符串入文件_如何在java中将文件读入字符串?
我已经将文件读入String. 该文件包含各种名称,每行一个名称. 现在的问题是我想在String数组中使用这些名称. 为此我写了以下代码: String [] names = fileString. ...
最新文章
- Google的面试题长啥样?看完被吊打!
- 好书推介---Windows Server 2003企业部署原理与实践
- 【转】在.Net中关于AOP的实现
- 前端学习(2245)vue值造轮子之需求设计
- ActiveX控件的另类免费签名法
- 【OpenCV 例程200篇】45. 图像的灰度直方图
- springboot-web进阶(三)——统一异常处理
- java检测栈溢出_java运行方法栈溢出
- Java中的break Label 和continue Label
- 每一个都能笑抽的39个奇葩代码注释
- Atitit.收银系统模块架构attilax 总结
- git 找到冲突_git怎么知道哪个文件冲突
- 软件开发入门【3分钟课程】
- The DELETE statement conflicted with the REFERENCE constraint
- 改变文字颜色html,html怎么改变字体大小和颜色
- 男人说这几句话代表他不想娶你
- 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕!
- 如何做好职业规划(乾卦)
- 网页卡顿是网站服务器,想解决网站卡顿情况就用这几种诀窍,进来看看
- 网络游戏外挂编写原理
热门文章
- 量化金融第一步获取市场数据 (Python Tushare)
- go 求两个时间相差的天数
- 更改idea控制台输出字体
- Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.
- java小编程----反转字符串中的每一个单词
- leetcode 398. Random Pick Index | 398. 随机数索引(Java)
- 数据结构:试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来
- scala教程之:可见性规则
- strtus2改成springboot_springboot+struts2打成jar包运行
- 整车物流系统源代码_整车物流AGV智能搬运机器人一阶段实地测试顺利完成