在第一節中,我們已經基本實現了使用Myeclipse和Mysql數據庫的連接,並且查詢了員工的一些信息。但是上次的實現多多少少有不完美之處,這次進行進一步優化。
這次:將數據庫的連接獲取和關閉封裝到DBUtility類中,並重構之前的案例,使用DBUtility類獲取和關閉連接。
步驟
封裝數據庫連接的獲取和關閉的過程如下:
1.創建屬性db.properties,在該文件中以鍵值對的形式來存儲連接數據庫的相關信息。該文件的內容如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/emp
jdbc.user=wonderq
jdbc.password=root
這樣做的目的是當需要修改連接數據的信息時,只需修改該文件集合,降低了連接數據庫的信息與使用類之間的耦合。
2.創建DBUtility類,使用static塊,初始化連接數據的信息,代碼如下:
static { try{ //加載配置文件 properties.load(DBUtility.class.getClassLoader().getResourceAsStream("Emp/src/dao/db.properties")); driver=properties.getProperty("jdbc.driver"); url=properties.getProperty("jdbc.url"); user=properties.getProperty("jdbc.user"); pwd=properties.getProperty("jdbc.password"); Class.forName(driver);//加載驅動類 } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } }其中,
"Emp/src/dao/db.properties"表示文件db.properties所在的包路徑,可以按照你自己工程的包路徑來寫代碼。
3.創建打開和關閉連接數據庫的方法,代碼如下:
public static Connection openConnection() throws SQLException{ return DriverManager.getConnection(url,user,pwd); } public static void closeConnection(Connection con){ if(con!=null){ try { con.close(); } catch (SQLException e) { System.out.println("關閉數據庫時發生異常!"); } } }4.重構EmpDAO類,使用DBUtility類獲取連接和關閉連接。
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class EmpDAO { public static void main(String [] args){ EmpDAO dao=new EmpDAO(); dao.findAll(); } public void findAll(){ Connection con=null; Statement stmt=null; ResultSet rs=null; try { con=DBUtility.openConnection(); stmt=con.createStatement(); rs=stmt.executeQuery("select empno,ename,sal,hiredate from emp;"); while(rs.next()){ System.out.println(rs.getInt("empno")+","+rs.getString("ename")+","+rs.getDouble("sal")+","+rs.getDate("hiredate")); } } catch (SQLException e) { System.out.println("數據庫訪問異常!"); throw new RuntimeException(e); } finally{ try { if(rs!=null){ rs.close(); } if(stmt!=null){ stmt.close(); } } catch (SQLException e) { System.out.println("釋放資源時發生異常!"); } DBUtility.closeConnection(con); } } }