JDBC

JDBC

  • java数据库连接技术

接口

  • Connection:连接对象
  • Statement:执行命令对象,把sql语句发送到数据库执行
  • Resultset:结果集接口,必须要保持与数据库的连接
public static void main(String[] args) {   
Connection connection = null;    
PreparedStatement preparedStatement = null;   
 ResultSet resultSet = null;    
 try {    
  //加载数据库驱动     
  Class.forName("com.mysql.jdbc.Driver");    
   //通过驱动管理类获取数据库链接     
   connection =  DriverManager .getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root"); 
    //定义 sql 语句 ?表示占位符   
    String sql = "select * from user where username = ?";
    //获取预处理 
    statement     preparedStatement = connection.prepareStatement(sql); 
    //设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的 参数值     
    preparedStatement.setString(1, "王五");   
     //向数据库发出 sql 执行查询,查询出结果集    
      resultSet =  preparedStatement.executeQuery(); 
    //遍历查询结果集     
    while(resultSet.next()){            
      System.out.println(resultSet.getString("id")+"   "+resultSet.getString("username"));    
       }   
        } catch (Exception e) 
        {     e.printStackTrace(); 
   }finally{   
    //释放资源    
     if(resultSet!=null){      
        try {       
        resultSet.close(); 
     }  catch (SQLException e) {      
        e.printStackTrace();      }     
     }    
      if(preparedStatement!=null){     
          try {       
                 preparedStatement.close(); 
                      } catch (SQLException e) {       
                       e.printStackTrace();      }     
                       }     
                       if(connection!=null){
                             try {       connection.close();     
                              } catch (SQLException e) {      
                               // TODO Auto-generated catch block      
                                e.printStackTrace();      }     }    }   } 
上边使用 jdbc 的原始方法(未经封装)实现了查询数据库表记录的操作

事务

  • 基本概念: 事务是指一组最小逻辑操作单元,里面有多个操作组成。组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。

事务ACID特性

原子性(Atomicity)

  • 原子性是指事务是一个不可分割的工作单位,食物中的操作要么都发生,要么都不发生。

一致性(Consistency)

  • 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

隔离性(Isolation)

  • 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务要相互隔离。

持久性(Durability)

  • 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务的隔离级别

不考虑隔离性会出现的读问题★★
脏读:在一个事务中读取到另一个事务没有提交的数据

	不可重复读:在一个事务中,两次查询的结果不一致(针对的update操作)  不可重复读,是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。
	虚读(幻读):在一个事务中,两次查询的结果不一致(针对的insert操作) 无法演示出来,MySQL已经默认避免了

	MySQL 有四种隔离级别

通过设置数据库的隔离级别来避免上面的问题(理解)
	read uncommitted  	读未提交	上面的三个问题都会出现
	read committed  	读已提交	可以避免脏读的发生 Oracle 默认界别
	repeatable read		可重复读	可以避免脏读和不可重复读的发生  MySQL 默认级别
	serializable		串行化		可以避免所有的问题
了解
	演示脏读的发生:
		将数据库的隔离级别设置成 读未提交
			set session transaction isolation level read uncommitted;
		查看数据库的隔离级别
			select @@tx_isolation;
		演示:
		打开两个窗口进行演示:给两个窗口设置好同的隔离级别
		开启事务  start transaction;
		修改数据:update bank set money=1500 where username='lisi';
		让另一个窗口开启事务 查询数据 他查到了  就是脏读
		我这边窗口 一回滚(rollback),钱又没过去
	避免脏读的发生,将隔离级别设置成  读已提交
		set session transaction isolation level read committed;
		不可避免不可重复读的发生.
	
	避免不可重复读的发生 经隔离级别设置成 可重复读
		set session transaction isolation level  repeatable read;
		
	演示串行化 可以避免所有的问题
		set session transaction isolation level  serializable;  我这边的事务不提交,那边的事务无法执行
		锁表的操作. 
	
四种隔离级别的效率
	read uncommitted>read committed>repeatable read>serializable
四种隔离级别的安全性
	read uncommitted<read committed<repeatable read<serializable
	
开发中绝对不允许脏读发生.
	mysql中默认级别:repeatable read
	oracle中默认级别:read committed

java中控制隔离级别:(了解)
	Connection的api
		void setTransactionIsolation(int level) 
			level是常量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值