ThinkJDBC源码解析(二) 数据库连接配置的三种方式实现

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/leytton https://blog.csdn.net/Leytton/article/details/80402053

《ThinkJDBC—一行代码搞定数据库操作》 项目地址 https://gitee.com/Leytton/ThinkJD

ThinkJD有三种配置方式访问数据库:

  1. 配置文件方式
  2. 帐号密码方式
  3. 连接池方式

0x01 配置文件方式

打开D.java文件,可以看到下面一段代码,在这里加了注释:

static{
        //建立File对象
        File cfgFile=new File("thinkjdbc.properties");
        //判断thinkjdbc.properties文件是否存在
        if(cfgFile.exists()) {//如果文件存在
            try {
                //采用Properties方式从文件里读取配置信息
                Properties cfg = new Properties();
                cfg.load(new FileInputStream(cfgFile));
                //读取数据库连接url
                String DbUrl = cfg.getProperty("jdbcUrl");
                //读取数据库用户名
                String DbUser = cfg.getProperty("dataSource.user");
                //读取数据库密码
                String DbPassword = cfg.getProperty("dataSource.password");
                //保存配置信息到DbConfig对象里
                setDbConfig(DbUrl, DbUser, DbPassword);
                //System.out.println("File Config");
            } catch (IOException |ClassNotFoundException e) {
                e.printStackTrace();
            }
        }else {
            cfgFile=null;
        }       
    }

static{}静态代码块会在JVM加载D.class类时执行一次,判断项目根目录下是否存在thinkjdbc.properties,如果存在则读取数据库配置。

0x02 帐号密码方式

直接调用D.setDbConfig(数据库url,用户名,密码);就行了,默认驱动为com.mysql.jdbc.Driver。当然也可以通过setDbConfig(DbConfig dbConfig)修改默认驱动。

public static void setDbConfig(String DbUrl,String DbUser,String DbPassword) throws ClassNotFoundException{
    setDbConfig(new DbConfig(DbUrl,DbUser,DbPassword));
}

public static void setDbConfig(DbConfig dbConfig) throws ClassNotFoundException{
    D.dbConfig = dbConfig;
    Class.forName(dbConfig.getDriverName());
}

DbConfig .java

public class DbConfig {
    private String DbUrl = "";
    private String DbUser = "";
    private String DbPassword="";
    private String DriverName = "com.mysql.jdbc.Driver";
}

0x03 连接池方式

配置函数为setDataSource()

public static void setDataSource(DataSource dataSource) {
    D.dataSource=dataSource;
}

从下面代码可以看出,在获取数据库连接Connection的时候,首先判断连接池是否为null,如果配置了连接池这从连接池获取Connection。如果没有设置连接池,也没有配置数据库连接信息,那么就会抛异常提示数据库连接或连接池没有配置。

public static Connection getConnection() throws SQLException {
        ...
        else if(null!=dataSource) {
            conn = dataSource.getConnection();
        }else {
            if(null!=dbConfig) {
                conn = DriverManager.getConnection(dbConfig.getDbUrl(), dbConfig.getDbUser(), dbConfig.getDbPassword());
            }else {
                throw new SQLException("DbConfig/DataSource haven't set , D.setDbConfig()/D.setDataSource() should be called first !");
            }
        }
        ...
        return conn;
    }

猜你喜欢

转载自blog.csdn.net/Leytton/article/details/80402053