將JDBC冗餘的代碼進行封裝,此處的冗餘特指每次操做數據庫必然創建鏈接和關閉流操做!代碼註釋很詳細,此處不過多解釋,直接進入代碼部分:java
1 package edu.aeon.jdbc; 2 import java.io.IOException; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 import java.util.Properties; 8 /** 9 * 類做用:該類用於封裝jdbc對數據庫(打開、關流)操做! 10 * @author lzj 11 * @create 2017年11月15日 下午5:53:43 12 */ 13 public class JdbcUtil { 14 static Properties prs=null; 15 //加載資源文件處理類、只加載一次、且最早要加載到內存堆中 16 /* 17 * static{}(靜態代碼塊)與{}(非靜態代碼塊)的異同點 18 相同點:都是在JVM加載類時且在構造方法執行以前執行,在類中均可以定義多個, 19 通常在代碼塊中對一些static變量進行賦值。 20 不一樣點:靜態代碼塊在非靜態代碼塊以前執行(靜態代碼塊—>非靜態代碼塊—>構造方法)。 21 靜態代碼塊只在第一次new執行一次,以後再也不執行,而非靜態代碼塊在每new 22 一次就執行一次。非靜態代碼塊可在普通方法中定義(不過做用不大);而靜態代碼塊不行。*/ 23 static { 24 prs=new Properties(); 25 try { 26 //加載數據庫配置文件,若是加載xml,可用loadXML() 27 prs.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties")); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 } 32 /** 33 * @describe 用於創建與mysql數據庫之間的鏈接 34 * @create at 2017年11月15日 下午6:51:35 by lzj 35 * @Parameters1 無 36 * @Returns Connection 數據庫鏈接對象 37 */ 38 public static Connection getMysqlConnection(){ 39 try { 40 //註冊mysql驅動類 41 Class.forName(prs.getProperty("mysql.driver")); 42 //將根據所傳入url,用戶名,密碼所創建的mysql數據庫鏈接對象返回 43 return DriverManager.getConnection( 44 prs.getProperty("mysql.url"), 45 prs.getProperty("mysql.username"), 46 prs.getProperty("mysql.password")); 47 } catch (ClassNotFoundException e) { 48 e.printStackTrace(); 49 System.out.println("加載mysql驅動類時出錯!"); 50 return null; 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 System.out.println("創建數據庫鏈接時出錯!"); 54 return null; 55 } 56 } 57 /** 58 * @descibe 該靜態方法用於關閉對數據庫的流操做!(可重載) 59 * 此處爲了簡單演示只寫了一個關閉類,實際開發中該類重載不少次! 60 * @create at 2017年11月15日 下午6:54:45 by lzj 61 * @Parameters1 ps 數據庫操做對象 、預編譯 62 * @Parameters2 conn 數據庫鏈接對象 63 * @Returns void 64 */ 65 public static void closeResource(PreparedStatement ps,Connection conn){ 66 try { 67 if(ps!=null) { 68 ps.close(); 69 } 70 } catch (Exception e) { 71 e.printStackTrace(); 72 System.out.println("ps流關閉異常!"); 73 } 74 try { 75 if(conn!=null) { 76 conn.close(); 77 } 78 } catch (Exception e) { 79 e.printStackTrace(); 80 System.out.println("conn流關閉異常!"); 81 } 82 } 83 }
配置文件database.properties:mysql
1 ####################[mysql]#################### 2 mysql.driver = com.mysql.jdbc.Driver 3 mysql.url = jdbc:mysql://localhost:3306/student 4 mysql.username = root 5 mysql.password = lzj_aeon+ 6 ####################[oracle]#################### 7 oracle.driver = 8 oracle.url = 9 oracle.username = 10 oracle.userpw =
封裝好了以後咱們寫個測試類:sql
1 package edu.aeon.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.SQLException; 6 7 /** 8 * @author lzj 9 * @create 2017年11月15日 下午6:40:39 10 * @describe 11 */ 12 public class Test { 13 14 /** 15 * at 2017年11月15日 下午6:40:39 by lzj 16 * @Parameters1 String[] args 17 * @Returns void 18 */ 19 public static void main(String[] args) throws SQLException { 20 Connection conn = JdbcUtil.getMysqlConnection(); 21 PreparedStatement ps=null; 22 String sql="insert into student (id,name) values (?,?)"; 23 try { 24 ps = conn.prepareStatement(sql); 25 ps.setInt(1, 666); 26 ps.setString(2, "lzj"); 27 ps.execute(); 28 System.out.println("數據插入成功!"); 29 } catch (SQLException e) { 30 e.printStackTrace(); 31 conn.rollback(); 32 System.out.println("數據插入失敗!"); 33 }finally { 34 JdbcUtil.closeResource(ps, conn); 35 } 36 } 37 }
測試結果截圖:數據庫
數據庫相應信息截圖:oracle
爲了方便你們共同窗習,源碼已打包上傳至個人網盤:http://pan.baidu.com/s/1eS8LhAE 密碼:z60x學習