JDBC以及相關技術學習(二)----把JDBC獲取連接封裝成一個工具類

由上一節的例子我麼可以看到,雖然實現了基本與數據庫操作的功能,但是,裏面對到處都是與數據庫密碼、URL之類的東西,我們可以想象,如果代碼中到處都是充滿這樣的代碼,那簡直就是災難,一點發生變更,比如數據庫密碼改了,那麼就需要對大量的代碼進行修改,另外,對資源的釋放也不規範,如果釋放第一個資源出現錯誤了,後面的資源就無法得到釋放,時間一長,系統就崩潰了。

    我們重新對代碼進行規範化,做了如下的步驟:

(1)把對數據庫獲取鏈接以及釋放資源的操作,都放在一個類中。

(2)這個類在系統中只有一個實例,我們將其設計爲單例(SingleTon).

直接上代碼:



public final class JDBCToolSingleTon {


private   String url = "jdbc:sqlserver://localhost:1433;DatabaseName=JDBCTEST";
private   String user = "sa";
private   String password = "newsoft@1305";

//靜態變量
private static JDBCToolSingleTon instance = null;
 
static {//靜態代碼塊,在虛擬機裝載該類時執行,而且只被執行一次
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//conn = DriverManager.getConnection(url, user, password);不用在這裏獲取連接
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


public static JDBCToolSingleTon getInstance(){
if(instance == null)//併發處理,需要多重檢查
{//其實可以將方法設置爲異步,但性能比較差
synchronized(JDBCToolSingleTon.class){
if(instance == null)
{
instance = new JDBCToolSingleTon();
}
}
}
return instance;
}



//私有構造方法
private JDBCToolSingleTon()
{

}


public   Connection getConnection() throws SQLException
{
 
return DriverManager.getConnection(url, user, password);
 
}


public   void freeResource(Connection conn,ResultSet rs,Statement st){
try
{

if(rs!=null)
rs.close();
}
catch(Exception e){
e.printStackTrace();
}
try{

if(st != null)
st.close();
}
catch(Throwable e){
e.printStackTrace();
}
try{

if(conn != null)

{
conn.close();
conn = null;

}
}
catch(Throwable e){
e.printStackTrace();
}


}

我們來看看,編寫一個SingleTon有三個步驟:

(1)首先將構造方法設計爲私有,確保別人不能通過NEW生成實例

//私有構造方法
private JDBCToolSingleTon()
{

}
(2)編寫一個靜態變量。

//靜態變量
private static JDBCToolSingleTon instance = null;

(3)編寫一個獲取實例的方法。

public static JDBCToolSingleTon getInstance(){
if(instance == null)//併發處理,需要多重檢查
{//其實可以將方法設置爲異步,但性能比較差
synchronized(JDBCToolSingleTon.class){
if(instance == null)
{
instance = new JDBCToolSingleTon();//這裏使用了懶加載,只有要使用的時候才NEW
}
}
}
return instance;
}

另外,這段代碼中提供了兩個公用的方法獲取連接與釋放資源,分別爲:

public   Connection getConnection() //獲取連接

public   void freeResource(Connection conn,ResultSet rs,Statement st)//釋放資源

於是,我們上一節的那個例子可以修改爲:

JDBCToolSingleTon jDBCToolSingleTon = JDBCToolSingleTon.getInstance();
Connection conn = jDBCToolSingleTon.getConnection();
Statement statement = conn.createStatement();
String sql = "select * from UserInfo";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
System.out.println(resultSet.getString("name"));
}
jDBCToolSingleTon.freeResource(conn, resultSet, statement);


代碼修改成這樣,比原來就優雅很多了,如果需要修改數據庫連接信息,只要修改工具類就可以,當然,數據庫連接相關信息可以放在配置文件中,每次讀配置文件就可以,這樣更加方便。


發佈了41 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章