更新時間:2021-06-07 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
熟悉了JDBC的編程步驟后,接下來通過一個案例并依照上一小節(jié)所講解的步驟來演示JDBC的使用。此案例會從tb_user表中讀取數(shù)據(jù),并將結(jié)果打印在控制臺。
需要說明的是,Java中的JDBC是用來連接數(shù)據(jù)庫從而執(zhí)行相關(guān)數(shù)據(jù)相關(guān)操作的,因此在使用JDBC時,一定要確保安裝有數(shù)據(jù)庫。常用的關(guān)系型數(shù)據(jù)庫有MySQL和Oracle,本書就以連接MySQL數(shù)據(jù)庫為例,使用JDBC執(zhí)行相關(guān)操作。
案例的具體實現(xiàn)步驟如下:
(1) 搭建數(shù)據(jù)庫環(huán)境
在MySQL數(shù)據(jù)庫中創(chuàng)建一個名稱為jdbc的數(shù)據(jù)庫,然后在該數(shù)據(jù)庫中創(chuàng)建一個名稱為tb_user的表,創(chuàng)建數(shù)據(jù)庫和表的SQL語句如下:
CREATE DATABASE jdbc; USE jdbc; CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(40), sex VARCHAR(2), email VARCHAR(60), birthday DATE );上述創(chuàng)建tb_user表時添加了id、NAME、sex、email和birthday共5個字段,其中NAME字段名稱為大寫形式,這是因為name字段在MySQL數(shù)據(jù)庫中屬于關(guān)鍵字,所以為了方便區(qū)分,這里將name字段名稱全部用大寫表示。
數(shù)據(jù)庫和表創(chuàng)建成功后,再向tb_user表中插入3條數(shù)據(jù),插入的SQL語句如下所示:
INSERT INTO tb_user(NAME,sex,email,birthday)
VALUES ('Jack','男','jack@126.com','1980-01-04'),
('Tom','男','tom@126.com','1981-02-14'),
('Lucy','女','lucy@126.com','1979-12-28');為了查看數(shù)據(jù)是否添加成功,使用SELECT語句查詢tb_user表中的數(shù)據(jù),執(zhí)行結(jié)果如圖1所示。

圖1 tb_user表中的數(shù)據(jù)
注意:
數(shù)據(jù)庫和表創(chuàng)建成功后,如果使用的是命令行窗口向tb_user表中插入帶有中文的數(shù)據(jù),命令行窗口可能會報錯,同時從MySQL數(shù)據(jù)庫查詢帶有中文數(shù)據(jù)還可能會顯示亂碼,這是因為MySQL數(shù)據(jù)庫默認(rèn)使用的是UTF-8編碼格式,而命令行窗口默認(rèn)使用的是GBK編碼格式,所以執(zhí)行帶有中文數(shù)據(jù)的插入語句會出現(xiàn)解析錯誤。為了在命令行窗口也能正常向MySQL數(shù)據(jù)庫插入中文數(shù)據(jù),以及查詢中文數(shù)據(jù),可以在執(zhí)行插入語句和查詢語句前,先在命令行窗口執(zhí)行以下兩條命令:
set character_set_client=gbk; set character_set_results=gbk;
執(zhí)行完上述兩條命令后,再次在命令行窗口執(zhí)行插入和查詢操作就不再出現(xiàn)亂碼問題了。
(1) 創(chuàng)建項目環(huán)境,導(dǎo)入數(shù)據(jù)庫驅(qū)動
在Eclipse中新建一個名稱為chapter09的Java項目,使用鼠標(biāo)右鍵單擊項目名稱,然后選擇【New】→【Folder】,在彈出窗口中將該文件夾命名為lib并單擊【Finish】按鈕,此時項目根目錄中就會出現(xiàn)一個名稱為lib的文件夾。將下載好的MySQL數(shù)據(jù)庫驅(qū)動文件Jar包(mysql-connector-java-5.1.46-bin.jar)復(fù)制到項目的lib目錄中,并使用鼠標(biāo)右擊該JAR包,在彈出框中選擇【Build Path】→【Add to Build Path】,此時Eclipse會將該JAR包發(fā)布到類路徑下。加入驅(qū)動后的項目結(jié)構(gòu)如圖2所示。

其中,MySQL驅(qū)動文件可以在其官網(wǎng)地址:http://dev.mysql.com/downloads/connector/j/頁面中下載,單擊頁面Platform Independent (Architecture Independent), ZIP Archive后的“Download”按鈕,并在新打開的窗口中的單擊 “No thanks, just start my download”超鏈接后即可下載驅(qū)動壓縮包(本書編寫時的最新驅(qū)動版本文件是mysql-connector-java-5.1.46.zip),解壓后即可得到相應(yīng)JAR包。
(1) 編寫JDBC程序
在項目chapter09的src目錄下,新建一個名稱為com.itheima.jdbc的包,并在該包中創(chuàng)建類Example01。在該類讀取數(shù)據(jù)庫中的tb_user表,并將結(jié)果輸出到控制臺,如文件1所示。
文件1 Example01.java
import java.sql.*;
public class Example01 {
public static void main(String[] args) throws SQLException {
Connection conn =null;
Statement stmt =null;
ResultSet rs =null;
try {
// 1. 加載數(shù)據(jù)庫驅(qū)動
Class.forName("com.mysql.jdbc.Driver");
// 2.通過DriverManager獲取數(shù)據(jù)庫連接
String url = "jdbc:mysql://localhost:3306/jdbc";
String username = "root";
String password = "root";
conn = DriverManager.getConnection(url,username, password);
// 3.通過Connection對象獲取Statement對象
stmt = conn.createStatement();
// 4.使用Statement執(zhí)行SQL語句
String sql = "select * from tb_user";
rs = stmt.executeQuery(sql);
// 5. 操作ResultSet結(jié)果集
System.out.println("id | name | sex "
+ " | email | birthday ");
while (rs.next()) {
int id = rs.getInt("id"); // 通過列名獲取指定字段的值
String name = rs.getString("name");
String sex = rs.getString("sex");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id + " | " + name + " | "
+ sex + " | " + email + " | " + birthday);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6.關(guān)閉連接,釋放資源
if(rs !=null){ rs.close(); }
if(stmt !=null){ stmt.close(); }
if(conn !=null){ conn.close(); }
}
}
}運(yùn)行結(jié)果如圖3所示。

圖3 運(yùn)行結(jié)果
文件1中,首先注冊了MySQL數(shù)據(jù)庫驅(qū)動,通過DriverManager獲取一個Connection對象,然后使用Connection對象創(chuàng)建一個Statement對象,Statement對象通過executeQuery(String sql)方法執(zhí)行了SQL語句,并返回結(jié)果集ResultSet,接下來,通過遍歷ResultSet得到查詢結(jié)果并輸出,最后關(guān)閉連接,釋放數(shù)據(jù)庫資源。
從圖3中可以看到,tb_user表中的數(shù)據(jù)已被打印在了控制臺。至此第一個JDBC程序?qū)崿F(xiàn)成功。
注意:
在進(jìn)行數(shù)據(jù)庫連接時,連接MySQL數(shù)據(jù)庫的username和password都要與創(chuàng)建MySQL數(shù)據(jù)庫時設(shè)置的登錄賬戶一致,否則登錄失敗。本章以及后續(xù)案例都默認(rèn)MySQL數(shù)據(jù)庫登錄的username和password都為“root”。
猜你喜歡: