- Connection是默认将executeXXX(String sql)执行之后马上提交给数据库的,这样一来,有时候如果需要处理一连串的sql语句(也就是事务,这里不讲解事务的相关知识),则需要将Connection的自动提交关掉,使用的方法为setAutoCommit(false)。在将事务包含的sql语句都使用executeXXX(String sql)执行完了之后,在使用Connection的commit()方法将所有sql语句都提交到数据库。
- 执行程序之前和执行程序之后的表
- 具体的讲解穿插在代码中
import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.Properties; public class TransactionTest { // 常规操作 private String driver; private String url; private String user; private String pass; public void initparam(String fileName)throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(fileName)); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public void inserInTransaction(String [] sqls) throws Exception{ Class.forName(driver); try(Connection conn = DriverManager.getConnection(url, user, pass)){ conn.setAutoCommit(false); // 将connection的自动提交关掉 try( Statement stmt = conn.createStatement()) { for (String sql : sqls){ stmt.executeUpdate(sql); } } conn.commit(); // 在这里显示地提交 } } public static void main(String args[]) throws Exception{ TransactionTest tt = new TransactionTest(); tt.initparam("mysql.ini"); String[] sqls = new String[]{ "insert into students values('S1', 'lala', 'f', 21, 'D01')", "insert into students values('S5', 'lblb', 'm', 21, 'D01')", "insert into students values('S6', 'lclc', 'f', 21, 'D01')", }; tt.inserInTransaction(sqls); } }
这是我看李刚编著的《疯狂Java讲义》后总结出来的。
java数据库编程(12)事务处理
最新推荐文章于 2023-06-05 22:46:05 发布