1、批处理html
概念:将向数据库表一次性插入多条记录,而不是一条一条插入的方式,这样能够提供效率。java
实现方法:sql
方法摘要数据库 |
|
|
|
|
|
|
|
方法摘要 |
|
|
|
上面是在MySQL数据库中管理事务,在实际开发中,更可能是在Java代码中管理MySQL的事务。也就是说,是利用JDBC来管理MySQL事务。JDBC提供以下三种方法来管理MySQL事务:
方法摘要 |
|
|
|
|
|
|
|
MySQL事务的回滚操做,默认是回滚到开启事务以前的数据状态。但在实际开发中,常常须要数据回滚到某个指定的执行状态。MySQL提供了回滚点(Savepoint)的概念,回滚点相似于游戏中的存档。也就是说,设置回滚点后,能够将事务回滚到指定某个回滚点的数据状态。下表是回滚点提供的相关方法:
方法摘要 |
|
|
|
|
|
|
|
|
在平常MySQL的事务管理中,若是多线程开启各自事务操做,而数据库不负责隔离操做时,常常会出现如下三种常见问题:
脏读这种操做在实际是很是危险的。例如若是B给A转帐10000元钱,B开启一个事务用于转帐10000元,实际操做后并未提交事务。若是此时A查询本身的帐户会发现已经收到B转帐的10000元,当A作出实际动做(发货)后,B再将事务回滚,最终致使A损失10000元钱。
例如若是A第一次查询帐户为20000元钱后,B向A转帐10000元钱,A在第二次查询帐户为30000元钱。先后两次查询结果不一致,A可能不知道多出的10000元钱是来自哪里。
不可重复读与脏读的区别在于脏读读取的是前一事务未提交的数据,而不可重复读读取的是前一事务提交的数据。
例如酒店统计房间预订数量时,第一次统计为101间被预订,A在酒店第一次统计后,预订了110房间,酒店在A成功预订110房间后第二次统计,结果为102间被预订。致使酒店先后统计数量不一致。
幻读与不可重复读的区别在于不可重复读读取的是另外一个事务的更新操做,而幻读读取的是另外一个事务的插入操做(MySQL数据库没法测试到幻读问题)。
针对上述的三个问题,MySQL数据库提供了四大隔离级别来解决,这四大隔离级别分别为:
这个隔离级别可避免脏读、不可重复读、虚读状况的发生。
这个隔离级别可避免脏读、不可重复读状况的发生。
这个隔离级别可避免脏读状况发生。
这个隔离级别最低级别,以上状况均没法保证。
SERIALIZABLE –> REPEATABLE READ -> READ COMMITTED -> READ UNCOMMITTED
READ UNCOMMITTED -> READ COMMITTED -> REPEATABLE READ -> SERIALIZABLE
链接池能够极大的改善用户的 Java 应用程序的性能,同时减小所有资源的使用。链接池主要的优势有:
DBCP(DataBase connection pool),数据库链接池。是 apache 上的一个 java 链接池项目。单独使用dbcp须要3个包:commons-dbcp.jar,commons-pool.jar,commons-collections.jar因为创建数据库链接是一个很是耗时耗资源的行为,因此经过链接池预先同数据库创建一些链接,放在内存中,应用程序须要创建数据库链接时直接到链接池中申请一个就行,用完后再放回去。
二、C3P0
C3P0是一个开源的JDBC链接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
C3P0与DBCP的区别:
dbcp没有自动回收空闲链接的功能。
c3p0有自动回收空闲链接功能。
三、JNDI
NDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,经过不一样的访问提供者接口JNDI API的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序能够和这些命名服务和目录服务之间进行交互。集群JNDI实现了高可靠性JNDI,经过服务器的集群,保证了JNDI的负载平衡和错误恢复。在全局共享的方式下,集群中的一个应用服务器保证本地JNDI树的独立性,并拥有全局的JNDI树。每一个应用服务器在把部署的服务对象绑定到本身本地的JNDI树的同时,还绑定到一个共享的全局JNDI树,实现全局JNDI和自身JNDI的联系。
JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各类命名和目录服务的通用、统一的接口,相似JDBC都是构建在抽象层上。
JNDI(Java Naming and Directory Interface)是容许将一个Java对象绑定到一个JNDI容器(tomcat)中 ,而且为对象指定一个名称,经过javax.naming 包 Context 对JNDI 容器中绑定的对象进行查找,经过指定名称找到绑定Java对象。