JAVA語言程序設(shè)計教程第12章Java數(shù)據(jù)庫編程_第1頁
JAVA語言程序設(shè)計教程第12章Java數(shù)據(jù)庫編程_第2頁
JAVA語言程序設(shè)計教程第12章Java數(shù)據(jù)庫編程_第3頁
JAVA語言程序設(shè)計教程第12章Java數(shù)據(jù)庫編程_第4頁
JAVA語言程序設(shè)計教程第12章Java數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第12章 Java數(shù)據(jù)庫編程 1 1 第 12 章Java數(shù)據(jù)庫編程 12.1 MySQL簡介簡介 12.2 MySQL的控制臺操作的控制臺操作 12.3 在在Java中執(zhí)行中執(zhí)行SQL語句語句 12.4 JTable組件的操作組件的操作 第12章 Java數(shù)據(jù)庫編程 2 2 12.1 MySQL簡介簡介 MySQL數(shù)據(jù)庫是一個開放源代碼的數(shù)據(jù)庫,其特點是簡 單易用,開源免費,因此被廣泛用于各種實際項目中。對一般 個人使用者和中小型企業(yè)來說,MySQL提供的功能已經(jīng)綽綽 有余,而且由于MySQL是開放源碼軟件,因此可以大大降低 總體擁有成本。 第12章 Java數(shù)據(jù)庫編程 3 3 目前流行的網(wǎng)

2、站構(gòu)架方式LAMP(Linux+Apache+MySQL+ PHP),就是使用Linux作為操作系統(tǒng),Apache作為Web服務(wù)器, MySQL作為數(shù)據(jù)庫,PHP作為服務(wù)器端腳本解釋器。由于這 四個軟件都是自由或開放源碼的軟件(FLOSS),因此使用這種 方式不用花一分錢就可以建立起一個穩(wěn)定、免費的網(wǎng)站系統(tǒng)。 MySQL官方網(wǎng)站的網(wǎng)址是:。 第12章 Java數(shù)據(jù)庫編程 4 4 12.2 MySQL的控制臺操作的控制臺操作 12.2.1 數(shù)據(jù)庫的連接與使用數(shù)據(jù)庫的連接與使用 1. 連接MySQL 安裝好MySQL后,在MySQL根目錄下,鍵入命令mysql - u用戶名 -p密碼,即可連接到M

3、ySQL數(shù)據(jù)庫。操作界面如圖 12.1所示。 第12章 Java數(shù)據(jù)庫編程 5 5 圖12.1 MySQL數(shù)據(jù)庫 第12章 Java數(shù)據(jù)庫編程 6 6 2. 查詢數(shù)據(jù)庫 控制臺連接到MySQL數(shù)據(jù)庫后,將顯示提示符mysql。 后續(xù)我們就可以在上面執(zhí)行各種SQL語句,操作MySQL數(shù)據(jù) 庫。下面我們先簡單演示下常用的幾個語句。首先是查看已有 數(shù)據(jù)庫的show databases語句。在輸入語句:show databases后, 如圖12.2所示,系統(tǒng)將顯示MySQL中已經(jīng)創(chuàng)建好的數(shù)據(jù)庫名稱。 第12章 Java數(shù)據(jù)庫編程 7 7 圖12.2 查看數(shù)據(jù)庫信息 第12章 Java數(shù)據(jù)庫編程 8 8

4、 3. 創(chuàng)建數(shù)據(jù)庫 接下來我們將創(chuàng)建并使用一個名為“test”的數(shù)據(jù)庫,并在 “test”數(shù)據(jù)庫里面,演示數(shù)據(jù)表的各種常見SQL操作語句。 首先創(chuàng)建數(shù)據(jù)庫,使用下面的語句。 語句格式: create database 數(shù)據(jù)庫名稱 圖12.3為利用create命令創(chuàng)建一個名字為test的數(shù)據(jù)庫。 第12章 Java數(shù)據(jù)庫編程 9 9 圖12.3 創(chuàng)建數(shù)據(jù)庫 第12章 Java數(shù)據(jù)庫編程 10 10 4. 使用數(shù)據(jù)庫 要使用數(shù)據(jù)庫,可以選擇下面的語句。 語句格式: use 數(shù)據(jù)庫名稱 圖12.4為使用USC語句使用數(shù)據(jù)庫的顯示效果。 第12章 Java數(shù)據(jù)庫編程 11 11 圖12.4 使用數(shù)據(jù)庫

5、 第12章 Java數(shù)據(jù)庫編程 12 12 12.2.2 表的創(chuàng)建、修改和刪除操作表的創(chuàng)建、修改和刪除操作 1. 創(chuàng)建表 語句格式: create table 表名 如果表已存在,則使用關(guān)鍵詞IF NOT EXISTS可以防止發(fā) 生錯誤。 在創(chuàng)建表時,如果只想創(chuàng)建臨時表,可以使用 TEMPORARY關(guān)鍵詞。只有在當(dāng)前連接情況下, TEMPORARY表才是可見的。當(dāng)連接關(guān)閉時,TEMPORARY 表自動消失。 第12章 Java數(shù)據(jù)庫編程 13 13 這意味著兩個不同的連接可以使用相同的臨時表名稱,同 時兩個臨時表不會互相沖突,也不與原有同名的非臨時表沖突 (原有的表被隱藏,直到臨時表被取消為止

6、)。但需要注意:必 須擁有CREATE TEMPORARY TABLES權(quán)限,才能創(chuàng)建臨時表。 圖12.5為創(chuàng)建一個表名為person的數(shù)據(jù)表,包含的字段有:id、 name、age、password,第一個為自動生成的序號,并設(shè)置為 主鍵,name和password為字符型,age為整型。 第12章 Java數(shù)據(jù)庫編程 14 14 圖12.5 創(chuàng)建表 第12章 Java數(shù)據(jù)庫編程 15 15 2. 修改表 語句格式: alter table 表名 add/drop/modify; 增加列格式: alter table tbl_name add col_name type; 例如,給表增加一列

7、: alter table person add address varchar(20); 結(jié)果如圖12.6所示。 第12章 Java數(shù)據(jù)庫編程 16 16 圖12.6 給表增加一列 第12章 Java數(shù)據(jù)庫編程 17 17 改變一個字段的默認(rèn)值: alter table table_name alter column_name set default value; 刪除列格式格式: alter table tbl_name drop col_name; 例如,刪除剛才創(chuàng)建的那一列: alter table person drop address; 結(jié)果如圖12.7所示。 第12章 Java數(shù)

8、據(jù)庫編程 18 18 圖12.7 刪除表中一列 第12章 Java數(shù)據(jù)庫編程 19 19 更改表名格式: alter table tbl_name rename new_tbl; 例如,把person表更名為person1: alter table person rename person1; 結(jié)果如圖12.8所示。 第12章 Java數(shù)據(jù)庫編程 2020 圖12.8 改變表的名字 第12章 Java數(shù)據(jù)庫編程 21 21 3. 刪除表 語句格式: drop table tbl_name; 或者是 drop table if exists tbl_name; 此命令把數(shù)據(jù)表從數(shù)據(jù)庫中永久刪除,

9、一般慎用。 第12章 Java數(shù)據(jù)庫編程 2222 12.2.3 數(shù)據(jù)的增刪改查操作數(shù)據(jù)的增刪改查操作 創(chuàng)建好數(shù)據(jù)庫表之后,就可以通過增刪改查操作,往數(shù) 據(jù)庫表里存取各種數(shù)據(jù)。 1. 插入數(shù)據(jù) 語句格式: insert into表名 第12章 Java數(shù)據(jù)庫編程 2323 可以使用下面的方式向表中插入數(shù)據(jù): insert into tableName (col1,col2.) values (val1,val2.); /向某個表中的特定字段添加相應(yīng)的數(shù)據(jù) 圖12.9所示為在表中插入數(shù)據(jù)后的返回結(jié)果。 第12章 Java數(shù)據(jù)庫編程 2424 圖12.9 在表中插入數(shù)據(jù) 第12章 Java數(shù)據(jù)庫編

10、程 2525 直接給某個表中的某個字段設(shè)定值: insert into tableName set col1=val1; 運行結(jié)果如圖12.10所示。 圖12.10 給表中的某個字段設(shè)定值 第12章 Java數(shù)據(jù)庫編程 2626 根據(jù)表中定義的字段順序插入相應(yīng)的數(shù)據(jù): insert into tableName values(val1, val2,) /根據(jù)表中定義的字段順序插入相應(yīng)的數(shù)據(jù) 運行結(jié)果如圖12.11所示。 圖12.11 按照表中的字段順序插入相應(yīng)的數(shù)據(jù) 第12章 Java數(shù)據(jù)庫編程 2727 2. 刪除數(shù)據(jù) 語句格式: delete from 表名 where 要刪除的記錄 語句

11、運行結(jié)果如圖12.12所示。 第12章 Java數(shù)據(jù)庫編程 2828 圖12.12 刪除數(shù)據(jù) 第12章 Java數(shù)據(jù)庫編程 2929 3. 修改數(shù)據(jù) 語句格式: update tab_name set col1=val1 where條件 語句運行結(jié)果如圖12.13所示。 第12章 Java數(shù)據(jù)庫編程 3030 圖12.13 修改表中的數(shù)據(jù) 第12章 Java數(shù)據(jù)庫編程 31 31 4. 查詢數(shù)據(jù) 數(shù)據(jù)表都已經(jīng)創(chuàng)建起來了,假設(shè)我們已經(jīng)插入了許多的數(shù) 據(jù),我們就可以用自己喜歡的方式對數(shù)據(jù)表里面的信息進(jìn)行檢 索和顯示了。比如說:可以像下面這樣把整個數(shù)據(jù)表的內(nèi)容都 顯示出來。 語句格式: select

12、 from where order by /缺省按照升序進(jìn)行 排序 語句運行結(jié)果如圖12.14所示。 第12章 Java數(shù)據(jù)庫編程 3232 圖12.14 查詢表中數(shù)據(jù) 第12章 Java數(shù)據(jù)庫編程 3333 要想讓select語句只把滿足特定條件的記錄檢索出來,就 必須給它加上where字句來設(shè)置數(shù)據(jù)行的檢索條件。只有這樣, 才能有選擇地把數(shù)據(jù)列中取值滿足特定要求的那些數(shù)據(jù)行挑選 出來。可以針對任何類型的值進(jìn)行查找,比如說對數(shù)值進(jìn)行搜 索。數(shù)據(jù)查詢結(jié)果如圖12.15所示。 第12章 Java數(shù)據(jù)庫編程 3434 圖12.15 查詢表中數(shù)據(jù)(按照id排列) 第12章 Java數(shù)據(jù)庫編程 353

13、5 一般說來,如果創(chuàng)建了一個數(shù)據(jù)表并向里面插入了一些記 錄,當(dāng)發(fā)出一條select * from name命令的時候,數(shù)據(jù)記錄在查 詢結(jié)果中的顯示順序通常與它們被插入時的先后順序一樣。這 當(dāng)然符合我們的思維習(xí)慣,但這只是一種“想當(dāng)然”的假設(shè)而 已。事實上,記錄被刪除時,數(shù)據(jù)庫中會產(chǎn)生一些空的區(qū)域, MySQL會用新的記錄來填補(bǔ)這些區(qū)域,也就是說,這個時候 本假設(shè)就不正確了。因此我們必須記住一點,從服務(wù)器返回的 記錄行的先后順序是沒有任何保證的!如果想要按照一定的順 序顯示,就必須使用order by子句來設(shè)置這個順序,結(jié)果如圖 12.16所示。 第12章 Java數(shù)據(jù)庫編程 3636 圖12.

14、16 查詢表中數(shù)據(jù)(按照age排列) 第12章 Java數(shù)據(jù)庫編程 3737 2.3 在在Java中執(zhí)行中執(zhí)行SQL語句語句 12.3.1 JDBC和數(shù)據(jù)庫連接和數(shù)據(jù)庫連接 1. JDBC簡介 JDBC是Java數(shù)據(jù)庫編程的核心組成部分。JDBC的全稱是 Java Data Base Connectivity,即Java數(shù)據(jù)庫連接,它由一組類 和接口組成,為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問,主要用來執(zhí) 行SQL語句。JDBC API包括兩個重要的包:java.sql和javax.sql。 第12章 Java數(shù)據(jù)庫編程 3838 下面介紹JDBC常用的幾個接口: DriverManager:用于管理

15、JDBC驅(qū)動的服務(wù)類,通常使用 該類來獲取Connection對象。 Connection:數(shù)據(jù)庫連接對象,每個Connection代表一個 物理連接session。 Statement:用于執(zhí)行SQL語句的工具接口,常用于執(zhí)行 SQL查詢。 ResultSet:結(jié)果集對象,含有訪問查詢結(jié)果的各種方法, 例如可以通過列索引或者列名獲得列數(shù)據(jù)。 第12章 Java數(shù)據(jù)庫編程 3939 2. Java連接數(shù)據(jù)庫 連接數(shù)據(jù)庫之前,首先進(jìn)行準(zhǔn)備工作: (1) 下載JDBC的MySQL驅(qū)動mysql-connector-Java-5.0.5.zip。 (2) 把MySQL安裝目錄下的mysql-conn

16、ector-Java-5.0.5- bin.jar加到系統(tǒng)環(huán)境的classpath中,具體操作如下: 第12章 Java數(shù)據(jù)庫編程 4040 “我的電腦”“屬性”“高級”“環(huán)境變量”,然后 在系統(tǒng)變量中編輯classpath,將“; D:mysql-connector-Java- 5.0.5mysql-connector-Java-5.0.5-bin.jar”加到最后,注意我們需 要使用字符串前面的“;”來將語句與前一個classpath區(qū)分開。 (3) 配置MySQL,設(shè)其用戶名為“root”,密碼為 “123456”,再建立數(shù)據(jù)庫test。 接下來就可以使用代碼進(jìn)行連接: 第12章 Jav

17、a數(shù)據(jù)庫編程 41 41 (1) 加載驅(qū)動程序。 String driver = “com.mysql.jdbc.Driver”; Class.forName(driver); / 加載驅(qū)動程序 (2) 通過DriverManager到得一個與數(shù)據(jù)庫連接的句柄。 Connection conn = null; conn = DriverManager.getConnection(dbName, name, pw); (3) 通過連接句柄綁定要執(zhí)行的語句。 Statement stme = conn.createStatement(); 經(jīng)過這幾步,就可以連接到數(shù)據(jù)庫上了。 第12章 Java數(shù)

18、據(jù)庫編程 4242 第12章 Java數(shù)據(jù)庫編程 4343 第12章 Java數(shù)據(jù)庫編程 4444 3. 釋放連接 對數(shù)據(jù)庫進(jìn)行操作前需要先建立連接,然后才能操作、使 用數(shù)據(jù)庫里面的數(shù)據(jù)。因為connection和resultset需要消費比較 多資源,所以通常我們使用完connection和resultset后就要將其 關(guān)閉,以避免資源浪費和多用戶環(huán)境下的資源競爭沖突。 第12章 Java數(shù)據(jù)庫編程 4545 第12章 Java數(shù)據(jù)庫編程 4646 12.3.2 Java對數(shù)據(jù)庫的增刪改查操作對數(shù)據(jù)庫的增刪改查操作 1. 查詢數(shù)據(jù) 在Java中執(zhí)行SQL語句非常容易,只要使用Statemen

19、t對象 執(zhí)行定義好的標(biāo)準(zhǔn)SQL語句即可。執(zhí)行后得到的結(jié)果集存放在 ResultSet中,再使用結(jié)果集的getInt()或者getString()等方法得 到每一列的數(shù)據(jù)。 第12章 Java數(shù)據(jù)庫編程 4747 第12章 Java數(shù)據(jù)庫編程 4848 第12章 Java數(shù)據(jù)庫編程 4949 圖12.17 例12-3運行結(jié)果 第12章 Java數(shù)據(jù)庫編程 5050 2. 插入數(shù)據(jù) 在Java中執(zhí)行MySQL數(shù)據(jù)表的插入操作和前述的查詢語 句非常類似,只是調(diào)用了不同的方法。 【例12-4】 使用SQL語句插入數(shù)據(jù)的代碼示例。 第12章 Java數(shù)據(jù)庫編程 51 51 第12章 Java數(shù)據(jù)庫編程

20、5252 圖12.18 例12-4運行結(jié)果 第12章 Java數(shù)據(jù)庫編程 5353 3. 修改數(shù)據(jù) 例12.15中采用拼接字符串的方式形成相應(yīng)的SQL語句。 需要注意的是,拼接的時候,若傳入的參數(shù)是String類型,則 要在該參數(shù)前后加上單引號以與其他SQL內(nèi)容區(qū)分開。寫好語 句之后,就可以直接執(zhí)行更新、修改操作了。 第12章 Java數(shù)據(jù)庫編程 5454 第12章 Java數(shù)據(jù)庫編程 5555 程序執(zhí)行結(jié)果如圖12.19所示。 圖12.19 例12-5運行結(jié)果 第12章 Java數(shù)據(jù)庫編程 5656 第12章 Java數(shù)據(jù)庫編程 5757 圖12.20 例12-6運行結(jié)果 第12章 Java

21、數(shù)據(jù)庫編程 5858 12.3.3 預(yù)處理語句的應(yīng)用預(yù)處理語句的應(yīng)用 使用預(yù)處理語句preparedStatement,不但可以提高SQL語 句的執(zhí)行效率,而且能提高代碼的可讀性和可維護(hù)性。建議在 盡可能的情況下,都要優(yōu)先使用預(yù)處理語句。 【例12-7】 不使用預(yù)處理語句和使用預(yù)處理語句 preparedStatement的代碼示例。 第12章 Java數(shù)據(jù)庫編程 5959 第12章 Java數(shù)據(jù)庫編程 6060 12.3.4 結(jié)果集的選擇結(jié)果集的選擇 我們用Statement或PreparedStatement實例執(zhí)行SQL查詢語 句后,將得到一個ResultSet 對象。該對象類型可以分為

22、三種: 基本結(jié)果集、可滾動結(jié)果集和可更新結(jié)果集?,F(xiàn)在我們先解釋 可滾動結(jié)果集。 第12章 Java數(shù)據(jù)庫編程 61 61 1. 可滾動結(jié)果集 可滾動結(jié)果集提供了處理結(jié)果集游標(biāo)的各種方法,使得游 標(biāo)能自由的在大部分結(jié)果集中滾動,解決了基本結(jié)果集只能往 前滾動的局限性(因為基本結(jié)果集只提供兩個獲取結(jié)果集游標(biāo) 的方法,分別是next()和getXXX()??蓾L動結(jié)果集為游標(biāo)提供 了多種滾動操作方式,例如: 第12章 Java數(shù)據(jù)庫編程 6262 absolute(int row):把游標(biāo)移至給定的行。 afterLast():把游標(biāo)移動到最后一行后面。 beforeFirst():把游標(biāo)移動到第1行

23、前面。 isAfterLast():判斷游標(biāo)是否在最后一行后面。 isBeforeFirst():判斷游標(biāo)是否在第1行前面。 first():把游標(biāo)移動到第1行。 last():把游標(biāo)移動到最后一行。 isFirst():判斷游標(biāo)是否在第1行。 第12章 Java數(shù)據(jù)庫編程 6363 isLast():判斷游標(biāo)是否在最后一行。 previous():把游標(biāo)移動到所在行的前一行。 next():把游標(biāo)移動到所在行的后一行。 relative():把游標(biāo)相對移動幾行。 getRow():獲取當(dāng)前行數(shù)。 要使用這種方式,只需在創(chuàng)建結(jié)果集的時候,將結(jié)果集的 type設(shè)置為: TYPE_SCROLL_I

24、NSENSITIVE 第12章 Java數(shù)據(jù)庫編程 6464 【例12-8】 設(shè)置結(jié)果集的type值,使其成為可滾動結(jié)果集。 代碼如下所示。 第12章 Java數(shù)據(jù)庫編程 6565 2. 可更新結(jié)果集 我們也可將結(jié)果集設(shè)置為可更新結(jié)果集,顧名思義就是可 以更新結(jié)果集以及數(shù)據(jù)庫。使用這種方式,在創(chuàng)建結(jié)果集的時 候使用ResultSet.CONCUR_UPDATE。 第12章 Java數(shù)據(jù)庫編程 6666 第12章 Java數(shù)據(jù)庫編程 6767 12.4 JTable組件的操作組件的操作 JTable是Swing編程中很常用的控件,其表格由兩部分組 成:行標(biāo)題(Column Header)與行對象

25、(Column Object)。要使用 JTable操作數(shù)據(jù)庫表的話,可以這樣做:首先定義好行標(biāo)題, 也就是顯示的第一行標(biāo)題行顯示的內(nèi)容;然后,到數(shù)據(jù)庫里面 查找內(nèi)容;我們也知道,查找出來的內(nèi)容是一個二維數(shù)據(jù),最 后將二維數(shù)組表轉(zhuǎn)成行對象返回即可。 第12章 Java數(shù)據(jù)庫編程 6868 其次,它還有很多設(shè)置屬性的方法,例如: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /窗口點擊關(guān)閉操作 frame.setTitle(“JTable測試”); /設(shè)置table的title frame.setSize(DEFULAT_WIDTH, DEFULAT_HEIGHT); /設(shè)置表格的高度和寬度 frame.setVisible(true); /設(shè)置可見等 第12章 Java數(shù)據(jù)庫編程 6969 上面都是一些設(shè)置窗體屬性的方法,這些在Swing里面很 常見,而在JTable里面,有一些比較常用的數(shù)據(jù)顯示方法,比 如: final JTable table

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論