网站建设运营策划方案百度一下免费下载安装
文章目录
- 一、事务的ACID属性
- 二、四种隔离级别
- 三、Java设置数据库隔离级别
一、事务的ACID属性
-
原子性atomicity
原子性是事务一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 -
一致性consistency
事务必须使数据库从一个一致性状态变换到另外一个一致性状态 -
隔离性 isolation
事务的隔离性指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 -
持久性 durability
持久性指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
二、四种隔离级别
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
- 查看当前的隔离级别
select @@transaction_isolation
select @@global.transaction_isolation
- 设置当前mysql连接的隔离级别
set transaction isolation level read committed;
- 设置数据库系统全局的隔离级别
set transaction isolation level read committed;
三、Java设置数据库隔离级别
@Testpublic void testTransactionSelect() throws Exception {Connection conn=JDBCUtils.getConnection();// System.out.println(conn.getTransactionIsolation());String sql="select user,password,balance from user_table where user=?";ArrayList<User> users = getInstance(conn, User.class, sql, "CC");for(User u:users){System.out.println(u);}}@Testpublic void testTransactionUpdate() throws Exception {Connection conn=JDBCUtils.getConnection();conn.setAutoCommit(false);//设置数据库隔离级别conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);String sql="update user_table set balance=? where user=?";update(conn,sql,4000,"CC");System.out.println("修改结束");}//考虑事务的查询 version2.0public <T> ArrayList<T> getInstance(Connection conn,Class<T> cl, String sql, Object...args) throws Exception{//Connection conn= null;PreparedStatement ps = null;ResultSet resultSet = null;try {conn = JDBCUtils.getConnection();conn.setAutoCommit(false);ps = conn.prepareStatement(sql);for(int i=0;i<args.length;i++){ps.setObject(i+1,args[i]);}resultSet = ps.executeQuery();ResultSetMetaData metaData = resultSet.getMetaData();int columnCount=metaData.getColumnCount();//创建集合对象ArrayList<T> list=new ArrayList<>();while (resultSet.next()){//创建一个对象,属于cl类T t = cl.newInstance();for(int i=0;i<columnCount;i++) {Object columnValue = resultSet.getObject(i + 1);String columnLabel = metaData.getColumnLabel(i + 1);Field field = cl.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columnValue);}list.add(t);}return list;} catch (Exception e) {e.printStackTrace();} finally {
// conn.close();
// ps.close();
// resultSet.close();JDBCUtils.closeResource(null,ps,resultSet);}return null;}