public class TransferTransaction {
public static Connection connection;
static{
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysqldb","root","root");
//改成手动提交
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入转账人:");
int from = scanner.nextInt();
System.out.println("请输入收账人:");
int to = scanner.nextInt();
System.out.println("转账金额:");
double money = scanner.nextDouble();
Person fromPerson = getPerson(from);
Person toPerson = getPerson(to);
try {
changeBalance(fromPerson, toPerson, money);
} catch (SQLException e) {
System.out.println("s");
connection.rollback();
}
}
public static Person getPerson(int no) throws SQLException {
QueryRunner queryRunner = new QueryRunner();
String sql = "select * from person where no = ?";
Person person = queryRunner.query(connection, sql, new BeanHandler<Person>(Person.class), no);
return person;
}
public static boolean changeBalance(Person fromPerson, Person toPerson, double money) throws SQLException {
if(fromPerson.getNo() == toPerson.getNo()){
System.out.println("自己不能给自己转账");
return false;
}
if(fromPerson.getBalance() < money){
System.out.println("你的余额不够");
return false;
}
//可以转账了
transAction(fromPerson.getNo(), -money);
System.out.println(3/0);//模拟事务异常
transAction(toPerson.getNo(), +money);
connection.commit();
return true;
}
public static void transAction(int no,double money) throws SQLException {
QueryRunner queryRunner = new QueryRunner();
String sql = "update person set balance = balance + ? where no = ?";
queryRunner.update(connection, sql, money, no);
}
}
JDBC转账
于 2023-08-04 19:16:15 首次发布