1. 程式人生 > >JDBC連線資料庫3-----單例模式

JDBC連線資料庫3-----單例模式

為了使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");