硬編碼格式的弊端:數據庫發生改變時,要重新修改代碼,重新編譯和部署
解決方法:將數據庫信息寫在配置文件當中,讓程序通過讀取配置文件來獲得這些信息
jdbc.driver.class=com.mysql.jdbc.Driver jdbc.connection.url=jdbc:mysql://127.0.0.1:3306/tree jdbc.connection.username=root jdbc.connection.password=123321
編寫配置文件database.properties
創建包com.pb.tree.util,編寫類ConfigManager 讀取屬性文件
package cn.tree.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//讀取配置文件的工具類-單例模式
public class ConfigManager {
// 讀取配置文件properties.load(inputstream)
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager() {
String configFile = "database.properties";
properties = new Properties();
InputStream is = ConfigManager.class.getClassLoader()
.getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigManager getInstance() {
if (configManager == null) {
configManager = new ConfigManager();
}
return configManager;
}
public String getString(String key) {
return properties.getProperty(key);
}
}
修改MenuDao類的查詢信息的方法
package cn.tree.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//讀取配置文件的工具類-單例模式
public class ConfigManager {
// 讀取配置文件properties.load(inputstream)
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager() {
String configFile = "database.properties";
properties = new Properties();
InputStream is = ConfigManager.class.getClassLoader()
.getResourceAsStream(configFile);
try {
properties.load(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigManager getInstance() {
if (configManager == null) {
configManager = new ConfigManager();
}
return configManager;
}
public String getString(String key) {
return properties.getProperty(key);
}
}
package cn.tree.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import cn.tree.util.ConfigManager;
public class MenuDao {
// 查詢主目錄
public void getMainList() {
Connection connection = null;
Statement st = null;
ResultSet rs = null;
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 {
// 1、加載驅動
Class.forName(driver);
// 2、獲取數據庫連接
connection = DriverManager.getConnection(url, username, password);
// 3、獲取Statement對象,執行sql語句
String sql = "select * from main";
st = connection.createStatement();
rs = st.executeQuery(sql);
// 4、處理sql執行結果
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + "\t" + "name: " + name);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 5、釋放資源
rs.close();
st.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MenuDao menuDao = new MenuDao();
menuDao.getMainList();
}
}
