当前位置: 首页 > 工具软件 > ThinkJDBC > 使用案例 >

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

梅耘豪
2023-12-01

《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;
	}
 类似资料: