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();
                    }
                }
            }
        }

完全引用自

JDBC 关闭数据库连接与自动提交--https://blog.csdn.net/hjiacheng/article/details/53193361

原文地址:https://www.cnblogs.com/whatlonelytear/p/9403603.html

时间: 2024-10-10 02:50:49

JDBC 关闭数据库连接与自动提交【转】的相关文章

Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧

学习Mybatis时提到了JDBC方式需要自己手动提交事务,如果不加session.commit会导致数据库的数据无法正常插入(程序本身又不给你报错,还装出一副我已经插入成功的样子) SqlSession session = sessionFactory.openSession(); 如果要自动提交的话加个参数就好啦 SqlSession session = sessionFactory.openSession(true);//自动提交 手动提交的话 SqlSession session = s

MySQL控制(关闭、打开)自动提交功能

在MySQL中执行命令时,通常都直接被确定提交了.也就是说用户不用意识此事,所有的命令都会被自动COMMIT.特别是当存储引擎为MyISAM的情况下,本身它是不支持事务处理的,只要执行了命令,所有的命令部会被提交. 这样的默认自动提交的功能就被称为自动提交功能.自动提交功能默认被置为ON的状态.但是,如果存储引擎为InnoDB 时,当执行了START TRANSACTION或BEGIN命令(MySQL事务处理-删除后回滚)后,将不会自动提交了,只有明确执行了COMMIT命令后才会被提交,在这之前

postgresql 关闭自动提交

1. 简介说明 我们知道oracle中sqlplus里面执行dml语句:是需要提交commit:若错了:也可以回滚rollback: 然而在postgresql里面默认是自动提交:执行完就马上提交了,不能回滚,这样容易导致误操作的发生,有没有什么办法避免这个风险呢?当然有,在psql中默认是打开自动提交的,我们可以关闭自动提交. 2. 操作验证 [[email protected] ~]$ psql -U lottu -d xzfb psql (9.5.0) Type "help" f

jdbc java数据库连接 9)事务编程

1. 事务 基本概念: 事务使指一组最小逻辑操作单元,里面有多个操作组成. 组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚. 事务ACID特性: l 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. l 一致性(Consistency 事务必须使数据库从一个一致性状态变换到另外一个一致性状态. l 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务

事务与自动提交

事务与自动提交 现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的.事务支持四大特性(ACID):原子性(Atomicity).一致性(Consistency).隔离性(Isolation)以及持久性(Durability).通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰.事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易. 事务通常是通过把一批更改"积蓄&q

Java -- JDBC 学习--数据库连接池

JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开发,存在的问题: 普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s-1s的时间).需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接.这样的方式将会消耗大量的资源和

数据库连接JDBC和数据库连接池C3P0自定义的java封装类

数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1.26代表的是版本序列号) 一.JDBC的封装:(java连接MySQL) 1 import java.sql.*; 2 3 import utils.GlobalConstant; 4 5 public class JDBCUtil { 6 7 private JDBCUtil() { 8 9 }

JAVA jdbc获取数据库连接

JDBC获取数据库连接的帮助类 1 import java.io.InputStream; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.ResultSet; 5 import java.sql.Statement; 6 import java.util.Properties; 7 8 public class jdbcUtil { 9 10 private static Stri

mysql自动提交

MySQL的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关闭掉,通过程序来控制,只要一次commit就可以了. 1,我们可以通过set来设置autocommit 2,我们可以修改mysql的配置文件my.cnf来关闭autocommit init_connect='SET autocommit=0'  #在mysqld里面加上这些内容 其他关于mysql事