JDBC連線資料庫3-----單例模式
阿新 • • 發佈:2019-02-18
為了使java連線資料庫時因為資料庫型別的改變進行優化。
建立屬性檔案.properties
把資料庫連線資料放入
jdbc_Driver=com.mysql.jdbc.Driver
jdbc_mysqlurl=jdbc:mysql://localhost:3306/kgcnews
jdbc_username=root
jdbc_password=123456
建立類讀取屬性檔案內的內容:
此方法new ConfigManger()物件時產生多個輸入流,
單例模式解決此問題,建立唯一一個ConfigManger物件
//讀取資料庫屬性檔案獲取資料庫連線的資訊 import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ConfigManger { //讀取屬性檔案的類Properties private Properties properties; //構造方法 public ConfigManger() { String configFile="database.properties"; //類載入器 把檔案讀到輸入流裡 InputStream in=ConfigManger.class.getClassLoader().getResourceAsStream(configFile); //讀取檔案 try { properties.load(in); in.close(); } catch (IOException e) { e.printStackTrace(); } } //根據屬性檔案中的鍵獲得對應的值 public String getString(String key) { return properties.getProperty(key); } }
資料庫操作類呼叫
//載入驅動
ConfigManger c=new ConfigManger();
Class.forName(c.getString("jdbc_Driver"));
String url=c.getString("jdbc_mysqlurl");
程式碼省略其他部落格中有。。。。。。。。。。。
通過單例模式優化讀取屬性檔案時產生唯一一個ConfigManger物件
飽漢模式
import java.io.IOException; import java.io.InputStream; import java.util.Properties; //單例模式 //飽漢模式,很飽不著急,延遲載入,啥時候用啥時候建立例項,存線上程安全問題 // synchronized同步方法解決執行緒不安全問題 public class ConfigManger1 { private static ConfigManger configManger; //讀取屬性檔案的類Properties private Properties properties; //構造方法 public ConfigManger1() { String configFile="database.properties"; //類載入器 把檔案讀到輸入流裡 InputStream in=ConfigManger.class.getClassLoader().getResourceAsStream(configFile); //讀取檔案 try { properties.load(in); in.close(); } catch (IOException e) { e.printStackTrace(); } } //提供唯一一個ConfigManger物件(解決出現的執行緒不安全問題加上同步方法) public static synchronized ConfigManger getInstance() { if(configManger==null) { configManger=new ConfigManger(); } return configManger; } //根據屬性檔案中的鍵獲得對應的值 public String getString(String key) { return properties.getProperty(key); } }
//餓漢模式,很餓很著急,所以類載入時即建立例項物件 public class ConfigManger2{ private static ConfigManger configManger=new ConfigManger(); //讀取屬性檔案的類Properties private Properties properties; //構造方法 public ConfigManger2() { String configFile="database.properties"; //類載入器 把檔案讀到輸入流裡 InputStream in=ConfigManger.class.getClassLoader().getResourceAsStream(configFile); //讀取檔案 try { properties.load(in); in.close(); } catch (IOException e) { e.printStackTrace(); } } //提供唯一一個ConfigManger物件(解決出現的執行緒不安全問題加上同步方法) public static synchronized ConfigManger getInstance() { // if(configManger==null) { // configManger=new ConfigManger(); // } return configManger; } //根據屬性檔案中的鍵獲得對應的值 public String getString(String key) { return properties.getProperty(key); } }
BaseDao操作類呼叫時
Class.forName(ConfigManger1.getInstance().getString("jdbc_Driver"));
String url=ConfigManger1.getInstance().getString("jdbc_mysqlurl");
String username=ConfigManger1.getInstance().getString("jdbc_username");
String password=ConfigManger1.getInstance().getString("jdbc_password");