連接數據庫的步驟:
1、注冊驅動(只做一次)
2、建立連接(Connection)
3、創建執行SQL的語句(Statement)
4、執行語句
5、處理執行結果(ResultSet)
6、釋放資源
在寫代碼之前,我們需要導入數據庫驅動,即 mysql-connector-java-5.0.8-bin.jar
導入 jar 包步驟:在項目名(JDBCDemo)上鼠標右鍵,然后左鍵點擊 Properties,在彈出的 Properties for JDBCDemo 的窗口中按如下圖中指引操作即可。
代碼實現如下:
1 package com.fhcq.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class JDBCTest { 10 11 public static void main(String[] args) throws Exception{ 12 // TODO Auto-generated method stub 13 test(); 14 } 15 16 static void test() throws SQLException, ClassNotFoundException { 17 18 // 1.注冊驅動 19 //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 20 //System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver"); 21 Class.forName("com.mysql.jdbc.Driver");//推薦方式 22 23 // 2.建立連接 24 String url = "jdbc:mysql://localhost:3306/jdbc"; 25 String user = "root"; 26 String password = "123456"; 27 Connection conn = DriverManager.getConnection(url, user, password); 28 29 // 3.創建語句 30 Statement st = conn.createStatement(); 31 32 // 4.執行語句 33 ResultSet rs = st.executeQuery("select * from user"); 34 35 // 5.處理結果(依次打印出 user 表中的4列基本數據項的值) 36 while (rs.next()) { 37 System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" 38 + rs.getObject(3)+"\t" + rs.getObject(4)); 39 } 40 41 // 6.釋放資源 42 rs.close(); 43 st.close(); 44 conn.close(); 45 } 46 47 }
上述代碼的實現其實是一個很不規范的例子,下面就來對其進行簡單的優化:
我們首先寫一個 JDBCUtils 工具類。首先來保證這個驅動只注冊一次,然后再把【建立連接】 和 【釋放資源】 的部分也都添加進來,這樣在我們每次獲取連接的時候都通過這個工具類來拿,還有就是不會每寫一次都要把【釋放資源】那么一大段代碼都給帶上了。
1 package com.fhcq.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public final class JDBCUtils { 10 11 private static String url = "jdbc:mysql://localhost:3306/jdbc"; 12 private static String user = "root"; 13 private static String password = "123456"; 14 15 private JDBCUtils(){ 16 17 } 18 19 static{ 20 21 // 1.注冊驅動 22 try { 23 Class.forName("com.mysql.jdbc.Driver"); 24 } catch (ClassNotFoundException e) { 25 throw new ExceptionInInitializerError(e); 26 } 27 } 28 29 public static Connection getConnection() throws SQLException{ 30 return DriverManager.getConnection(url, user, password); 31 } 32 33 public static void free(ResultSet rs,Statement st,Connection conn){ 34 35 try{ 36 if(rs!=null){ 37 rs.close(); 38 } 39 }catch(SQLException e){ 40 e.printStackTrace(); 41 }finally{ 42 try{ 43 if(st != null){ 44 st.close(); 45 } 46 }catch(SQLException e){ 47 e.printStackTrace(); 48 }finally{ 49 if(conn!=null){ 50 try { 51 conn.close(); 52 } catch (SQLException e) { 53 e.printStackTrace(); 54 } 55 } 56 } 57 } 58 } 59 }
剩下的我們就來簡化一下原有的代碼,這樣處理后的代碼就可以作為我們的一個模板來使用了。
1 package com.fhcq.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.Statement; 6 7 public class JDBCTest { 8 9 public static void main(String[] args) throws Exception { 10 // TODO Auto-generated method stub 11 template(); 12 } 13 14 static void template() throws Exception{ 15 16 Connection conn = null; 17 Statement st = null; 18 ResultSet rs = null; 19 20 try { 21 22 // 2.建立連接 23 conn = JDBCUtils.getConnection(); 24 25 // 3.創建語句 26 st = conn.createStatement(); 27 28 // 4.執行語句 29 rs = st.executeQuery("select * from user"); 30 31 // 5.處理結果 32 while(rs.next()){ 33 System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) 34 + "\t"+ rs.getObject(3)+"\t" + rs.getObject(4)); 35 } 36 37 }finally{ 38 JDBCUtils.free(rs, st, conn); 39 } 40 41 } 42 43 }