(1)
事务的概念以及commit(),rollback()
数据库操作中,
一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。我们通过提交commit()或是回滚rollback()来结束事务的操作。
(2)
从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。
1. DDL(Data Definition Language)
数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;
CREATE---创建表
ALTER---修改表
DROP---删除表
2. DML(Data Manipulation Language)
数据操纵语言,SQL中处理数据等操作统称为数据操纵语言 ;
INSERT---数据的插入
DELETE---数据的删除
UPDATE---数据的修改
SELECT---数据的查询
3. DCL(Data Control Language)
数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等;
GRANT---授权。
ROLLBACK---回滚
COMMIT---提交。
提交数据有三种类型:显式提交、隐式提交及自动提交。
1) 显式提交
用COMMIT命令直接完成的提交为显式提交。
2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。
所有的 DML 语句都是要显式提交的,也就是说要在执行完DML语句之后,执行 COMMIT 。而
其他的诸如 DDL 语句的,都是隐式提交的。也就是说,在运行那些非 DML 语句后,数据库已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。
(3)
现实的应用:
在一个数据库操作的JAVA类中,如:DBDO.JAVA,一般会包括以下几种方法:
1)
获取具体数据库的连接;
2)
查询,插入,更新,删除等方法;
3)
事务的相应方法,如:
setAutoCommit(),commit(),rollback();getAutoCommit()方法.
这些方法,主要是对上面获取的connection对象的事务属性进行操作.
具体如下:
第一步:
假如系统获取的connection如下:
对应上面的1)
con=DriverManager.getConnection(url,username,password);
对应上面的2) :略
对应上面的3):
则这些事务方法的定义如下:
public void setAutoCommit(boolean auto){
try{
con.setAutoCommit(auto);
}
catch(SQLException sql){
logger.error(sql.getMessage());
sql.printStackTrace();
}
}
public void commit(){
try{
con.commit();
}
catch(SQLException sql){
logger.error(sql.getMessage());
sql.printStackTrace();
}
}
public void rollback(){
try{
con.rollback();
}
catch(SQLException sql){
logger.error(sql.getMessage());
sql.printStackTrace();
}
}
public boolean getAutoCommit(){
try{
return con.getAutoCommit();
}
catch(SQLException sql){
logger.error(sql.getMessage());
return false;
}
}
第二步:
现实应用时,如下:
若上面的数据库操作类的一个实例是dbOperator,则:
dbOperator.setAutoCommit(false); -->先设置不自动提交
dbOperator.jInsert(Insertquery); -->进行DB操作
-->根据所有SQL的操作结果,判断是用commit()还是rollback()
dbOperator.commit();
//dbOperator.rollback();
说明:1.当未提交时,插入,更新,删除的数据只可以在只次连接中看到(确实存在).重新连接mysql查看,则查看不到.2.在进行数据库操作时,常要用try..catch.若引入事务,则在catch中,要执行: con.rollback();-->才有实际意义.