java 数据库读取工具类(读取config.properties配置文件)[包含线程安全]

java 数据库读取工具类(读取config.properties配置文件)[包含线程安全]

原文地址:http://www.cnblogs.com/myparamita/archive/2012/02/21/2361273.html

数据库读取工具类

package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleDriver;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
* 数据库连接工具类
* @version 1.0
*/
public class JdbcConnection {
    
    // 定义线程本地变量,每个线程访问它都会获得不同的对象
// 使用ThreadLocal使一个连接绑定到一个线程上
    private static ThreadLocal<Connection> currentConnection = new ThreadLocal<Connection>();
    private static String username=null;            //用户名
    private static String password=null;            //密码
    private static String dbName=null;                //数据库名称
    private static String ip=null;                        //数据库服务器IP地址
    private static String resourceName=null;                                        //为null时不使用连接池, jdbc/mysql或jdbc/oracle或jdbc/derby
    private static String databaseType = "oracle";    
    
    private static void initParams(){
      username=DbConfig.getInstance().getDb_username();            
      password=DbConfig.getInstance().getDb_password();            
      dbName=DbConfig.getInstance().getDb_name();                
      ip=DbConfig.getInstance().getIp();                        
    }
    
    /**
     * 
     * @return 得到一个数据库连接
     * @throws SQLException
*/
    public static Connection getConnection() throws SQLException {
        Connection conn = currentConnection.get();
        if (conn == null) {
            if(null==resourceName){
                if("mysql".equals(databaseType.toLowerCase())){
                    conn = getMySqlConnection();
                }else if("oracle".equals(databaseType.toLowerCase())){
                    conn = getOracleConnection();
                }else if("derby".equals(databaseType.toLowerCase())){
                    conn = getDerbyConnection();
                }else{
                    System.out.println("在 JdbcConnection.java 中数据库类型没有设置");
                    throw new SQLException("数据库类型未设置");
                }
            }else{
                conn = getConnectionByPool();
            }            
            currentConnection.set(conn);
        }
        return conn;
    }
    /**
     * 关闭Oracle数据库连接
     * @throws SQLException
*/
    public static void closeConnection() throws SQLException{
        Connection conn = currentConnection.get();
        conn.close();
        currentConnection.set(null);
    }
    //获得Oracle数据库连接
    private static Connection getOracleConnection(){
        initParams();
        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();    //加载驱动
            conn= DriverManager.getConnection("jdbc:oracle:thin:@"+ip+":1521:"+dbName,username,password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("Oracle驱动没找到");
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //获得MySql数据库连接
    private static Connection getMySqlConnection(){
        initParams();
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();    //加载驱动
            String url = "jdbc:mysql://"+ip+":3306/"+dbName+"?useUnicode=true&characterEncoding=utf8";
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("MySql驱动没找到");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }        
        return conn;
    }
    //获取Derby数据库连接
    private static Connection getDerbyConnection(){
        initParams();
        Connection conn = null;
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();    //加载驱动
            String url = "jdbc:derby://"+ip+":1527/"+dbName+";create=true";
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("Derby驱动没找到");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }        
        return conn;
    }
    //获取连接池连接
    private static Connection getConnectionByPool(){        
        try {
            Context ctx = new InitialContext();
            Context subContext = (Context)ctx.lookup("java:comp/env");
            String dsName="";
            dsName = resourceName;
            
            DataSource dataSource = (DataSource)subContext.lookup(dsName);
            //上面两句可以合写成下边这句
//ctx.lookup("java:comp/env/jdbc/oracle");// java:comp/env/ 规定:加前缀指定资源
            return dataSource.getConnection();
        }
          catch (NamingException e) {e.printStackTrace();}
          catch (SQLException e) {e.printStackTrace();}
        return null;        
    }
}

读取.properties文件

package com.db;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Properties;

/**
 * 数据库访问配置文件各参数的获取
 * @author lzx
 *
 */
public class DbConfig {
    //数据库及server配置文件路径
    private static final String ACTIONPATH = "config.properties";  
    private static DbConfig instance=null;
    
    private String db_username=null;
    private String db_password=null;
    private String db_name=null;
    private String ip=null;
    private String ags_user=null;
    private String ags_password=null;
    private String ags_domain=null;
    private String ags_host=null;
    private String ags_servicename=null;
    
    private DbConfig(){}
    
    public String getDb_username() {
        return db_username;
    }
    public String getDb_password() {
        return db_password;
    }
    public String getDb_name() {
        return db_name;
    }
    public String getIp() {
        return ip;
    }
    public String getAgs_user() {
        return ags_user;
    }
    public String getAgs_password() {
        return ags_password;
    }
    public String getAgs_domain() {
        return ags_domain;
    }
    public String getAgs_host() {
        return ags_host;
    }
    public String getAgs_servicename() {
        return ags_servicename;
    }
    
    public static DbConfig getInstance(){
        if(instance==null){
            instance= new DbConfig().getNewDbConfig();
        }
        return instance;
    }
    
    private DbConfig getNewDbConfig(){
        
        DbConfig dc=new DbConfig();
        Properties prop = new Properties();  
        String path=null;
        FileInputStream fis=null;
        
        try {
            path = DbConfig.class.getClassLoader().getResource("").toURI().getPath();
            fis = new FileInputStream(new File(path + ACTIONPATH));
            prop.load(fis);
            dc.db_username=prop.getProperty("db_username"); 
            dc.db_password=prop.getProperty("db_password"); 
            dc.db_name=prop.getProperty("db_name"); 
            dc.ip=prop.getProperty("ip"); 
            dc.ags_user=prop.getProperty("ags_user"); 
            dc.ags_password=prop.getProperty("ags_password"); 
            dc.ags_domain=prop.getProperty("ags_domain"); 
            dc.ags_host=prop.getProperty("ags_host"); 
            dc.ags_servicename=prop.getProperty("ags_servicename"); 
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }  
        
        return dc;
    }
}

对应的配置文件如下:

config.properties

#database username
db_username=sde
#database password
db_password=sde
#database server name
db_name=RASA
#database server ip
ip=localhost
#arcgis server username
ags_user=zj
#arcgis server password
ags_password=0.
#arcgis server user domain
ags_domain=zj
#arcgis server host address
ags_host=localhost
#arcgis server feature service name
ags_servicename=map


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值