使用配置文件访问数据库的优点是:
一次编写随时调用,数据库类型发生变化只需要修改配置文件。
配置文件的设置:
在配置文件中,key-value对应的方式编写。
不好意思我只用过这两个数据库 :)
----------Oracle
jdbc.driver_class=oracle.jdbc.driver.OracleDriver //数据库驱动
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl //数据库地址
jdbc.connection.username=c##wuyong//数据库名称
jdbc.connection.password=//数据库密码
-----------mysql
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://127.0.0.1:3306/MySQL
jdbc.connection.username=root
jdbc.connection.password=Admin
读取配置文件:
使用Properties对象的load()方法来实现配置文件的读取,使用流来实现文件读写的操作。
为了避免重复编写读取配置文件的代码,可以创建一个工具类:
//工具类--单列模式
public class ConfigManager {
//读取配置文件(属性文件)的工具类
private static ConfigManager configManager;
private static Properties properties;
//这里必须为private,避免外部new一个ConfigManager对象
private ConfigManager(){
String configFil="database.propertise";
properties=new Properties();
//getClassLoader()返回类加载器
//getResourceAsStream(configFil)返回InputStream对象
InputStream inputStream=ConfigManager.class.getClassLoader().getResourceAsStream(configFil);
try {
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//通过单列模式设置实例化的个数
//对外开放的接口
public static ConfigManager getInstance(){
if (configManager==null) {
configManager=new ConfigManager();
return configManager;
}
return configManager;
}
//通过key获取对应的value值
public String getString(String key){
return properties.getProperty(key);
}
}
使用工具类的方法:
//获取数据库连接
public boolean getConnection(){
//读出配置信息
String driver=ConfigManager.getInstance().getString("jdbc.driver_class");
String url=ConfigManager.getInstance().getString("jdbc.connection.url");
String username=ConfigManager.getInstance().getString("jdbc.connection.username");
String password=ConfigManager.getInstance().getString("jdbc.connection.password");
try {
// 加载JDBC驱动
Class.forName(driver);
connection=DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}