《ThinkJDBC—一行代码搞定数据库操作》 项目地址 https://gitee.com/Leytton/ThinkJD
ThinkJD有三种配置方式访问数据库:
打开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,如果存在则读取数据库配置。
直接调用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";
}
配置函数为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;
}