為什么要自定義數據庫連接的工具類:
在開發中,我們在對數據庫進行操作時,必須要先獲取數據庫的連接,在上一篇隨筆中提到的獲取數據庫連接的步驟為:
1、定義好4個參數並賦值
2、加載驅動類
3、獲取數據庫連接
具體代碼如下:
1 String username="root"; //連接數據庫的用戶名 2 String password="root"; //連接數據庫的密碼 3 //連接MySql數據庫的url,不同數據庫url不同,語法:jdbc:子協議:廠商內容 4 String url="jdbc:mysql://localhost:3306/MyBookStore"; 5 //數據庫驅動程序的全類名,加載相應數據庫的jar包,在Web App Libraries中找到driver.class復制其全類名即可 6 String driver="com.mysql.jdbc.Driver"; 7 //2.加載驅動類 8 Class.forName(driver); 9 //3.獲取數據庫連接,對數據庫的一切操作都是從Connection連接開始的 10 Connection connection=DriverManager.getConnection(url, username, password);
如果我們每次操作數據庫,都要先編寫這些代碼來獲取數據庫連接,未免太麻煩,為了實現代碼的重用性,加快開發進度,我們將獲取數據庫連接的方法封裝成一個工具類,只需要通過該類調用相應的方法就可以獲取數據的連接。
具體步驟如下:
1、新建類,我們通常定義類名為JDBCUtils
2、加載驅動類
由於驅動程序不經常改變,且沒有多次加載數據庫驅動的必要,將加載驅動程序的代碼放在靜態代碼塊中,
靜態代碼塊只在類加載的時候加載一次,且在構造方法前被加載
3、定義靜態Connection類對象
將Connection類的對象定義為Static,由於conn被靜態方法getConnection調用,必須修飾為static
4、定義靜態方法GetConnection,用於獲取數據庫連接
5、定義closeStatement方法,用於關閉結果集,statement和connection連接
具體代碼如下:
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6
7 public class JDBCUtils { 8 //由於驅動程序不經常改變,且沒有多次加載數據庫驅動的必要, 9 //將驅動程序放在靜態代碼塊中,只在類加載的時候加載一次,且在構造方法前被加載
10 private static String driver="com.mysql.jdbc.Driver"; 11 static{ 12 try { 13 Class.forName(driver); 14 } catch (ClassNotFoundException e) { 15 e.printStackTrace(); 16 } 17 } 18 private static Connection conn=null; 19
20 //獲取數據庫連接的方法
21 public static Connection getConnection(String url,String user,String password) throws Exception{ 22 conn=DriverManager.getConnection(url, user, password); 23 return conn; 24 } 25
26 //關閉資源的方法
27 public static void closeStament(ResultSet rs,Statement st,Connection conn){ 28 if(rs!=null){ 29 try { 30 rs.close(); 31 } catch (SQLException e) { 32 e.printStackTrace(); 33 } 34 } 35 if(st!=null){ 36 try { 37 st.close(); 38 } catch (SQLException e) { 39 e.printStackTrace(); 40 } 41 } 42 if(conn!=null){ 43 try { 44 conn.close(); 45 } catch (SQLException e) { 46 e.printStackTrace(); 47 } 48 } 49 } 50 }