JDBC詳解

1、相關概念java

1.什麼是JDBCmysql

  JDBC(Java Data Base Connectivity,java數據庫鏈接)是一種用於執行SQL語句的Java API,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此能夠構建更高級的工具和接口,使數據庫開發人員可以編寫數據庫應用程序。sql

2.數據庫驅動數據庫

  咱們安裝好數據庫以後,咱們的應用程序也是不能直接使用數據庫的,必需要經過相應的數據庫驅動程序,經過驅動程序去和數據庫打交道。其實也就是數據庫廠商的JDBC接口實現,即對Connection等接口的實現類的jar文件。編程

 

2、經常使用接口oracle

1.Driver接口dom

  Driver接口由數據庫廠家提供,做爲java開發人員,只須要使用Driver接口就能夠了。在編程中要鏈接數據庫,必須先裝載特定廠商的數據庫驅動程序,不一樣的數據庫有不一樣的裝載方法。如:ide

  裝載MySql驅動:Class.forName("com.mysql.jdbc.Driver");工具

  裝載Oracle驅動:Class.forName("oracle.jdbc.driver.OracleDriver");sqlserver

2.Connection接口

  Connection與特定數據庫的鏈接(會話),在鏈接上下文中執行sql語句並返回結果。DriverManager.getConnection(url, user, password)方法創建在JDBC URL中定義的數據庫Connection鏈接上。

  鏈接MySql數據庫:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

  鏈接Oracle數據庫:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");

  鏈接SqlServer數據庫:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

  經常使用方法:

    • createStatement():建立向數據庫發送sql的statement對象。
    • prepareStatement(sql) :建立向數據庫發送預編譯sql的PrepareSatement對象。
    • prepareCall(sql):建立執行存儲過程的callableStatement對象。
    • setAutoCommit(boolean autoCommit):設置事務是否自動提交。
    • commit() :在連接上提交事務。
    • rollback() :在此連接上回滾事務。

3.Statement接口

  用於執行靜態SQL語句並返回它所生成結果的對象。

  三種Statement類:

    • Statement:由createStatement建立,用於發送簡單的SQL語句(不帶參數)。
    • PreparedStatement :繼承自Statement接口,由preparedStatement建立,用於發送含有一個或多個參數的SQL語句。PreparedStatement對象比Statement對象的效率更高,而且能夠防止SQL注入,因此咱們通常都使用PreparedStatement。
    • CallableStatement:繼承自PreparedStatement接口,由方法prepareCall建立,用於調用存儲過程。

  經常使用Statement方法:

    • execute(String sql):運行語句,返回是否有結果集
    • executeQuery(String sql):運行select語句,返回ResultSet結果集。
    • executeUpdate(String sql):運行insert/update/delete操做,返回更新的行數。
    • addBatch(String sql) :把多條sql語句放到一個批處理中。
    • executeBatch():向數據庫發送一批sql語句執行。

4.ResultSet接口

  ResultSet提供檢索不一樣類型字段的方法,經常使用的有:

    • getString(int index)、getString(String columnName):得到在數據庫裏是varchar、char等類型的數據對象。
    • getFloat(int index)、getFloat(String columnName):得到在數據庫裏是Float類型的數據對象。
    • getDate(int index)、getDate(String columnName):得到在數據庫裏是Date類型的數據。
    • getBoolean(int index)、getBoolean(String columnName):得到在數據庫裏是Boolean類型的數據。
    • getObject(int index)、getObject(String columnName):獲取在數據庫裏任意類型的數據。

  ResultSet還提供了對結果集進行滾動的方法:

    • next():移動到下一行
    • Previous():移動到前一行
    • absolute(int row):移動到指定行
    • beforeFirst():移動resultSet的最前面。
    • afterLast() :移動到resultSet的最後面。

使用後依次關閉對象及鏈接:ResultSet → Statement → Connection

 

3、使用JDBC的步驟

  加載JDBC驅動程序 → 創建數據庫鏈接Connection → 建立執行SQL的語句Statement → 處理執行結果ResultSet → 釋放資源

1.註冊驅動 (只作一次)

  方式一:Class.forName(「com.MySQL.jdbc.Driver」);
  推薦這種方式,不會對具體的驅動類產生依賴。
  方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);
  會形成DriverManager中產生兩個同樣的驅動,並會對具體的驅動類產生依賴。

2.創建鏈接

 Connection conn = DriverManager.getConnection(url, user, password); 

  URL用於標識數據庫的位置,經過URL地址告訴JDBC程序鏈接哪一個數據庫,URL的寫法爲:

  

  其餘參數如:useUnicode=true&characterEncoding=utf8

3.建立執行SQL語句的statement

1 //Statement  
2 String id = "5";
3 String sql = "delete from table where id=" +  id;
4 Statement st = conn.createStatement();  
5 st.executeQuery(sql);  
6 //存在sql注入的危險
7 //若是用戶傳入的id爲「5 or 1=1」,那麼將刪除表中的全部記錄

 

1  //PreparedStatement 有效的防止sql注入(SQL語句在程序運行前已經進行了預編譯,當運行時動態地把參數傳給PreprareStatement時,即便參數裏有敏感字符如 or '1=1'也數據庫會做爲一個參數一個字段的屬性值來處理而不會做爲一個SQL指令)
2 String sql = 「insert into user (name,pwd) values(?,?)」;  
3 PreparedStatement ps = conn.preparedStatement(sql);  
4 ps.setString(1, 「col_value」);  //佔位符順序從1開始
5 ps.setString(2, 「123456」); //也可使用setObject
6 ps.executeQuery(); 

4.處理執行結果(ResultSet)

1 ResultSet rs = ps.executeQuery();  
2 While(rs.next()){  
3     rs.getString(「col_name」);  
4     rs.getInt(1);  
5     //…
6 }  

5.釋放資源

 //數據庫鏈接(Connection)很是耗資源,儘可能晚建立,儘可能早的釋放
//都要加try catch 以防前面關閉出錯,後面的就不執行了
1
try { 2 if (rs != null) { 3 rs.close(); 4 } 5 } catch (SQLException e) { 6 e.printStackTrace(); 7 } finally { 8 try { 9 if (st != null) { 10 st.close(); 11 } 12 } catch (SQLException e) { 13 e.printStackTrace(); 14 } finally { 15 try { 16 if (conn != null) { 17 conn.close(); 18 } 19 } catch (SQLException e) { 20 e.printStackTrace(); 21 } 22 } 23 }

 

4、事務(ACID特色、隔離級別、提交commit、回滾rollback

 

 

1.批處理Batch

 1 package com.test.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 /**
 9  * 測試ResultSet結果集的基本用法
10  */
11 public class Demo05 {
12     public static void main(String[] args) {
13         Connection conn = null;
14         Statement stmt = null;
15 
16         try {
17             Class.forName("com.mysql.jdbc.Driver");
18             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
19 
20             conn.setAutoCommit(false); //設爲手動提交
21 
22             long start = System.currentTimeMillis();
23 
24             stmt = conn.createStatement();
25             for (int i = 0; i < 20000; i++) {
26                 stmt.addBatch("insert into t_user (userName,pwd,regTime) values ('hao" + i + "',666666,now())");
27             }
28             stmt.executeBatch();
29             conn.commit();  //提交事務
30 
31             long end = System.currentTimeMillis();
32             System.out.println("插入200000條數據,耗時(ms):" + (end - start));
33 
34         } catch (ClassNotFoundException e) {
35             e.printStackTrace();
36         } catch (SQLException e) {
37             e.printStackTrace();
38         } finally{
39 
40             try {
41                 if (stmt!=null) {
42                     stmt.close();
43                 }
44             } catch (SQLException e) {
45                 e.printStackTrace();
46             }
47             try {
48                 if (conn!=null) {
49                     conn.close();
50                 }
51             } catch (SQLException e) {
52                 e.printStackTrace();
53             }
54         }
55     }
56 }
插入2萬條數據的測試

2.測試事務的基本概念和用法

 1 package com.test.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.SQLException;
 7 
 8 /**
 9  * 測試事務的基本概念和用法
10  */
11 public class Demo06 {
12     public static void main(String[] args) {
13         Connection conn = null;
14         PreparedStatement ps1 = null;
15         PreparedStatement ps2 = null;
16 
17         try {
18             Class.forName("com.mysql.jdbc.Driver");
19             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
20 
21             conn.setAutoCommit(false); //JDBC中默認是true,自動提交事務
22 
23             ps1 = conn.prepareStatement("insert into t_user(userName,pwd)values(?,?)"); //事務開始
24             ps1.setObject(1, "小高");
25             ps1.setObject(2, "123");
26             ps1.execute();
27             System.out.println("第一次插入");
28 
29             try {
30                 Thread.sleep(5000);
31             } catch (InterruptedException e) {
32                 e.printStackTrace();
33             }
34 
35             ps2 = conn.prepareStatement("insert into t_user(userName,pwd)values(?,?,?)");   //模擬執行失敗(values的參數寫成三個了)
36             //insert時出現異常,執行conn.rollback
37             ps2.setObject(1, "小張");
38             ps2.setObject(2, "678");
39             ps2.execute();
40             System.out.println("第二次插入");    
41 
42             conn.commit();
43 
44         } catch (ClassNotFoundException e) {
45             e.printStackTrace();
46             try {
47                 conn.rollback();
48             } catch (SQLException e1) {
49                 e1.printStackTrace();
50             }
51         } catch (SQLException e) {
52             e.printStackTrace();
53         } finally{
54 
55             try {
56                 if (ps1!=null) {
57                     ps1.close();
58                 }
59             } catch (SQLException e) {
60                 e.printStackTrace();
61             }
62             try {
63                 if (ps2!=null) {
64                     ps2.close();
65                 }
66             } catch (SQLException e) {
67                 e.printStackTrace();
68             }
69             try {
70                 if (conn!=null) {
71                     conn.close();
72                 }
73             } catch (SQLException e) {
74                 e.printStackTrace();
75             }
76         }
77     }
78 }
測試事務的基本概念和用法
 1 第一次插入
 2 java.sql.SQLException: No value specified for parameter 3
 3     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
 4     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
 5     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
 6     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
 7     at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2611)
 8     at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2586)
 9     at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2510)
10     at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1316)
11     at com.test.jdbc.Demo06.main(Demo06.java:39)
控制檯輸出

5、時間處理(Date和Time以及Timestamp區別、隨機日期生成

java.util.Date

  • 子類:java.sql.Date
  • 子類:java.sql.Time
  • 子類:java.sql.Timestamp

 

 1 package com.test.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.SQLException;
 7 import java.sql.Timestamp;
 8 import java.util.Random;
 9 
10 /**
11  * 測試時間處理(java.sql.Date,Time,Timestamp)
12  */
13 public class Demo07 {
14     public static void main(String[] args) {
15         Connection conn = null;
16         PreparedStatement ps = null;
17 
18         try {
19             Class.forName("com.mysql.jdbc.Driver");
20             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
21 
22             for (int i = 0; i < 1000; i++) {
23 
24                 ps = conn.prepareStatement("insert into t_user(userName,pwd,regTime,lastLoginTime)values(?,?,?,?)");
25                 ps.setObject(1, "小高" + i);
26                 ps.setObject(2, "123");
27 
28                 //
29                 int random = 1000000000 + new Random().nextInt(1000000000); //隨機時間
30 
31                 java.sql.Date date = new java.sql.Date(System.currentTimeMillis() - random);    //插入隨機時間
32                 java.sql.Timestamp stamp = new Timestamp(System.currentTimeMillis());   //若是須要插入指定時間,可使用Calendar、DateFormat
33                 ps.setDate(3, date);
34                 ps.setTimestamp(4, stamp);
35                 //
36                 ps.execute();
37             }
38 
39             System.out.println("插入");
40 
41         } catch (ClassNotFoundException e) {
42             e.printStackTrace();
43         } catch (SQLException e) {
44             e.printStackTrace();
45         } finally{
46 
47             try {
48                 if (ps!=null) {
49                     ps.close();
50                 }
51             } catch (SQLException e) {
52                 e.printStackTrace();
53             }
54             try {
55                 if (conn!=null) {
56                     conn.close();
57                 }
58             } catch (SQLException e) {
59                 e.printStackTrace();
60             }
61         }
62     }
63 }
測試時間處理(java.sql.Date,Time,Timestamp)
 1 package com.test.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.Date;
 5 import java.sql.DriverManager;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.sql.SQLException;
 9 import java.text.DateFormat;
10 import java.text.ParseException;
11 import java.text.SimpleDateFormat;
12 
13 /**
14  * 測試時間處理(java.sql.Date,Time,Timestamp),取出指定時間段的數據
15  */
16 public class Demo08 {
17 
18     /**
19      * 將字符串表明的時間轉爲long數字(格式:yyyy-MM-dd hh:mm:ss)
20      * @param dateStr
21      * @return
22      */
23     public static long str2DateTime(String dateStr){
24         DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
25 
26         try {
27             return format.parse(dateStr).getTime();
28         } catch (ParseException e) {
29             e.printStackTrace();
30             return 0;
31         }
32     }
33 
34     public static void main(String[] args) {
35         Connection conn = null;
36         PreparedStatement ps = null;
37         ResultSet rs = null;
38 
39         try {
40             Class.forName("com.mysql.jdbc.Driver");
41             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
42 
43             //
44             ps = conn.prepareStatement("select * from t_user where regTime > ? and regTime < ?");
45             java.sql.Date start = new java.sql.Date(str2DateTime("2016-06-20 00:00:00"));
46             java.sql.Date end = new java.sql.Date(str2DateTime("2016-06-24 00:00:00"));
47 
48             ps.setObject(1, start);
49             ps.setObject(2, end);
50 
51             rs = ps.executeQuery();
52             while(rs.next()){
53                 System.out.println(rs.getInt("id") + "--" + rs.getString("userName")+"--"+rs.getDate("regTime"));
54             }
55             //
56 
57         } catch (ClassNotFoundException e) {
58             e.printStackTrace();
59         } catch (SQLException e) {
60             e.printStackTrace();
61         } finally{
62 
63             try {
64                 if (ps!=null) {
65                     ps.close();
66                 }
67             } catch (SQLException e) {
68                 e.printStackTrace();
69             }
70             try {
71                 if (conn!=null) {
72                     conn.close();
73                 }
74             } catch (SQLException e) {
75                 e.printStackTrace();
76             }
77         }
78     }
79 }
測試時間處理(java.sql.Date,Time,Timestamp),取出指定時間段的數據

6、CLOB文本大對象操做

 

  1 package com.test.jdbc;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.ByteArrayInputStream;
  5 import java.io.File;
  6 import java.io.FileReader;
  7 import java.io.InputStreamReader;
  8 import java.io.Reader;
  9 import java.sql.Clob;
 10 import java.sql.Connection;
 11 import java.sql.DriverManager;
 12 import java.sql.PreparedStatement;
 13 import java.sql.ResultSet;
 14 import java.sql.SQLException;
 15 
 16 /**
 17  * 測試CLOB   文本大對象的使用
 18  * 包含:將字符串、文件內容插入數據庫中的CLOB字段和將CLOB字段值取出來的操做。
 19  */
 20 public class Demo09 {
 21     public static void main(String[] args) {
 22         Connection conn = null;
 23         PreparedStatement ps = null;
 24         PreparedStatement ps2 = null;
 25         ResultSet rs = null;
 26         Reader r = null;
 27 
 28         try {
 29             Class.forName("com.mysql.jdbc.Driver");
 30             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
 31 
 32             //插入//
 33             ps = conn.prepareStatement("insert into t_user(userName,myInfo)values(?,?)");
 34             ps.setString(1, "小高");
 35 
 36             //將文本文件內容直接輸入到數據庫中
 37 //          ps.setClob(2, new FileReader(new File("G:/JAVA/test/a.txt")));
 38 
 39             //將程序中的字符串輸入到數據庫中的CLOB字段中
 40             ps.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("aaaa".getBytes()))));
 41 
 42             ps.executeUpdate();
 43             System.out.println("插入");
 44             //
 45 
 46             //查詢//
 47             ps2 = conn.prepareStatement("select * from t_user where id=?");
 48             ps2.setObject(1, 223021);
 49 
 50             rs = ps2.executeQuery();
 51             System.out.println("查詢");
 52             while (rs.next()) {
 53                 Clob c = rs.getClob("myInfo");
 54                 r = c.getCharacterStream();
 55                 int temp = 0;
 56                 while ((temp=r.read())!=-1) {
 57                     System.out.print((char)temp);
 58                 }
 59             }
 60 
 61         } catch (ClassNotFoundException e) {
 62             e.printStackTrace();
 63         } catch (Exception e) {
 64             e.printStackTrace();
 65         } finally{
 66 
 67             try {
 68                 if (r!=null) {
 69                     r.close();
 70                 }
 71             } catch (Exception e) {
 72                 e.printStackTrace();
 73             }
 74             try {
 75                 if (rs!=null) {
 76                     rs.close();
 77                 }
 78             } catch (SQLException e) {
 79                 e.printStackTrace();
 80             }
 81             try {
 82                 if (ps2!=null) {
 83                     ps2.close();
 84                 }
 85             } catch (SQLException e) {
 86                 e.printStackTrace();
 87             }
 88             try {
 89                 if (ps!=null) {
 90                     ps.close();
 91                 }
 92             } catch (SQLException e) {
 93                 e.printStackTrace();
 94             }
 95             try {
 96                 if (conn!=null) {
 97                     conn.close();
 98                 }
 99             } catch (SQLException e) {
100                 e.printStackTrace();
101             }
102         }
103     }
104 }
測試CLOB 文本大對象的使用

7、BLOB二進制大對象的使用

 

  1 package com.test.jdbc;
  2 
  3 import java.io.FileInputStream;
  4 import java.io.FileOutputStream;
  5 import java.io.InputStream;
  6 import java.io.OutputStream;
  7 import java.sql.Blob;
  8 import java.sql.Connection;
  9 import java.sql.DriverManager;
 10 import java.sql.PreparedStatement;
 11 import java.sql.ResultSet;
 12 import java.sql.SQLException;
 13 
 14 /**
 15  * 測試BLOB   二進制大對象的使用
 16  */
 17 public class Demo10 {
 18     public static void main(String[] args) {
 19         Connection conn = null;
 20         PreparedStatement ps = null;
 21         PreparedStatement ps2 = null;
 22         ResultSet rs = null;
 23         InputStream is = null;
 24         OutputStream os = null;
 25 
 26         try {
 27             Class.forName("com.mysql.jdbc.Driver");
 28             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","mysql");
 29 
 30             //插入//
 31             ps = conn.prepareStatement("insert into t_user(userName,headImg)values(?,?)");
 32             ps.setString(1, "小高");
 33             ps.setBlob(2, new FileInputStream("G:/JAVA/test/d.jpg"));
 34             ps.execute();
 35             //
 36 
 37             //查詢//
 38             ps2 = conn.prepareStatement("select * from t_user where id=?");
 39             ps2.setObject(1, 223024);
 40 
 41             rs = ps2.executeQuery();
 42             System.out.println("查詢");
 43             while (rs.next()) {
 44                 Blob b = rs.getBlob("headImg");
 45                 is = b.getBinaryStream();
 46                 os = new FileOutputStream("G:/JAVA/test/h.jpg");
 47 
 48                 int temp = 0;
 49                 while ((temp=is.read())!=-1) {
 50                     os.write(temp);
 51                 }
 52             }
 53 
 54         } catch (ClassNotFoundException e) {
 55             e.printStackTrace();
 56         } catch (Exception e) {
 57             e.printStackTrace();
 58         } finally{
 59 
 60             try {
 61                 if (os!=null) {
 62                     os.close();
 63                 }
 64             } catch (Exception e) {
 65                 e.printStackTrace();
 66             }
 67             try {
 68                 if (is!=null) {
 69                     is.close();
 70                 }
 71             } catch (Exception e) {
 72                 e.printStackTrace();
 73             }
 74             try {
 75                 if (rs!=null) {
 76                     rs.close();
 77                 }
 78             } catch (SQLException e) {
 79                 e.printStackTrace();
 80             }
 81             try {
 82                 if (ps2!=null) {
 83                     ps2.close();
 84                 }
 85             } catch (SQLException e) {
 86                 e.printStackTrace();
 87             }
 88             try {
 89                 if (ps!=null) {
 90                     ps.close();
 91                 }
 92             } catch (SQLException e) {
 93                 e.printStackTrace();
 94             }
 95             try {
 96                 if (conn!=null) {
 97                     conn.close();
 98                 }
 99             } catch (SQLException e) {
100                 e.printStackTrace();
101             }
102         }
103     }
104 }
測試BLOB二進制大對象的使用

 8、總結(簡單封裝、資源文件properties處理鏈接信息

 1 #右擊該properties文件--properties--Resource--Text file encoding,選中other,選擇其它編碼方式。
 2 #如UTF-8或GBK,這樣就能在properties裏面輸入中文,而不會自動轉成Unicode了。
 3 
 4 #java中的properties文件是一種配置文件,主要用於表達配置信息。
 5 #文件類型爲*.properties,格式爲文本文件,文件內容是"鍵=值"的格式。
 6 #在properties文件中,能夠用"#"來做註釋
 7 
 8 #MySQL鏈接配置
 9 mysqlDriver=com.mysql.jdbc.Driver
10 mysqlURL=jdbc:mysql://localhost:3306/testjdbc
11 mysqlUser=root
12 mysqlPwd=mysql
13 
14 #Oracle鏈接配置
15 #...
db.properties
 1 package com.test.jdbc;
 2 
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 import java.util.Properties;
10 
11 public class JDBCUtil {
12 
13     static Properties pros = null;  //能夠幫助讀取和處理資源文件中的信息
14 
15     static {    //加載JDBCUtil類的時候調用
16         pros = new Properties();
17         try {
18             pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23 
24     public static Connection getMysqlConn(){
25         try {
26             Class.forName(pros.getProperty("mysqlDriver"));
27             return DriverManager.getConnection(pros.getProperty("mysqlURL"),
28                     pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
29         } catch (Exception e) {
30             e.printStackTrace();
31             return null;
32         }
33     }
34     //能夠重載多個,這裏就懶得寫了
35     public static void close(ResultSet rs,Statement st,Connection conn){
36 
37         try {
38             if (rs!=null) {
39                 rs.close();
40             }
41         } catch (SQLException e) {
42             e.printStackTrace();
43         }
44         try {
45             if (st!=null) {
46                 st.close();
47             }
48         } catch (SQLException e) {
49             e.printStackTrace();
50         }
51         try {
52             if (conn!=null) {
53                 conn.close();
54             }
55         } catch (SQLException e) {
56             e.printStackTrace();
57         }
58     }
59 }
JDBCUtil工具類
 1 package com.test.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 
 7 /**
 8  * 測試使用JDBCUtil工具類來簡化JDBC開發
 9  */
10 public class Demo11 {
11     public static void main(String[] args) {
12         Connection conn = null;
13         PreparedStatement ps = null;
14         ResultSet rs = null;
15 
16         try {
17             conn = JDBCUtil.getMysqlConn();
18 
19             ps = conn.prepareStatement("insert into t_user (userName) values (?)");
20             ps.setString(1, "小高高");
21             ps.execute();
22 
23         } catch (Exception e) {
24             e.printStackTrace();
25         } finally{
26             JDBCUtil.close(rs, ps, conn);
27         }
28     }
29 }
測試使用JDBCUtil工具類來簡化JDBC開發
相關文章
相關標籤/搜索