事务的重要性
有了事务,我们可以解决数据丢失的问题
单机事务机制的重要三步
1.connection.setAutoCommit(false);
关闭事务自动提交机制
2.connection.commit();
选择合适位置手动提交事务
3.connection.rollback();
设置异常时回滚
不使用事务机制
import java.sql.*;
public class JDBCTEST {
public static void main(String[] args) {
Connection connection=null;
PreparedStatement preparedStatement =null;
ResultSet resultSet=null;
try {
//第一步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步:创建连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sys","root","123456");
// connection.setAutoCommit(false);
//第三步:获取SQL语句执行对象
String sql="update t_act set balance=? where no=?";
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setDouble(1,10000);
preparedStatement.setInt(2,111);
//第四步执行SQL语句
int i = preparedStatement.executeUpdate();
String str=null;
str.toString();
preparedStatement.setDouble(1,30000);
preparedStatement.setInt(2,222);
i+=preparedStatement.executeUpdate();
// if(i==2){
connection.commit();
// }
} catch (ClassNotFoundException e) {
// if(connection!=null){
// try {
connection.commit();
// } catch (SQLException throwables) {
// throwables.printStackTrace();
// }
// }
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
我们设置错误
原始数据
执行程序之后的结果
使用事务机制
import java.sql.*;
public class JDBCTEST {
public static void main(String[] args) {
Connection connection=null;
PreparedStatement preparedStatement =null;
ResultSet resultSet=null;
try {
//第一步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步:创建连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sys","root","123456");
connection.setAutoCommit(false);
//第三步:获取SQL语句执行对象
String sql="update t_act set balance=? where no=?";
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setDouble(1,10000);
preparedStatement.setInt(2,111);
//第四步执行SQL语句
int i = preparedStatement.executeUpdate();
String str=null;
str.toString();
preparedStatement.setDouble(1,30000);
preparedStatement.setInt(2,222);
i+=preparedStatement.executeUpdate();
if(i==2){
connection.commit();
}
} catch (ClassNotFoundException e) {
if(connection!=null){
try {
connection.commit();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}
我们设置错误
原始数据
执行程序之后的结果
正确程序
import java.sql.*;
public class JDBCTEST {
public static void main(String[] args) {
Connection connection=null;
PreparedStatement preparedStatement =null;
ResultSet resultSet=null;
try {
//第一步:注册驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步:创建连接
connection=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sys","root","123456");
connection.setAutoCommit(false);
//第三步:获取SQL语句执行对象
String sql="update t_act set balance=? where no=?";
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setDouble(1,10000);
preparedStatement.setInt(2,111);
//第四步执行SQL语句
int i = preparedStatement.executeUpdate();
/* String str=null;
str.toString();*/
preparedStatement.setDouble(1,30000);
preparedStatement.setInt(2,222);
i+=preparedStatement.executeUpdate();
if(i==2){
connection.commit();
}
} catch (ClassNotFoundException e) {
if(connection!=null){
try {
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
}