JDBC連接MySQL數(shù)據(jù)庫(kù)及示例
JDBC 連接MySQL 數(shù)據(jù)庫(kù)及示例 JDBC 是Sun 公司制定的一個(gè)可以用Java 語(yǔ)言連接數(shù)據(jù)庫(kù)的技術(shù)。一、JDBC 基礎(chǔ)知識(shí)JDBC(Java Data Base Connectivity
JDBC 連接MySQL 數(shù)據(jù)庫(kù)及示例 JDBC 是Sun 公司制定的一個(gè)可以用Java 語(yǔ)言連接數(shù)據(jù)庫(kù)的技術(shù)。
一、JDBC 基礎(chǔ)知識(shí)
JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL 語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪(fǎng)問(wèn),它由一組用Java 語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC 為數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API ,據(jù)此可以構(gòu)建 更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠用純 Java API 編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,并且可跨平臺(tái)運(yùn)行,并且不受數(shù)據(jù)庫(kù)供應(yīng)商的限制。
1、跨平臺(tái)運(yùn)行:這是繼承了Java 語(yǔ)言的“一次編譯,到處運(yùn)行”的特點(diǎn);
2、不受數(shù)據(jù)庫(kù)供應(yīng)商的限制:巧妙在于JDBC 設(shè)有兩種接口,一個(gè)是面向應(yīng)用程序?qū)樱渥饔檬鞘沟瞄_(kāi)發(fā)人員通過(guò) SQL調(diào)用數(shù)據(jù)庫(kù)和處理結(jié)果,而不需要考慮數(shù)據(jù)庫(kù)的提供商;另一個(gè)是驅(qū)動(dòng)程序?qū)?,處理與具體驅(qū)動(dòng)程序的交互,JDBC 驅(qū)動(dòng)程序可以利用JDBC API 創(chuàng)建Java 程序和數(shù)據(jù)源之間的橋梁。應(yīng)用程序只需要編寫(xiě)一次,便可以移到各種驅(qū)動(dòng)程序上運(yùn)行。Sun 提供了一個(gè)驅(qū)動(dòng)管理器,數(shù)據(jù)庫(kù)供應(yīng)商——如 MySQL、Oracle ,提供的驅(qū)動(dòng)程序滿(mǎn)足驅(qū)動(dòng)管理器的要求就可以被識(shí)別,就可以正常工作。所以JDBC 不受數(shù)據(jù)庫(kù)供應(yīng)商的限制。
JDBC API 可以作為連接Java 應(yīng)用程序與各種關(guān)系數(shù)據(jù)庫(kù)的紐帶,在帶來(lái)方便的同時(shí)也有負(fù)面影響,以下是JDBC 的優(yōu)、缺點(diǎn)。優(yōu)點(diǎn)如下:
操作便捷:JDBC 使得開(kāi)發(fā)人員不需要再使用復(fù)雜的驅(qū)動(dòng)器調(diào)用命令和函數(shù);
? 可移植性強(qiáng):JDBC 支持不同的關(guān)系數(shù)據(jù)庫(kù),所以可以使同一個(gè)應(yīng)用程序支持多個(gè)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn),只要加載相應(yīng)的驅(qū)動(dòng)程序即可; ? 通用性好:JDBC-ODBC 橋接驅(qū)動(dòng)器將JDBC 函數(shù)換成ODBC ; ? 面向?qū)ο螅嚎梢詫⒊S玫腏DBC 數(shù)據(jù)庫(kù)連接封裝成一個(gè)類(lèi),在使用的時(shí)候直接調(diào)用即可。 ?
缺點(diǎn)如下:
訪(fǎng)問(wèn)數(shù)據(jù)記錄的速度受到一定程度的影響;
? 更改數(shù)據(jù)源困難:JDBC 可支持多種數(shù)據(jù)庫(kù),各種數(shù)據(jù)庫(kù)之間的操作必有不同,這就給更改數(shù)據(jù)源帶來(lái)了很大的麻煩 ?
,二、JDBC 連接數(shù)據(jù)庫(kù)的流程及其原理
1、在開(kāi)發(fā)環(huán)境中加載指定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序。例如,接下來(lái)的實(shí)驗(yàn)中,使用的數(shù)據(jù)庫(kù)是MySQL ,所以需要去下載MySQL 支持JDBC 的驅(qū)動(dòng)程序(最新的是:mysql-connector-java-5.1.18-bin.jar ) ;而開(kāi)發(fā)環(huán)境是MyEclipse ,將下載得到的驅(qū)動(dòng)程序加載進(jìn)開(kāi)發(fā)環(huán)境中(具體示例的時(shí)候會(huì)講解如何加載) 。
2、在Java 程序中加載驅(qū)動(dòng)程序。在Java 程序中,可以通
過(guò) “Class.forName (“指定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序”)” 方式來(lái)加載添加到開(kāi)發(fā)環(huán)境中的驅(qū)動(dòng)程序,例如加載MySQL 的數(shù)據(jù)驅(qū)動(dòng)程序的代碼
為: Class.forName(“com.mysql.jdbc.Driver”)
3、創(chuàng)建數(shù)據(jù)連接對(duì)象:通過(guò)DriverManager 類(lèi)創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象Connection 。DriverManager 類(lèi)作用于Java 程序和JDBC 驅(qū)動(dòng)程序之間,用于檢查所加載的驅(qū)動(dòng)程序是否可以建立連接,然后通過(guò)它的getConnection 方法,根據(jù)數(shù)據(jù)庫(kù)的URL 、用戶(hù)名和密碼,創(chuàng)建一個(gè)JDBC Connection 對(duì)象。如:Connection
connection = DriverManager.geiConnection(“連接數(shù)據(jù)庫(kù)的URL", "用戶(hù)名", "密碼”)。其中,URL=協(xié)議名 IP地址(域名) 端口 數(shù)據(jù)庫(kù)名稱(chēng);用戶(hù)名和密碼是指登錄數(shù)據(jù)庫(kù)時(shí)所使用的用戶(hù)名和密碼。具體示例創(chuàng)建MySQL 的數(shù)據(jù)庫(kù)連接代碼如下:
Connection
connectMySQL = DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );
4、創(chuàng)建Statement 對(duì)象:Statement 類(lèi)的主要是用于執(zhí)行靜態(tài) SQL 語(yǔ)句并返回它所生成結(jié)果的對(duì)象。通過(guò)Connection 對(duì)象的 createStatement()方法可以創(chuàng)建一個(gè)Statement 對(duì)象。例如:Statement statament =
connection.createStatement(); 具體示例創(chuàng)建Statement 對(duì)象代碼如下: Statement statamentMySQL
=connectMySQL.createStatement();
,5、調(diào)用Statement 對(duì)象的相關(guān)方法執(zhí)行相對(duì)應(yīng)的 SQL 語(yǔ)句:通過(guò)execuUpdate()方法用來(lái)數(shù)據(jù)的更新,包括插入和刪除等操作,例如向staff 表中插入一條數(shù)據(jù)的代碼:
statement.excuteUpdate( "INSERT INTO staff(name, age,
sex,address, depart, worklen,wage)" " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;
通過(guò)調(diào)用Statement 對(duì)象的executeQuery()方法進(jìn)行數(shù)據(jù)的查詢(xún),而查詢(xún)結(jié)果會(huì)得到 ResulSet對(duì)象,ResulSet 表示執(zhí)行查詢(xún)數(shù)據(jù)庫(kù)后返回的數(shù)據(jù)的集合,ResulSet 對(duì)象具有可以指向當(dāng)前數(shù)據(jù)行的指針。通過(guò)該對(duì)象的 next()方法,使得指針指向下一行,然后將數(shù)據(jù)以列號(hào)或者字段名取出。如果當(dāng)next()方法返回null ,則表示下一行中沒(méi)有數(shù)據(jù)存在。使用示例代 碼如下:
ResultSet resultSel = statement.executeQuery( "select * from staff" );
6、關(guān)閉數(shù)據(jù)庫(kù)連接:使用完數(shù)據(jù)庫(kù)或者不需要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),通過(guò)Connection 的close() 方法及時(shí)關(guān)閉數(shù)據(jù)連接。
三、JDBC 應(yīng)用示例實(shí)驗(yàn)
實(shí)驗(yàn)內(nèi)容:使用phpMyAdmin 在MySQL 中創(chuàng)建數(shù)據(jù)庫(kù)(myuser ),并添加實(shí)驗(yàn)所需的數(shù)據(jù)(新建staff 表,添加一些記錄);編寫(xiě)Java 程序,利用JDBC 連接在MySQL 中創(chuàng)建好的數(shù)據(jù)庫(kù)(myuser ),對(duì)staff 表格進(jìn)行插入、更新、刪除和查詢(xún)等操作。
實(shí)驗(yàn)環(huán)境及開(kāi)發(fā)工具:Win7操作系統(tǒng);jdk1.6.0_26;XAMPP 1.7.7(MySQL
5.1, phpMyAdmin);MyEclipse 8.5
實(shí)驗(yàn)過(guò)程及步驟:
1、下載MySQL 支持JDBC 的驅(qū)動(dòng)程序:如果已經(jīng)有了,可跳過(guò)這一步。前往MySQL 官網(wǎng)(http://www.mysql.com/products/connector/ ) 下載驅(qū)動(dòng)程序, ,MySQL 針對(duì)不同的平臺(tái)提供了不同的連接器,我們需要的是DBC Driver for MySQL (Connector/J),如下圖所示,點(diǎn)擊 Download 跟著網(wǎng)站的引導(dǎo)進(jìn)行下載。打開(kāi)下載得到的壓縮包(mysql-connector-java-5.1.18.zip ),將其中的Java 包(mysql- connector-java-5.1.18-bin.jar),復(fù)制到MySQL 目錄下(僅是為了方便才放到這里) ,以備加載驅(qū)動(dòng)程序時(shí)使用。
,

2、創(chuàng)建數(shù)據(jù)庫(kù):使用phpMyAdmin ,登錄MySQL ,創(chuàng)建數(shù)據(jù)庫(kù)myuser ,并在其中插入一個(gè)名為staff 的表格。并添加一些數(shù)據(jù),操作步驟如圖,登錄進(jìn)去MySQL 數(shù)據(jù)庫(kù)后:
1)創(chuàng)建數(shù)據(jù)庫(kù),名稱(chēng)為myuser ,編碼為utf8_general_ci(支持中文);
2)新建表格,名稱(chēng)為staff ,表格有8個(gè)字段;


3)8個(gè)字段的設(shè)置,包括名稱(chēng)、類(lèi)型、值的長(zhǎng)度、初始值、編碼等等(點(diǎn)擊查看大圖) ;
4)添加成功后,查看的staff 表格情況:



5)往表格中插入一些實(shí)驗(yàn)所需數(shù)據(jù),需要插入兩條,一個(gè)是員工lucy 的,還有l(wèi)ili 的:


3、在MyEclips 中創(chuàng)建項(xiàng)目并在項(xiàng)目中添加MySQL 驅(qū)動(dòng)程序:創(chuàng)建的項(xiàng)目類(lèi)型可以是 Java項(xiàng)目或者是Java Web 項(xiàng)目都可以。這里創(chuàng)建的是Web 項(xiàng)目,項(xiàng)目名稱(chēng)可以隨便取,我命名為“JavaWebChp07”。創(chuàng)建成功后將步驟1里下載得到的MySQL 驅(qū)動(dòng) 程序包(mysql-connector-java-5.1.18-bin.jar )添加到工程的Build path中,添加過(guò)程如圖所示:


4、編寫(xiě)JDBC 連接MySQL 數(shù)據(jù)庫(kù)的實(shí)例具體代碼,JDBC_Test.java:


具體代碼:
[java] view plaincopy
1.
package chp07;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 JDBC_Test {
10. // 創(chuàng)建靜態(tài)全局變量
11. static Connection conn;
12.
13. static Statement st;
14.
15. public static void main(String[] args) {
16. insert(); //插入添加記錄
17. update(); //更新記錄數(shù)據(jù)
18. delete(); //刪除記錄
19. query(); //查詢(xún)記錄并顯示
20. }
21.
22. /* 插入數(shù)據(jù)記錄,并輸出插入的數(shù)據(jù)記錄數(shù)*/
23. public static void insert() {
24.
25. conn = getConnection(); // 首先要獲取連接,即連接到數(shù)據(jù)庫(kù)
26.
27. try {
28. String sql = "INSERT INTO staff(name, age, sex,addr
ess, depart, worklen,wage)"
