package day2;
import java.sql.*;
/**
* 测试JDBC事务功能
* @author teacher
*
*/
public class TransactionDemo {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(changeSalary(1001, 8999)?"ok":"error");
}
/**
* 修改某员工的薪水为新值,并记录日志
* @param empno 要修改薪水的员工编码
* @param newSalary 新的薪水值
* @return 修改成功并日志记录成功,则返回true,否则返回false
*/
public static boolean changeSalary(int empno, double newSalary){
boolean flag = false;
String sql1 = "update emp_ning set salary = ? " + " where empno = ?";
String sql2 = "insert into logs_ning(id, who, what)" + " values(seq_logs_ning.nextval, user, 'update salary')";
Connection conn = ConnectionUtils.getConnection();
PreparedStatement stmt = null;
try {
conn.setAutoCommit(false);//关闭自动提交
stmt = conn.prepareStatement(sql1); //sql1:update
stmt.setDouble(1, newSalary);
stmt.setInt(2, empno);
int n1 = stmt.executeUpdate();
stmt = conn.prepareStatement(sql2); //sql2:insert
int n2 = stmt.executeUpdate();
if (n1 == 1 && n2 == 1){ //这里的数值是影响记录的数目
conn.commit();//////两条都成功,提交
flag = true;
}else{
conn.rollback();//////任意一条不成功,但没有异常,回滚
}
} catch (SQLException e) {
try {
conn.rollback();//////出现异常,回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally{
ConnectionUtils.close(stmt);
ConnectionUtils.close(conn);
}
return flag;
}
}