JDBC 關閉數據庫連接與自動提交【轉】


// Jdbc關閉數據庫連接時,會隱含一個提交事務的操作

            
            private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
        private final static String DB_CONNECTION = "jdbc:oracle:thin:@127.0.0.1:1521:mydb01";
        private final static String DB_NAME = "scott";
        private final static String DB_PWd = "scott";
     
        
        //jdbc關閉自動提交. 在對數據庫的操作未提交時,當conn.close()時,會默認先提交事務,再關閉連接.
        public static void test1() {
            Connection conn = null;
            CallableStatement callStmt = null;
            PreparedStatement ps = null;
            try {
                Class.forName(DB_DRIVER);
                conn = DriverManager.getConnection(DB_CONNECTION, DB_NAME, DB_PWd);
                conn.setAutoCommit(false); //關閉自動提交
                ps = conn.prepareStatement("insert into t_user values (?, ?, ?)");
                ps.setString(1, "1");
                ps.setString(2, "1");
                ps.setString(3, "1");
                int results = ps.executeUpdate();
                //conn.commit();//不手動提交
                System.out.println("插入了" + results + "條: ");
     
            } catch (Exception e) {
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace(System.out);
            } finally {
                try {
                    conn.setAutoCommit(true);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (null != callStmt) {
                    try {
                        callStmt.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (null != conn) {
                    try {
                        conn.close();// jdbc關閉自動提交. 在jdbc未提交時,當conn.close()時,會默認先提交事務,再關閉連接.
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        
        
        //jdbc默認自動提交. 在對數據庫的操作未手動提交時,也會立即提交到數據庫並生效
        public static void test2() {
            Connection conn = null;
            CallableStatement callStmt = null;
            PreparedStatement ps = null;
            try {
                Class.forName(DB_DRIVER);
                conn = DriverManager.getConnection(DB_CONNECTION, DB_NAME, DB_PWd);
                // conn.setAutoCommit(false); //jdbc默認自動提交
                ps = conn.prepareStatement("insert into t_user values (?, ?, ?)");
                ps.setString(1, "1");
                ps.setString(2, "1");
                ps.setString(3, "1");
                int results = ps.executeUpdate();  //注意,這一步操作就被提交到數據庫了!!!
                //conn.commit();//不手動提交
                System.out.println("插入了" + results + "條: ");
     
            } catch (Exception e) {
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace(System.out);
            } finally {
                try {
                    conn.setAutoCommit(true);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (null != callStmt) {
                    try {
                        callStmt.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (null != conn) {
                    try {
                        conn.close();//  jdbc關閉連接
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM