zoukankan      html  css  js  c++  java
  • 最全面的jdbcUtils,总有一种适合你

    附加jar包,TxQueryRunner.java文件,dbconfig.properties配置文件(点击链接下载):
      http://files.cnblogs.com/files/xiaoming0601/jdbcUtils%E7%9B%B8%E5%85%B3jar%E5%8C%85.zip
     
    1.普通的连接数据库,读取dbconfig.properties配置文件
      
    package cn.itcast.jdbcUtils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class JdbcUtils {
        private static final String dbconfig = "dbconfig.properties";
        private static Properties prop = new Properties();
        static {    
            try {
                InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(dbconfig);
                prop.load(in);
                Class.forName(prop.getProperty("driverClassName"));
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        public static Connection getConnection(){
            try {
                return DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("username"),prop.getProperty("password"));
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }        
        }
    }
    2.使用简单的连接池,给出c3p0-config.xml配置文件
      1.c3p0-config.xml配置文件:
     1   <?xml version="1.0" encoding="UTF-8" ?> 
     2 - <c3p0-config>
     3 - <!--  这是默认配置信息 
     4   --> 
     5 - <default-config>
     6 - <!--  连接四大参数配置 
     7   --> 
     8   <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> 
     9   <property name="driverClass">com.mysql.jdbc.Driver</property> 
    10   <property name="user">root</property> 
    11   <property name="password">123</property> 
    12 - <!--  池参数配置 
    13   --> 
    14   <property name="acquireIncrement">3</property> 
    15   <property name="initialPoolSize">10</property> 
    16   <property name="minPoolSize">2</property> 
    17   <property name="maxPoolSize">10</property> 
    18   </default-config>
    19 - <!--  专门为oracle提供的配置信息 
    20   --> 
    21 - <named-config name="oracle-config">
    22   <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> 
    23   <property name="driverClass">com.mysql.jdbc.Driver</property> 
    24   <property name="user">root</property> 
    25   <property name="password">123</property> 
    26   <property name="acquireIncrement">3</property> 
    27   <property name="initialPoolSize">10</property> 
    28   <property name="minPoolSize">2</property> 
    29   <property name="maxPoolSize">10</property> 
    30   </named-config>
    31   </c3p0-config>
    View Code

      2.代码

    package cn.itcast.jdbcUtils;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class JdbcUtils2 {
        // 配置文件的默认配置!要求你必须给出c3p0-config.xml!!!
        private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();
        }
        public static DataSource getDataSource() {
            return dataSource;
        }
    }
    3.使用连接池,最全面的获取dataSource,connection以及释放connection的方法,并提供开启,提交回滚事务的方法
      
    package cn.itcast.jdbcUtils;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import javax.sql.DataSource;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class JdbcUtils3 {
        private static DataSource dataSource = new ComboPooledDataSource();
        private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
        //获取数据源
        public static DataSource getDataSource(){
            return dataSource;
        }
        //获取连接
        public static Connection getConnection() throws SQLException{
            Connection conn = tl.get();
            if(conn==null){
                return dataSource.getConnection();
            }
            return conn;
        }
        //开启事物
        public static void beginTransaction() throws SQLException{
            Connection conn = tl.get();
            if(conn!=null){
                throw new SQLException("您已经开启了事务,在没有结束当前事务时,不能再开启事务");
            }
            conn = dataSource.getConnection();
            conn.setAutoCommit(false);
            tl.set(conn);//把当前线程的连接保存起来!
        }
        //提交事务
        public static void commitTransaction() throws SQLException{
            Connection conn = tl.get();
            if(conn==null){
                throw new SQLException("当前没有事务,所以不能提交");
            }
            conn.commit();
            conn.close();
            tl.remove();
        }
        //回滚事务
        public static void rollbackTransaction() throws SQLException{
            Connection conn = tl.get();
            if(conn==null){
                throw new SQLException("当前没有事务,所以不能回滚");
            }
            conn.rollback();
            conn.close();
            tl.remove();
        }
        //释放连接
        public static void releaseConnection(Connection connection) throws SQLException {
            Connection con = tl.get();
            /*
             * 判断它是不是事务专用,如果是,就不关闭!
             * 如果不是事务专用,那么就要关闭!
             */
            // 如果con == null,说明现在没有事务,那么connection一定不是事务专用的!
            if(con == null) connection.close();
            // 如果con != null,说明有事务,那么需要判断参数连接是否与con相等,若不等,说明参数连接不是事务专用连接
            if(con != connection) connection.close();
        }
    }

    ~~~~~~~~~~~~~~~~~~相互学习~~~~~~~~~~~~~~~~~~~~

  • 相关阅读:
    Hadoop生态圈-Azkaban实战之Command类型执行指定脚本
    Hadoop基础-MapReduce的排序
    Hadoop生态圈-Azkaban实战之Command类型多job工作流flow
    Hadoop生态圈-Azkaban部署实战
    SHELL脚本编程循环篇-until循环
    Hadoop生态圈-Kafka配置文件详解
    Hadoop生态圈-使用Kafka命令在Zookeeper中对应关系
    Hadoop生态圈-Kafka的旧API实现生产者-消费者
    Apache Kafka运维常用命令
    企业级Apache Kafka部署实战篇
  • 原文地址:https://www.cnblogs.com/xiaoming0601/p/5865458.html
Copyright © 2011-2022 走看看