//隔离级别
@Test
public void testTransactionSelect() throws Exception {
Connection conn = JDBCUtils.getConnection();
// //设置数据库的隔离级别
// conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
//获取当前连接的隔离级别
System.out.println(conn.getTransactionIsolation());
//取消自动提交数据
conn.setAutoCommit(false);
String sql = "select id,user,password,balance from user where user = ?";
User user = getInstance(conn, User.class, sql, "admin");
System.out.println(user);
}
@Test
public void testTransactionUpdate() throws Exception {
Connection conn = JDBCUtils.getConnection();
//取消自动提交数据
conn.setAutoCommit(false);
String sql = "update user set balance = ? where user = ? ";
int i = update(conn, sql, 4000,"admin");
Thread.sleep(15000);
System.out.println("修改结束");
}
//通用的查询操作,返回数据表中一条记录(version 2.0 考虑上事务)
public <T> T getInstance(Connection conn,Class<T> clazz,String sql, Object... args) {
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 预编译sql语句
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
// 执行
rs = ps.executeQuery();
// 获取结果集的原数据
ResultSetMetaData rsmd = rs.getMetaData();
// 通过ResultSetMetaData获取结果集中的列数
int columnCount = rsmd.getColumnCount();
if (rs.next()) {
T t = clazz.newInstance();
// 处理结果集一行数据的每一列
for (int i = 0; i < columnCount; i++) {
// 获取列值
Object columnvalue = rs.getObject(i + 1);
// 获取每个列的列名
String columnLabel = rsmd.getColumnLabel(i + 1);
// 给t对象指定的某个属性赋值为value:通过反射
Field field = clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t, columnvalue);
}
return t;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtils.closeResource(null, ps, rs);
}
return null;
}
//通用的增删改操作---version 2.0版本(考虑事务)
public static int update(Connection conn,String sql,Object ...args) {//sql中占位符的个数与可变形参的长度相同
PreparedStatement ps=null;
try {
//1.预编译sql语句,返回PreparedStatement一个实例
ps = conn.prepareStatement(sql);
//2.填充占位符
for(int i=0;i<args.length;i++) {
ps.setObject(i+1, args[i]);//小心参数声明错误
}
//3.执行sql
return ps.executeUpdate();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//4.资源的关闭
JDBCUtils.closeResource(null, ps);
}
return 0;
}
事务的ACID属性
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...