《Java Web開發實戰》Java工程師推薦的進階之路

千鋒雲端計算發表於2019-07-22

《Java Web開發實戰》一書更加趨於實戰性。此教材由淺入深、循序漸進,在語法闡述時儘量避免術語和公式,使初學者能夠快速入門,全面掌握實戰技能。它既可以作為高等院校本、專科計算機相關專業的Java Web入門進階教材,也可作為廣大計算機程式設計愛好的學習參考書。


《Java Web開發實戰》Java工程師推薦的進階之路

下面給大家分享點本書的乾貨內容,關於JDBC內容繼續給大家學習,想要完整資料的可以銜接檢視之前的文章。

1.1.1 JDBC程式的開發步驟

編寫一個JDBC程式需要完成六個步驟,具體如下。

l 載入並註冊資料庫驅動(Driver類)

l 獲取資料庫連線(Connection物件)

l 獲取SQL語句執行者(Statement物件)

l 執行SQL語句

l 操作結果集(ResultSet物件)

l 回收資料庫資源

編寫JDBC程式的每個步驟離不開JDBC相關API的支援,接下來,本書將對編寫JDBC程式的具體步驟展開詳細講解。

1.1.2 載入並註冊資料庫驅動

JDBC定義了驅動介面java.sql.Driver,MySql資料庫的驅動包為介面java.sql.Driver提供了實現類com.mysql.jdbc.Driver。在實際開發中,一般採用Class類的forName方法載入驅動類,具體實現程式碼如下。

Class.forName("com.mysql.jdbc.Driver");

類載入時,將執行被載入類的靜態程式碼塊,而com.mysql.jdbc.Driver類有一個靜態程式碼塊如下。

static{

         try{

             java.sql.DriverManager.registerDriver(newDriver());

         }catch(SQLExceptione){

              throw new RuntimeException("can't register driver!");

         }

}

因此,Driver類在載入過程中即完成了對驅動的註冊。

1.1.3 獲取資料庫連線

DriverManager類是驅動管理類,管理一組JDBC驅動程式,它透過屬性drivers存入很多驅動類。當DriverManager獲取連線的時候,它會把drivers裡的各個驅動的URL和建立連線時傳進來的URL逐一比較,遇到對應的URL,則會嘗試建立連線。透過DriverManager類獲取連線(Connection物件)的具體實現程式碼如下。

Connection conn = DriverManager.getConnection

(String url, String username, String password);

從上述程式碼片段可以看出,DriverManager類的getConnection()方法共有三個引數,它們分別表示資料庫URL、登入資料庫的使用者名稱和密碼,如果三者均匹配成功,就可獲取資料庫連線,為JDBC實現對資料庫的操作奠定基礎。

1.1.4 獲取SQL語句執行者

Connection物件提供了3種獲取SQL語句執行者(Statement物件)的方法,其中,呼叫createStatement()方法獲取Statement物件,呼叫prepareStatement()方法獲取PreparedSatement物件,呼叫prepareCall()方法獲取CallableStatement物件,以獲取Statement物件為例,具體實現程式碼如下。

Statement statement = conn.createStatement();

如果獲取PreparedStatement物件和CallableStatement物件,還需傳入String型別的SQL語句作為引數。

1.1.5 執行SQL語句並操作結果集

Statement物件提供了3種方法執行SQL語句,其中,execute()方法可以執行任何SQL語句;executeUpdate()方法用於執行DDL語句和DML語句,執行DDL語句時,返回值為0,執行DML語句時,返回值為影響的行數;executeQuery()方法用於執行實現查詢功能的SQL語句,返回值是一個結果集(ResultSet物件)。

以executeQuery()方法為例,具體實現程式碼如下。

ResultSet resultSet = statement.executeQuery(sql);

結果集(ResultSet物件)封裝了執行查詢SQL語句後返回的結果,程式可以透過遍歷結果集獲取每一行的資料。ResultSet物件具有指向其當前資料行的指標,在最開始的時候指標被置於第一行之前,可呼叫ResultSet介面的next()方法將指標移動到下一行,實際應用時常將ResultSet介面的next()方法放在while()迴圈當中,如果有下一行返回True,遍歷繼續進行,沒有下一行時返回False,遍歷結束。

從結果集中獲取資料分為兩個步驟,首先呼叫next()、previous()、first()、last()等方法移動指標,其次呼叫getXxx()方法獲取指標指向行的特定列的值。該方法既可以使用列索引作為引數,也可以使用列名稱作為引數。使用列索引作為引數效能更好,使用列名稱作為引數可讀性更好,操作結果集的具體實現程式碼如下。

while (rs.next()) {

Object object = resultSet.getObject(1);

}

其中,引數“1”表示獲取當前指標指向行的第1列的資料,除此之外,getObject()方法的引數名稱也可以是String型別的資料表的列名,此時getObject()方法獲取該列名對應的資料。

1.1.6 回收資料庫資源

為了節省資源,提升效能,包括 Connection、Statement、ResultSet在內的JDBC資源在使用之後要及時關閉。關閉的正確順序是:先得到的後關閉,後得到的先關閉。回收資料庫資源的具體實現程式碼如下。

resultSet.close();

statement.close();

conn.close();

1.1.7 編寫一個JDBC程式

前面的小節講解了編寫JDBC程式的具體步驟,接下來透過一個例項演示JDBC程式的具體實現。

(1)在MySQL中建立資料庫chapter01和資料表student,SQL語句如下所示。

DROP DATABASE IF EXISTS chapter01;

CREATE DATABASE chapter01;

USE chapter01;

CREATE TABLE student(

sid INT PRIMARY KEY AUTO_INCREMENT, #ID

sname VARCHAR(20), #學生姓名

age VARCHAR(20), #學生年齡

course VARCHAR(20) #專業

);

(2)向資料表student新增資料,SQL語句如下所示。

INSERT INTO student(sname,age,course) VALUES ('zhangsan','20','Java');

INSERT INTO student(sname,age,course) VALUES ('lisi','21','Java');

INSERT INTO student(sname,age,course) VALUES ('wangwu','22','Java');

INSERT INTO student(sname,age,course) VALUES ('zhaoliu','22','Python');

INSERT INTO student(sname,age,course) VALUES ('sunqi','22','PHP');

INSERT INTO student(sname,age,course) VALUES ('zhangsansan','22','PHP');

(3)透過SQL語句測試資料是否新增成功,執行結果如下所示。

mysql> SELECT * FROM STUDENT;

+-----+-------------+------+--------+

| sid | sname      | age | course |

+-----+-------------+------+--------+

|  1 | zhangsan   | 20  | Java  |

|  2 | lisi       | 21  | Java  |

|  3 | wangwu     | 22  | Java  |

|  4 | zhaoliu    | 22  | Python |

|  5 | sunqi      | 22  | PHP   |

|  6 | zhangsansan | 22  | PHP   |

+-----+-------------+------+--------+

6 rows in set (0.00 sec)

從以上執行結果可以看出,資料新增成功。

(4)在Eclipse中新建Java工程chapter01,在工程chapter01下新建目錄lib,將MySQL資料庫的驅動jar包mysql-connector-java-5.1.37-bin.jar複製到lib目錄下,滑鼠右擊lib目錄下的mysql-connector-java-5.1.37-bin.jar,在彈出的選單中選擇Build Path→Add to Build Path,完成jar包的匯入。在工程chapter01的src目錄下新建com.qfedu.jdbc包,在該包下新建類TestJDBC01,具體程式碼如例1-1所示。

【例1-1】  TestJDBC01.java

1 package com.qfedu.jdbc;

2 import java.sql.Connection;

3 import java.sql.DriverManager;

4 import java.sql.ResultSet;

5 import java.sql.Statement;

6 public class TestJDBC01 {

7  public static void main(String[] args) throws Exception {

8  //載入並註冊資料庫驅動

9  Class.forName("com.mysql.jdbc.Driver");

10  String url ="jdbc:mysql://localhost:3306/chapter01";

11  String username="root";

12  String password ="root";

13  //獲取資料庫連線

14    Connection conn

15  =DriverManager.getConnection(url,username,password);

16    Statement statement = conn.createStatement();

17  //獲取執行者物件

18       String sql = "select * from student where sname ='zhangsan' ";

19       //執行SQL語句

20  ResultSet resultSet = statement.executeQuery(sql);

21      System.out.println("sid|sname|age|course");

22       //處理結果集

23       while (resultSet.next()) {

24  int sid = resultSet.getInt("sid");

25       String sname = resultSet.getString("sname");

26       String age = resultSet.getString("age");

27       String course = resultSet.getString("course");

28       System.out.println(sid+"|"+sname+"|"+age+"|"+course);

29  }

30     //關閉資源

31       resultSet.close();

32       statement.close();

33  conn.close();

34  }

35 }

執行TestJDBC01類,具體執行結果如圖1.5所示。


《Java Web開發實戰》Java工程師推薦的進階之路

圖1.1 執行結果

從以上執行結果可以看出,程式查詢出資料表student中的資料並輸出到控制檯。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69916964/viewspace-2651381/,如需轉載,請註明出處,否則將追究法律責任。

相關文章