您的位置:首页 > 编程语言 > Java开发

JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚) .

2012-07-02 14:08 701 查看
在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电,
则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC自动提交,格式为:

conn.setAutoCommit(false);

执行多条SQL语句;

conn.commit();

//恢复自动提交模式

conn.setAutoCommit(true);

代码示例:

[Java]
view plaincopyprint?

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class TestTransaction {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub
  
        Connection con = null;  
        Statement stmt = null;  
        ResultSet rs = null;  
        PreparedStatement ps = null;  
        try {  
            Class.forName("com.mysql.jdbc.Driver");  
            con = DriverManager.getConnection(  
                    "jdbc:mysql://localhost:3306/mydb", "root", "root");  
            System.out.println("连接数据库成功!");  
            stmt = con.createStatement();  
            // JAVA默认为TRUE,我们自己处理需要设置为FALSE,并且修改为手动提交,才可以调用rollback()函数
  
            con.setAutoCommit(false);  
            stmt.addBatch("insert into people values(078,'ding','duo')");  
            stmt.addBatch("insert into people values(30,'nokia','ddd')");  
            stmt.executeBatch();  
            // 事务提交   
            con.commit();  
            // 设置为自动提交,改为TRUE   
            con.setAutoCommit(true);  
  
            /* 
             * String sql = "select * from people"; rs = stmt.executeQuery(sql); 
             * while(rs.next()){ System.out.println(rs.getString("id") + " " + 
             * rs.getString("name")); } 
             */  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } catch (SQLException se) {  
            se.printStackTrace();  
            try {  
                // 产生的任何SQL异常都需要进行回滚,并设置为系统默认的提交方式,即为TRUE
  
                if (con != null) {  
                    con.rollback();  
                    con.setAutoCommit(true);  
                }  
            } catch (SQLException se1) {  
                se.printStackTrace();  
            }  
        } finally {  
            try {  
                if (rs != null) {  
                    rs.close();  
                    rs = null;  
                }  
                if (stmt != null) {  
                    stmt.close();  
                    stmt = null;  
                }  
                if (con != null) {  
                    con.close();  
                    con = null;  
                }  
            } catch (SQLException se) {  
                se.printStackTrace();  
            }  
        }  
    }  
  
}  
<PRE>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息