PreperdStatementUpdateTransactionTest简单测试
package JDBCPreparedStatement;
import JDBCUtil.JDBCUtils;
import jdk.nashorn.internal.scripts.JD;
import org.junit.Test;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* @Author HLY
* @Create 2019-12-19 10:54
*/
public class PreperdStatementUpdateTransactionTest {
/**
* 建表逻辑,此表某些字段没有建,请自行补全
*/
public void creatTable(){
String sql="CREATE TABLE user(\n" +
"id INTEGER(10) NOT NULL PRIMARY KEY auto_increment ,\n" +
"name VARCHAR(22) NOT NULL,\n" +
"balance INTEGER(10) NOT NULL\n" +
")\n";
}
/*
* 普通更新数据
* */
public void update(String sql,Object... args){
Connection connection=null;
PreparedStatement preparedStatement=null;
try {
//1.获取数据库链接
connection= JDBCUtils.getConnection();
//2.预编译sql语句,获得preparedStatement实例
preparedStatement=connection.prepareStatement(sql);
//3.填充占位符
for (int i=1;i<=args.length;i++){
preparedStatement.setObject(i,args[i]);
}
//4.执行
preparedStatement.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//5.资源关闭
JDBCUtils.closeResource(connection,preparedStatement,null);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/*
* 事务更新数据
* */
public void updateTransaction(Connection connection, String sql,Object... args){
PreparedStatement preparedStatement=null;
try {
//1.预编译sql语句,获得preparedStatement实例
preparedStatement=connection.prepareStatement(sql);
//2.填充占位符
for (int i=1;i<=args.length;i++){
preparedStatement.setObject(i,args[i-1]);
}
//3.执行
preparedStatement.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//4.资源关闭
JDBCUtils.closeResource(null,preparedStatement,null);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Test
public void TransactionTest() {
Connection connection=null;
try {
connection=JDBCUtils.getConnection();
//取消自动提交
connection.setAutoCommit(false);
String sql1="UPDATE user SET balance=balance-1000 WHERE id=?";
updateTransaction(connection,sql1,1);
System.out.println(10/0);//模拟异常
String sql2="UPDATE user SET balance=balance+1000 WHERE id=?";
updateTransaction(connection,sql2,2);
System.out.println("转账成功");
//设置提交数据
connection.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚数据
try {
connection.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}finally {
/*
* 修改其为自动提交
* 针对于使用数据库链接池的使用
* */
try {
connection.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
try {
JDBCUtils.closeResource(connection,null,null);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Test
public void NOTransactionTest(){
Connection connection=null;
try {
connection=JDBCUtils.getConnection();
String sql1="UPDATE user SET balance=balance-1000 WHERE id=?";
updateTransaction(connection,sql1,1);
System.out.println(10/0);//模拟异常
String sql2="UPDATE user SET balance=balance+1000 WHERE id=?";
updateTransaction(connection,sql2,2);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
JDBCUtils.closeResource(connection,null,null);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
User对象
package JDBCPreparedStatement;
import java.util.Date;
/**
* @Author HLY
* @Create 2019-12-17 16:58
*/
public class User {
public int id;
public String name ;
public Date birth ;
public String email;
public int balance;
public User(){}
public User(int id,String name,Date birth,String email,int balance){
this.id=id;
this.name=name;
this.birth=birth;
this.email=email;
this.balance=balance;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return this.id;
}
public void setname(String name){
this.name=name;
}
public String getname(){
return this.name;
}
public void setemail(String email){
this.email=email;
}
public String getemail(){
return this.email;
}
public void setbirth(Date birth){
this.birth=birth;
}
public Date getbirth(){
return this.birth;
}
public void setbalance(int balance){
this.balance=balance;
}
public int getbalance(){
return this.balance;
}
@Override
public String toString() {
return "User{id="+id+",name="+
name+",birth="+
birth+",email="+
email+",balance="+
balance+"}";
}
}