`

1、JDBC---DriverManager/Transaction

 
阅读更多
1、Class.forName("com.mysql.jdbc.Driver");  
    这句话执行了什么?如不看Driver的源码,则必然是创建了一个Class实例,可以调用这个实例的静态方法和全局变量。
public class Driver extends NonRegisteringDriver implements java.sql.Driver
{
    static
  {
    try
    {
      DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
      throw new RuntimeException("Can't register driver!");
    }
  }

   这段源码中,static执行了创建对象的动作,即在类初始化阶段就创建了一个实例,不是单例的。

2、Connection conn= DriverManager.getConnection(url,user,password);
  获取与数据库的连接,这两步都有可能异常,一个是找不到Driver异常,一个是连接异常,


3、创建Statement 实例
   要执行SQL语句,必须创建Statement实例;
   Statement stmt = con.createStatement() ;  
   PreparedStatement pstmt = con.prepareStatement(sql) ;
  
          prep.setString(1, "Gandhi");   
          prep.setString(2, "politics");   
          prep.addBatch();   
          prep.setString(1, "Turing");   
          prep.setString(2, "computers");

          prep.executeBatch();   


4、执行SQL语句
     Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate  和execute
     1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。  
     2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等  
     3、boolean  execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

5、ResultSet结果集
     while(rs.next()){  
         String name = rs.getString("name") ;  
         String pass = rs.getString(1) ; // 此方法比较高效  
     }  
    (列是从左到右编号的,并且从列1开始)

6、释放JDBC对象
   操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反: 
   rs.close() ;
   stmt.close() ;  
   conn.close() ;


   正常的情况下,操作应该顺利进行,与操作相关的所有数据库信息也成功地更新;但是,如果在这一系列过程中任何一个环节出了差错,导致操作失败了,数据库中所有信息都必须保持操作前的状态不变。否则,数据库的信息将会一片混乱而不可预测。
   一个逻辑工作单元要称为事务,必须满足ACID(原子性,一致性,隔离性和持久性)

原子性
    整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性
   在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性
   隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。

持久性
   在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。



   事务的结束只能有两种形式:提交和回滚。操作完全成功则提交,产生永久性的修改;操作不完全成功则回滚,恢复到事务开始前的状态。它们将结束一个事务。

   首先我们要注意,在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回退。在提交过程中,
 
try{
	Class.forName("org.sqlite.JDBC");   
	conn = DriverManager.getConnection("jdbc:sqlite:myfisrt.db");
        stat = conn.createStatement();  
        //关闭jdbc自动事务        
        	conn.setAutoCommit(false);
        	int rs = stat.executeUpdate("insert into exceptionTest('数字','字符')values(null,'we');");
        	//执行成功,提交事务
        	conn.commit();
        	
        }catch (Exception e)
        {
        	e.printStackTrace();
        	System.out.println("回滚");
        	try {
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} 
        }

   jdbc默认提供了事务管理,所以就不用担心事务没提交;但是进行多表操作或者多语句操作时,要求多语句同时提交和回滚时,就必须取消自动提交改为手动提交或回滚。
try{
			Class.forName("org.sqlite.JDBC");   
		    conn = DriverManager.getConnection("jdbc:sqlite:myfisrt.db");
	        stat = conn.createStatement(); 
	        conn.setAutoCommit(false);
	        stat.executeUpdate("insert into exceptionTest('数字','字符')values(122,'we');");
	        stat.executeUpdate("insert into exceptionTest('数字','字符')values(null,'we');");
	        conn.commit();
        }catch (Exception e)
        { 
        	conn.rollback();
        	System.out.println("回滚");
        }finally
        {
        	stat.close();
        	conn.close();
        }
分享到:
评论

相关推荐

    iBatis-设置缓存模式-Java源码(下载)

    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="Account"> <typeAlias alias="Account" type="Account"/> ...

    jdbc基础和参考

    1.DriverManager(中的getConnection其实也是调用的Driver.connect方法) getConnection(url);//没有用户名密码 //将用户名密码存放在java.util.Properties对象中 getConnection(url,properties); get...

    Java数据库编程宝典1

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    MySQL5.1参考手册官方简体中文版

    12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE...

    Java数据库编程宝典2

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典4

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典3

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    MySQL 5.1参考手册

    1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000...

    mysql官方中文参考手册

    1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000...

    MYSQL中文手册

    言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 ...5.7.5. 访问控制, 阶段1:连接核实 ...13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法...

    MySQL 5.1参考手册中文版

    13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET...

    mysql5.1中文手册

    目录 <br>前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性...

Global site tag (gtag.js) - Google Analytics