




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章 數(shù)據(jù)庫(kù)JDBC編程2搭建搭建JDBC開發(fā)環(huán)開發(fā)環(huán)境境8.1數(shù)數(shù)據(jù)據(jù)庫(kù)編庫(kù)編程程8.2-3執(zhí)執(zhí)行行帶參數(shù)帶參數(shù)的的SQL語(yǔ)語(yǔ)句句 8.4基于基于連連接池和接池和數(shù)數(shù)據(jù)源的據(jù)源的訪問數(shù)訪問數(shù)據(jù)據(jù)庫(kù)庫(kù)8.5BLOG字段的字段的處處理理8.6分頁(yè)顯示8.63在關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)以記錄(Record)和字段(Field)的形式存儲(chǔ)在數(shù)據(jù)表(Table)中,由若干個(gè)數(shù)據(jù)表構(gòu)成一個(gè)數(shù)據(jù)庫(kù)系名系名專業(yè)名稱專業(yè)名稱班級(jí)名稱班級(jí)名稱班號(hào)班號(hào)計(jì)算機(jī)系計(jì)算機(jī)系軟件工程軟件工程0901班級(jí)表班級(jí)表48.1.1安裝安裝MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)8.1.2 JDBC簡(jiǎn)介簡(jiǎn)介8.1.3 下載安裝下載安裝MySQL的的J
2、DBC驅(qū)動(dòng)驅(qū)動(dòng)51)下下載載&安裝安裝2) 打打開開MySQL的托的托盤盤程序程序出出現(xiàn)現(xiàn)在任在任務(wù)欄務(wù)欄 【開開始始】-【程序程序】-MySQL-MySQLSystemTrayMonitor3)啟動(dòng)啟動(dòng)MySQL服務(wù)器服務(wù)器4) 建表、插入、查詢建表、插入、查詢打開打開MySQL query browser 5)更改配置文件更改配置文件my.ini支持中文支持中文返回返回61.下下載載MySQL50.45 mysql-5.0.45-win32.zip 一路缺省安裝 安裝并配置安裝并配置MySQL可以在安裝時(shí)配置,也可以重新配置 如:記得設(shè)root的口令,比如我設(shè)的javaee 端口號(hào)
3、,缺省為33062.下下載載MySQL的官方管理工具的官方管理工具 mysql-gui-tools-5.0-r12-win32.msi3.下載安裝下載安裝MySQL的的JDBC驅(qū)動(dòng),并將其配置到服務(wù)器的驅(qū)動(dòng),并將其配置到服務(wù)器的lib下下 下載后,將壓縮包內(nèi)的下載后,將壓縮包內(nèi)的mysql-connector-java-3.1.14-bin.jar拷貝到服務(wù)器拷貝到服務(wù)器JVM可以訪問到的目錄下,即服務(wù)器的可以訪問到的目錄下,即服務(wù)器的lib目錄下目錄下C:Program Filesglassfish-3.0.1glassfishlib (目前是)7返回返回8 法法1MySQL托托盤盤右右鍵鍵
4、start Instance【法法2】使用使用MySQL Administrator 開開始始程序程序MySQL MySQL Administratorn用戶名root 密碼 javaeen新建連接名為MySQL connection n(其實(shí)就是新建了一個(gè)database,名為mysql, 新 建連接91011在在MySQL管理臺(tái),可以停止服務(wù)、管理、看到管理臺(tái),可以停止服務(wù)、管理、看到MySQL數(shù)據(jù)庫(kù)服務(wù)器的端口、協(xié)議、所在機(jī)器的數(shù)據(jù)庫(kù)服務(wù)器的端口、協(xié)議、所在機(jī)器的IP地址等等地址等等返回返回121.打開:程序打開:程序MySQLMySQL Browsern 或托盤右鍵MySQL Brow
5、er返回返回13點(diǎn)右側(cè)導(dǎo)航欄,選點(diǎn)右側(cè)導(dǎo)航欄,選mysql庫(kù)庫(kù)右鍵右鍵Create new Table14customeridaddressphoneC1北京西路北京西路2號(hào)號(hào)C2南湖路新民小區(qū)南湖路新民小區(qū)8棟棟C3苜蓿園大街苜蓿園大街5號(hào)號(hào)字段名字段名字段字段類類型型DEcustomeridvarchar(6)顧顧客客id主主鍵鍵非空非空addressvarchar(30)顧顧客地址客地址phonevarchar(20)顧顧客客電話電話15雙擊字段的編輯框雙擊字段的編輯框16然后觀察右側(cè)出現(xiàn):然后觀察右側(cè)出現(xiàn):mysql庫(kù)下出現(xiàn)庫(kù)下出現(xiàn)customer表表17點(diǎn)狀態(tài)欄中的點(diǎn)狀態(tài)欄中的edi
6、t在編輯區(qū)在編輯區(qū)右鍵右鍵Add row,然后點(diǎn)擊相應(yīng)的字段編輯框,直接可以,然后點(diǎn)擊相應(yīng)的字段編輯框,直接可以輸入記錄輸入記錄(英文數(shù)據(jù)英文數(shù)據(jù))目前不支持中文,中文處理見下頁(yè)目前不支持中文,中文處理見下頁(yè)點(diǎn)狀態(tài)欄點(diǎn)狀態(tài)欄apply change即提交即提交 返回返回18【錯(cuò)誤錯(cuò)誤】mysql數(shù)據(jù)庫(kù)無法錄入中文數(shù)據(jù)數(shù)據(jù)庫(kù)無法錄入中文數(shù)據(jù) 【原因原因】因?yàn)橐驗(yàn)閙ySQL缺省語(yǔ)言是缺省語(yǔ)言是latin1【修改修改】MySQL Administratorstartup variable def.char set填成填成 gbk19【錯(cuò)誤錯(cuò)誤】mysql數(shù)據(jù)庫(kù)無法錄入中文數(shù)據(jù)數(shù)據(jù)庫(kù)無法錄入中文數(shù)據(jù)
7、【原因原因】因?yàn)橐驗(yàn)閙ySQL缺省語(yǔ)言是缺省語(yǔ)言是latin1【修改修改】 C:Program FilesMySQLMySQL Server 5.0my.ini1. my.ini中客戶端和服務(wù)器端默認(rèn)的字符編碼中客戶端和服務(wù)器端默認(rèn)的字符編碼client后面加上這句后面加上這句( 客戶端客戶端) default-character-set=gbkmysql (服務(wù)器端)(服務(wù)器端)default-character-set=gbk這個(gè)設(shè)置的是這個(gè)設(shè)置的是MYSQL自帶的命令行顯示和輸入的自帶的命令行顯示和輸入的mysqld default-character-set=gbk這個(gè)設(shè)置決定這個(gè)設(shè)置
8、決定MySQL的工作環(huán)境的字符集的工作環(huán)境的字符集!數(shù)據(jù)庫(kù)繼承數(shù)據(jù)庫(kù)繼承MySQL設(shè)置的字符設(shè)置的字符集,而表則繼承數(shù)據(jù)庫(kù)的字符集,字段則繼承表的字符集集,而表則繼承數(shù)據(jù)庫(kù)的字符集,字段則繼承表的字符集!所以這里設(shè)所以這里設(shè)置很重要置很重要!2. 在設(shè)計(jì)字段時(shí),選在設(shè)計(jì)字段時(shí),選gbk字符集,字符集,否則往否則往mySQL中還是輸入漢字錯(cuò)誤中還是輸入漢字錯(cuò)誤以上往以上往MySQL錄入中文沒有問題了錄入中文沒有問題了203.改完這些之后,只要把改完這些之后,只要把html、jsp頁(yè)面上的編碼方式都設(shè)置為頁(yè)面上的編碼方式都設(shè)置為gbk或或 gb2312 input.html中中 接受參數(shù)的接受參數(shù)
9、的jsp中中 確保確保jsp顯示支持中文顯示支持中文 獲得錄入界面?zhèn)鬟M(jìn)的獲得錄入界面?zhèn)鬟M(jìn)的參數(shù)確保支持中文參數(shù)確保支持中文 這樣在這樣在jsp中顯示中顯示MySQL沒有問題了,但是從沒有問題了,但是從jdbc向向MySQL 錄入或傳遞中文參數(shù)還有問題錄入或傳遞中文參數(shù)還有問題4.在使用在使用jdbc的的jsp頁(yè)面中連接數(shù)據(jù)庫(kù)的頁(yè)面中連接數(shù)據(jù)庫(kù)的URL中聲明中文編碼,如下,這樣才能支持中聲明中文編碼,如下,這樣才能支持從從jdbc傳往傳往MySQL的中文參數(shù)的中文參數(shù)String conURL=jdbc:mysql:/localhost:3306/mysql?useUnicode=true&am
10、p;characterEncoding=GBK;例子見例子見幻燈片幻燈片 442122點(diǎn)狀態(tài)欄中的點(diǎn)狀態(tài)欄中的edit,雙擊字段,雙擊字段,將將beijing改為北京,改為北京,再新增其它行記錄再新增其它行記錄然后然后applychanged2324數(shù)據(jù)庫(kù)建好了,我們?cè)趺丛诔绦蛑性L問它呢?數(shù)據(jù)庫(kù)建好了,我們?cè)趺丛诔绦蛑性L問它呢? - JDBC25JDBC 為多種關(guān)系數(shù)據(jù)庫(kù)提供了統(tǒng)一訪問方式n作為特定廠商數(shù)據(jù)庫(kù)訪問API的一種高級(jí)抽象,它主要包含一些通用的接口類。真正的數(shù)據(jù)庫(kù)訪問操作實(shí)現(xiàn)是由各自數(shù)據(jù)庫(kù)廠商提供的。數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)程序:廠商提供的特定于數(shù)據(jù)庫(kù)的訪問APIJDBC通過提供一個(gè)抽象的
11、數(shù)據(jù)庫(kù)接口,使得程序開發(fā)人員在編程時(shí)可以不用綁定在特定數(shù)據(jù)庫(kù)廠商的API上,大大增加了應(yīng)用程序的可移植性。在實(shí)際運(yùn)行過程中程序代碼通過JDBC訪問數(shù)據(jù)庫(kù)時(shí),仍舊需要調(diào)用特定于數(shù)據(jù)庫(kù)的訪問API!26JDBC訪問數(shù)據(jù)庫(kù)層次結(jié)構(gòu)訪問數(shù)據(jù)庫(kù)層次結(jié)構(gòu) 27下載下載配置到應(yīng)用服務(wù)器配置到應(yīng)用服務(wù)器Glassfish的的lib目錄下目錄下 下載后,將壓縮包內(nèi)的mysql-connector-java-3.1.14-bin.jar拷貝到服務(wù)器JVM可以訪問到的目錄下,即服務(wù)器的lib目錄下(目前是C:apache-tomcat-6.0.26lib)28前奏:導(dǎo)入前奏:導(dǎo)入SQL包包import java.s
12、ql.*;注冊(cè)數(shù)據(jù)庫(kù)的注冊(cè)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)(到驅(qū)動(dòng)(到JVM中)中)Class.forName(“org.git.mm.mysql.Driver”).newInstance()Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);連接數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù) 1)先定義數(shù)據(jù)庫(kù)連接的先定義數(shù)據(jù)庫(kù)連接的URL對(duì)象對(duì)象 String conURL=“jdbc:mySQL:/localhost:3306/test”; 或或String conURL=“jdbc:odbc:TestDB”; 2)再連接數(shù)據(jù)庫(kù)再連接數(shù)據(jù)庫(kù) 例例 JDBC URL地址,調(diào)用DriverMan
13、ager對(duì)象的getConnection()來獲取一個(gè)代表數(shù)據(jù)庫(kù)連接的java.sql.connectuion對(duì)象。 Connection conn=DriverManager.getConnection(conURL,”username”,”password”)3. 使用使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作 例例 1)獲得語(yǔ)句對(duì)象獲得語(yǔ)句對(duì)象: statement對(duì)象:提供執(zhí)行對(duì)象:提供執(zhí)行SQL的方法的方法 2)獲得結(jié)果集:獲得結(jié)果集: ResultSet對(duì)象:對(duì)象:SQL語(yǔ)句執(zhí)行的結(jié)果集語(yǔ)句執(zhí)行的結(jié)果集, first,next訪問結(jié)果集記錄訪問結(jié)果集記錄 3)獲得屬性獲得屬性: g
14、etXXX(“字段名字段名”)Connection sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”); /獲得獲得String類型的字段類型的字段title的值的值4.關(guān)閉數(shù)據(jù)庫(kù)及各種對(duì)象關(guān)閉數(shù)據(jù)庫(kù)及各種對(duì)象conn.close()jdbc:子協(xié)議/Servername:port/databasename29public static synchronizedConne
15、tion getConnection(String URL)throws SQLException 創(chuàng)建數(shù)據(jù)庫(kù)連接Connection getConnection(String url,String user,String password)Driver getDriver(String url) 從注冊(cè)的JDBC驅(qū)動(dòng)中選擇一個(gè)驅(qū)動(dòng)程序 void deregisterDriver(Driverdriver)刪除指定驅(qū)動(dòng) int getLoginTimeout()獲取連接數(shù)據(jù)庫(kù)時(shí)驅(qū)動(dòng)可以等待的最大時(shí)間 PrintStream getLogStream()獲取日志void println(Stri
16、ng message)寫JDBC日志DriverManage類以下函數(shù)均為public和static的, 均拋出SQLException30JDBC URL 的格式如下:jdbc:子協(xié)議:數(shù)據(jù)庫(kù)定位器 其中,定位器可能包括主機(jī)名、端口和數(shù)據(jù)庫(kù)系統(tǒng)名MySQL數(shù)據(jù)庫(kù):jdbc:mysql:/機(jī)器名/數(shù)據(jù)庫(kù)名jdbc:mySQL:/localhost/testOracle數(shù)據(jù)庫(kù):jdbc:oracle:thin機(jī)器名:端口名:數(shù)據(jù)庫(kù)名 Access數(shù)據(jù)庫(kù): 在機(jī)器上:建立ODBC數(shù)據(jù)源 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /Access的odb
17、c驅(qū)動(dòng) con=DriverManager.getConnection(jdbc:odbc:bookstore); /access的數(shù)據(jù)源31給定具體的JDBC URL,獲取數(shù)據(jù)庫(kù)連接是在DriverManager對(duì)象調(diào)用getConnection()。兩種:DriverManager.getConnection(url)DriverManager.getConnection(url,user,password)需要輸入用戶名和密碼信息進(jìn)行身份認(rèn)證。需要輸入用戶名和密碼信息進(jìn)行身份認(rèn)證。32項(xiàng)目:項(xiàng)目:DataWeb測(cè)試數(shù)據(jù)庫(kù)連接測(cè)試數(shù)據(jù)庫(kù)連接test.jsp33 %Connection co
18、nn=null;/String strConn;try Class.forName(“org.gjt.mm.mysql.Driver”).newInstance(); conn=DriverManager.getConnection(jdbc:mysql:/localhost/test,root,javaee);% 連接連接MySQL數(shù)據(jù)庫(kù)成功數(shù)據(jù)庫(kù)成功! %catch(SQLException e)out.println(e.toString();finallyif(conn!=null)conn.close(); %程序71:test.jsp成功連接連接失敗,跳轉(zhuǎn)到異常處理3435JDBC
19、建立數(shù)據(jù)庫(kù)連接后,就可以使用建立數(shù)據(jù)庫(kù)連接后,就可以使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作作1. Statement對(duì)象對(duì)象:提供執(zhí)行提供執(zhí)行SQL的方法的方法2.ResultSet對(duì)象對(duì)象:SQL語(yǔ)句執(zhí)行結(jié)果集語(yǔ)句執(zhí)行結(jié)果集3. getXXX方法方法:對(duì)屬性操作對(duì)屬性操作Statement sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”); /獲得獲得String類
20、型的字段類型的字段title的值的值36Statement提供執(zhí)行提供執(zhí)行SQL的方法的方法1. 創(chuàng)建創(chuàng)建Statement對(duì)象對(duì)象(使用(使用Connection.creatStament) Connection sqlStmt=conn.createStatement();2.Statement的三種的三種SQL語(yǔ)句語(yǔ)句 1)executeQuery() : 產(chǎn)生單個(gè)結(jié)果集,如產(chǎn)生單個(gè)結(jié)果集,如SELECT 2)executeUpdate():用于:用于 INSERT、UPDATE、返回更新行數(shù)返回更新行數(shù)DROP、DELETE:返回值為:返回值為0 3)execute 執(zhí)行任意一個(gè)執(zhí)行任
21、意一個(gè)SQL語(yǔ)句語(yǔ)句37成成 員員 方方 法法功功 能能 說說 明明public boolean absolute(int row)throwsSQLException絕對(duì)定位絕對(duì)定位記錄指針到指定記錄記錄指針到指定記錄 public boolean first()throws SQLException移動(dòng)記錄指針到第一個(gè)記錄移動(dòng)記錄指針到第一個(gè)記錄 public void beforeFirst ()throws SQLException移動(dòng)記錄指針到第一個(gè)記錄之前移動(dòng)記錄指針到第一個(gè)記錄之前 public boolean last ()throws SQLException移動(dòng)記錄指針到最
22、后一個(gè)記錄移動(dòng)記錄指針到最后一個(gè)記錄 public void afterLast ()throws SQLException移動(dòng)記錄指針到最后一個(gè)記錄之后移動(dòng)記錄指針到最后一個(gè)記錄之后 public boolean previous()throws SQLException移動(dòng)記錄指針到上一個(gè)記錄移動(dòng)記錄指針到上一個(gè)記錄 public boolean next()throws SQLException移動(dòng)記錄指針到下一個(gè)記錄移動(dòng)記錄指針到下一個(gè)記錄 public void insertRow()throws SQLException插入一個(gè)記錄到數(shù)據(jù)表中插入一個(gè)記錄到數(shù)據(jù)表中 public v
23、oid updateRow()throws SQLException修改數(shù)據(jù)表中的一個(gè)記錄修改數(shù)據(jù)表中的一個(gè)記錄 public void deleteRow()throws SQLExceptio刪除記錄指針指向的記錄刪除記錄指針指向的記錄 public void update類型類型(int ColumnIndex,類型類型x)throws SQLException修改數(shù)據(jù)表中指定字符的值修改數(shù)據(jù)表中指定字符的值 public int get類型類型(int ColumnIndex)throws SQLExceptionpublic int getRow()取得數(shù)據(jù)表中指定字符的值取得數(shù)據(jù)表
24、中指定字符的值返回結(jié)果集的總記錄數(shù)返回結(jié)果集的總記錄數(shù)代表代表SQL的的executeQuery執(zhí)行結(jié)果集執(zhí)行結(jié)果集符合符合SQL語(yǔ)句中的所有行語(yǔ)句中的所有行ResultSet維護(hù)指向當(dāng)前數(shù)據(jù)行的光標(biāo)維護(hù)指向當(dāng)前數(shù)據(jù)行的光標(biāo)記錄指針記錄指針ResultSet類常用成員方法類常用成員方法38Statement的成員方法:的成員方法:public void update類型類型(int ColumnIndex,類型類型x)throws SQLExceptionpublic int get類型類型(int ColumnIndex)throws SQLExceptionpublic int get類型
25、類型(String ColumnName)Connection sqlStmt=conn.createStatement();ResultSet rs=sqlStmt.executeQuery(“select customerid from customer”)rs.first();String rs.getString(“title”); /獲得獲得String類型的字段類型的字段title的值的值或 String rs.getString(1); /獲得第1列的值,效果同上 titleISBN字段名字段名類型類型title字符型字符型varcharISBN字符型字符型varchar列從左到
26、右,從1開始編號(hào)39 該該 表已表已經(jīng)經(jīng)在前面通在前面通過過MySQL Query browser建立建立在在mysql庫(kù)庫(kù)下下customer表表用用戶戶root 密密碼碼javaee字段名字段名字段字段類類型型DEcustomeridvarchar(6)顧顧客客id主主鍵鍵非空非空addressvarchar(30)顧顧客地址客地址phonevarchar(20)顧顧客客電話電話40數(shù)據(jù)庫(kù)mysql customer表customeridaddressphonefirstnamelastnameC1北京西路北京西路2號(hào)號(hào)張張華華C2南湖路新民小區(qū)南湖路新民小區(qū)8棟棟wang麗麗C3苜蓿園大
27、街苜蓿園大街5號(hào)號(hào)李李言言MySQL數(shù)據(jù)庫(kù)服務(wù)器JDBCselect customerid, address,phone from customerselect customerid,firstname,lastname,address from customer where firstname like “張張”41 顧客信息表顧客信息表 ID 地址地址 電話電話 42 431.啟動(dòng)啟動(dòng)MySQL服務(wù)器服務(wù)器2.啟動(dòng)啟動(dòng)glassfish服務(wù)器服務(wù)器3.發(fā)布發(fā)布customer2.jsp到到glassfish上上4.火狐中輸入火狐中輸入44背景:背景:前面的例子:是列出所
28、有客戶的信息n如果想在查詢界面,按顧客姓名查詢?cè)趺崔k呢?prepareStatement對(duì)象對(duì)象n它包含的SQL語(yǔ)句中可以具有1n個(gè)IN參數(shù)待定參數(shù)nIN參數(shù)在SQL語(yǔ)句創(chuàng)建時(shí)未指定,用?標(biāo)識(shí)n每個(gè)?的值用setXXX指定n執(zhí)行查詢(改為均不帶參)nexecute()nexecuteQuery()nexecuteUpdate()preparedStmt=conn.prepareStatement(select customerid,firstname,lastname,address from customer where firstname like ?); /不是不是createState
29、ment,是,是prepareStatementString parm=request.getParameter(parm); /利用利用request獲得獲得input.jsp輸入的待查姓名輸入的待查姓名preparedStmt.setString(1,parm); /設(shè)置設(shè)置prepareStatement的第一個(gè)的第一個(gè)?對(duì)應(yīng)的待填參數(shù)對(duì)應(yīng)的待填參數(shù)sqlRst=preparedStmt.executeQuery(); /執(zhí)行查詢執(zhí)行查詢 顧客姓名顧客姓名 .input.jspsearchResult.jsp45字段名字段名字段字段類類型型DEcustomeridvarchar(6)顧顧
30、客客id主主鍵鍵非空非空addressvarchar(30)顧顧客地址客地址phonevarchar(20)顧顧客客電話電話firstnamevarchar(20)顧顧客姓客姓l(shuí)astnamevarchar(20)顧顧客名客名 該該 表已表已經(jīng)經(jīng)在前面通在前面通過過MySQL Query browser建立建立在在mysql庫(kù)庫(kù)下下customer表表用用戶戶root 密密碼碼javaee新增新增兩個(gè)兩個(gè)字段字段firstname、lastname用于姓名用于姓名查詢查詢46啟動(dòng)啟動(dòng)MySQL服務(wù)器,打開服務(wù)器,打開MySQL Query browser在右側(cè)導(dǎo)航欄點(diǎn)擊在右側(cè)導(dǎo)航欄點(diǎn)擊mysq
31、l庫(kù)之庫(kù)之customer表表右鍵右鍵edit table加入加入firstname、lastname兩個(gè)字段兩個(gè)字段474849 查詢條件查詢條件 顧客姓名顧客姓名 50 51 顧客信息表顧客信息表 ID 地址地址 姓名姓名 % /end of try 52P222倒數(shù)第倒數(shù)第2行行%前加入前加入此后該程序中所有此后該程序中所有java.sql.Result之類的全部刪去之類的全部刪去java.sql如如P223第第1,2、3、6、等、等因?yàn)橐呀?jīng)導(dǎo)入包了,后面直接用類名即可因?yàn)橐呀?jīng)導(dǎo)入包了,后面直接用類名即可2.P223第第6行行conn=DriverManager.ge
32、tConnection(jdbc:mysql:/localhost:3306/mysql,root,javaee);Mysql后加入指定編碼集,否則后加入指定編碼集,否則jdbc不支持向不支持向MySQL傳遞中文參數(shù)傳遞中文參數(shù)jdbc:mysql:/localhost:3306/mysql?useUnicode=true&characterEncoding=GBK 3.這行后面加入這行后面加入 request.setCharacterEncoding(gb2312);以保證從以保證從input.jsp中通過中通過request獲得的參數(shù)支持中文獲得的參數(shù)支持中文4.P223中部中部
33、while (sqlRst.next() /如果下條記錄不為空如果下條記錄不為空 后面改為后面改為 String name=sqlRst.getString(“firstname”)+sqlRst.getString(“l(fā)astname”);,刪去,刪去.getBytes(“iso-8859-1”)因?yàn)榍懊嬉呀?jīng)在因?yàn)榍懊嬉呀?jīng)在MySQL的配置、的配置、jsp的的page指令以指令以及及jdbc連接處都做了支持中文的處理,所以刪去這里連接處都做了支持中文的處理,所以刪去這里53catch(SQLException e) out.println(e.toString(); finallyif(sq
34、lRst!=null) sqlRst.close(); /關(guān)閉結(jié)果集關(guān)閉結(jié)果集 if(preparedStmt!=null) preparedStmt.close(); /關(guān)閉關(guān)閉SQL語(yǔ)句對(duì)象語(yǔ)句對(duì)象 if(conn!=null) conn.close();/關(guān)閉數(shù)據(jù)庫(kù)連接對(duì)象關(guān)閉數(shù)據(jù)庫(kù)連接對(duì)象 % 54JDBC作為一種數(shù)據(jù)庫(kù)訪問技術(shù),具有簡(jiǎn)單易用的優(yōu)點(diǎn)。但使用這種模作為一種數(shù)據(jù)庫(kù)訪問技術(shù),具有簡(jiǎn)單易用的優(yōu)點(diǎn)。但使用這種模式進(jìn)行式進(jìn)行Web應(yīng)用程序開發(fā),存在很多問題:首先,應(yīng)用程序開發(fā),存在很多問題:首先,每一次每一次Web請(qǐng)求都請(qǐng)求都要建立一次數(shù)據(jù)庫(kù)連接。建立連接是一個(gè)費(fèi)時(shí)的活動(dòng)要建立一次
35、數(shù)據(jù)庫(kù)連接。建立連接是一個(gè)費(fèi)時(shí)的活動(dòng),每次都得花費(fèi),每次都得花費(fèi)0.05s1s的時(shí)間,而且的時(shí)間,而且系統(tǒng)還要分配內(nèi)存資源系統(tǒng)還要分配內(nèi)存資源。這個(gè)時(shí)間對(duì)于一次。這個(gè)時(shí)間對(duì)于一次或幾次數(shù)據(jù)庫(kù)操作,或許感覺不出系統(tǒng)有多大的開銷??墒菍?duì)于現(xiàn)在的或幾次數(shù)據(jù)庫(kù)操作,或許感覺不出系統(tǒng)有多大的開銷。可是對(duì)于現(xiàn)在的Web應(yīng)用,尤其是大型電子商務(wù)網(wǎng)站,同時(shí)有幾百人甚至幾千人在線應(yīng)用,尤其是大型電子商務(wù)網(wǎng)站,同時(shí)有幾百人甚至幾千人在線是很正常的事。在這種情況下是很正常的事。在這種情況下,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作勢(shì)必操作勢(shì)必占用很占用很多的系統(tǒng)資源多的系統(tǒng)資源,網(wǎng)站的響應(yīng)速度必定下降,嚴(yán)重的
36、甚至?xí)斐煞?wù)器的,網(wǎng)站的響應(yīng)速度必定下降,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。不是危言聳聽,這就是制約某些電子商務(wù)網(wǎng)站發(fā)展的技術(shù)瓶頸問崩潰。不是危言聳聽,這就是制約某些電子商務(wù)網(wǎng)站發(fā)展的技術(shù)瓶頸問題。其次,對(duì)于題。其次,對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開。否則,如果程。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將不,最終將不得不重啟數(shù)據(jù)庫(kù)。還有,這種開發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)得不重啟數(shù)據(jù)庫(kù)。還有,這種開發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無顧及的分配出去,如連接過
37、多,也可能導(dǎo)致內(nèi)存泄漏,服資源會(huì)被毫無顧及的分配出去,如連接過多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。務(wù)器崩潰。 551、基本概念及原理、基本概念及原理 數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩緩沖池沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池緩沖池”中取出一個(gè),使用完中取出一個(gè),使用完畢之后再放回去。我們可以通過設(shè)定連接池最大連接數(shù)來畢之后再放回去。我們可以通過設(shè)定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通防止系統(tǒng)無
38、盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們可以通過連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量、使用情況,過連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量、使用情況,為系統(tǒng)開發(fā)、測(cè)試及性能調(diào)整提供依據(jù)。為系統(tǒng)開發(fā)、測(cè)試及性能調(diào)整提供依據(jù)。 2、服務(wù)器、服務(wù)器glassfish自帶的連接池自帶的連接池 JDBC的的API中沒有提供連接池的方法中沒有提供連接池的方法 連接池實(shí)際上是連接池實(shí)際上是JDBC為第三方應(yīng)用服務(wù)器提供的一個(gè)由數(shù)為第三方應(yīng)用服務(wù)器提供的一個(gè)由數(shù)據(jù)庫(kù)廠家實(shí)現(xiàn)的管理標(biāo)準(zhǔn)接口。據(jù)庫(kù)廠家實(shí)現(xiàn)的管理標(biāo)準(zhǔn)接口。 ( 我用的是我用的是glashfish的)的)56JDBC接口層接口層J2EE應(yīng)用應(yīng)用JDBC A
39、PI數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)JDBC驅(qū)動(dòng)程序驅(qū)動(dòng)程序SunJDBC驅(qū)動(dòng)層驅(qū)動(dòng)層數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)廠商數(shù)據(jù)庫(kù)廠商應(yīng)用層應(yīng)用層ConnectionResultSetStatement連接池連接池圖圖810:基于連接池的數(shù)據(jù)庫(kù)訪問結(jié)構(gòu)體系:基于連接池的數(shù)據(jù)庫(kù)訪問結(jié)構(gòu)體系程序員開發(fā)程序員開發(fā)PooledConnectionPooledResultSet57登錄登錄Glassfish-3的管理頁(yè)面的管理頁(yè)面n缺省賬號(hào)admin,密碼adminadmin在在Glassfish服務(wù)器上建立數(shù)據(jù)連接池服務(wù)器上建立數(shù)據(jù)連接池n左側(cè)資源JDBC ,右側(cè)將出現(xiàn)連接池, 點(diǎn)擊n新建n數(shù)據(jù)連接池名:MySQLn資源類型選:java
40、x.sql.ConnectionPoolDataSourcen廠商選:MySqln下一步設(shè)置數(shù)據(jù)源名稱ndataSource名:mysql (修改書上的將sample改為我建的mysqlnserverName:localhostnport:3306nuser:rootnpassword:javaee58596061已經(jīng)自動(dòng)輸入數(shù)據(jù)源類名,需要繼續(xù)填下面的表62下一步設(shè)置數(shù)據(jù)源名稱ndataSource名:mysql (修改書上的將sample改為我建的mysqlnserverName:localhostnport:3306nuser:rootnpassword:javaee n配好后:?jiǎn)螕敉瓿?/p>
41、6364配置完成后,確認(rèn)一下自動(dòng)拼接的數(shù)據(jù)庫(kù)連接字串配置完成后,確認(rèn)一下自動(dòng)拼接的數(shù)據(jù)庫(kù)連接字串url是否是否正確(有時(shí)因?yàn)殚_源的工具有正確(有時(shí)因?yàn)殚_源的工具有bug,可能會(huì)有問題,會(huì)在,可能會(huì)有問題,會(huì)在運(yùn)行中出現(xiàn)運(yùn)行中出現(xiàn)java.sql.SQLException: No database selected )Jdbc:mysql:/Servername:port/databasename65點(diǎn)擊連接池點(diǎn)擊連接池MySQLping6667仍舊在仍舊在Glassfish控制臺(tái)控制臺(tái)資源資源JDBC資源資源新建新建nJNDI名稱:samplen池名稱:選剛才建的MySQL數(shù)據(jù)池確定確定重啟重
42、啟Glassfish,使之生效,使之生效68select customerid,address, phone from customer DB Test 數(shù)據(jù)源連接結(jié)果數(shù)據(jù)源連接結(jié)果 customerid $row.customerid address $row.address phone $row.phone 691.加入數(shù)據(jù)源對(duì)象2.改為基于數(shù)據(jù)源的連接/加入數(shù)據(jù)源對(duì)象 InitialContext context=new InitialContext(); DataSource dataSource=(DataSource)context.lookup(java:comp/env/sam
43、ple);/Class.forName(org.gjt.mm.mysql.Driver).newInstance();/conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mysql,root,javaee);conn=dataSource.getConnection(); /改為基于數(shù)據(jù)源的連接70 基于連接池和數(shù)據(jù)源訪問數(shù)據(jù)庫(kù)基于連接池和數(shù)據(jù)源訪問數(shù)據(jù)庫(kù)/加入數(shù)據(jù)源對(duì)象加入數(shù)據(jù)源對(duì)象 InitialContext context=new InitialContext(); /DataSource dataSource=(D
44、ataSource)context.lookup(java:comp/env/sample);DataSource dataSource=(DataSource)context.lookup(“sample”); /netbeans6.9下直接用下直接用/Class.forName(org.gjt.mm.mysql.Driver).newInstance();/conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mysql,root,javaee);conn=dataSource.getConnection(); /改為基于數(shù)
45、據(jù)源的連接別忘了java:comp/env/建的數(shù)據(jù)源都得加建的數(shù)據(jù)源都得加這個(gè),否則命名空這個(gè),否則命名空間找不到間找不到71 顧客信息表顧客信息表 ID 地址地址 電話電話 72 7374元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù):元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù):數(shù)據(jù)庫(kù)中有多少表,表中的字?jǐn)?shù)據(jù)庫(kù)中有多少表,表中的字段的含義段的含義 ? 表一級(jí):就是表的結(jié)構(gòu)表一級(jí):就是表的結(jié)構(gòu)ResultSetMeta對(duì)象對(duì)象n有幾列?多少個(gè)字段? getColumCount()n字段的名稱都是什么? getColumName()n各個(gè)都是什么類型的? getColumType() 數(shù)據(jù)庫(kù)一級(jí)的:數(shù)據(jù)庫(kù)一級(jí)的: D
46、atabaseMetaData對(duì)象對(duì)象n當(dāng)前數(shù)據(jù)庫(kù)是什么數(shù)據(jù)庫(kù)。比如oracle,access等n數(shù)據(jù)庫(kù)的版本?n一個(gè)表的信息、模式、表的名字getTables75DatabaseMetaData對(duì)象對(duì)象 提供的是關(guān)于數(shù)據(jù)庫(kù)的各種信息,這些信息包括:提供的是關(guān)于數(shù)據(jù)庫(kù)的各種信息,這些信息包括: 1) 數(shù)據(jù)庫(kù)與用戶,數(shù)據(jù)庫(kù)標(biāo)識(shí)符以及函數(shù)與存儲(chǔ)過程。數(shù)據(jù)庫(kù)與用戶,數(shù)據(jù)庫(kù)標(biāo)識(shí)符以及函數(shù)與存儲(chǔ)過程。 2) 數(shù)據(jù)庫(kù)限制。數(shù)據(jù)庫(kù)限制。 3) 數(shù)據(jù)庫(kù)支持不支持的功能。數(shù)據(jù)庫(kù)支持不支持的功能。 4) 架構(gòu)、編目、表、列和視圖等。架構(gòu)、編目、表、列和視圖等。 2.ResultSetMeta對(duì)象對(duì)象 1)Resu
47、ltSetMetaData存儲(chǔ)了存儲(chǔ)了 ResultSet的的MetaData 2)ResultSet是以表格的形式存在,所以是以表格的形式存在,所以getMetaData就包括了就包括了 數(shù)據(jù)的字段名稱、類型以及數(shù)目等表格所必須具備的信息。數(shù)據(jù)的字段名稱、類型以及數(shù)目等表格所必須具備的信息。 76ResultSet是以表格的形式存在,是以表格的形式存在,ResultSetMetaData存儲(chǔ)了存儲(chǔ)了 ResultSet的的MetaData.1.獲得元數(shù)據(jù)對(duì)象獲得元數(shù)據(jù)對(duì)象ResultSet接口的接口的.getMetaData():返回描述ResultSet的ResultSetMetaData
48、對(duì)象 包括了 數(shù)據(jù)的字段名稱、類型以及數(shù)目等表格所必須具備的信息2.ResultSetMetaData接口:接口: getColumnCount():返回返回ResultSet中列的數(shù)目中列的數(shù)目 public int getColumCount() throws SQLException 返回所有字段的數(shù)目 getColumnName():返回列在數(shù)據(jù)庫(kù)中的名稱返回列在數(shù)據(jù)庫(kù)中的名稱 public String getColumName (int colum) throws SQLException。 根據(jù)字段的索引值取得字段的名稱。 colum,字段的索引值,從1開始。 getColumn
49、Type():返回列的返回列的SQL類型類型 public String getColumType (int colum) throws SQLException。 方法說明:根據(jù)字段的索引值取得字段的類型,返回值的定義在java.sql.TypeisReadOnly():表示該數(shù)據(jù)項(xiàng)是否為只讀值表示該數(shù)據(jù)項(xiàng)是否為只讀值 isNullable():表示該列是否可以存儲(chǔ)表示該列是否可以存儲(chǔ)NULL 77 得到ResultSet的元數(shù)據(jù)對(duì)象 獲得結(jié)果集的記錄總數(shù)78 顧客信息表顧客信息表 ID 地址地址 電話電話 - %for(int col=1;col !- - %for(i
50、nt col=1;col %for(int col=1;col 獲得字段名 %for(int col=1;col 獲得字段值79 8081數(shù)據(jù)庫(kù)查詢時(shí),記錄非常多,一頁(yè)看不完,數(shù)據(jù)庫(kù)查詢時(shí),記錄非常多,一頁(yè)看不完,分頁(yè)顯示分頁(yè)顯示思路:思路:設(shè)置一頁(yè)顯示的記錄數(shù)設(shè)置一頁(yè)顯示的記錄數(shù)intRowCount,然后按照記錄總,然后按照記錄總數(shù)進(jìn)行計(jì)算,算出總頁(yè)數(shù)。數(shù)進(jìn)行計(jì)算,算出總頁(yè)數(shù)。無論首頁(yè)還是以后跳轉(zhuǎn)的頁(yè)均使用無論首頁(yè)還是以后跳轉(zhuǎn)的頁(yè)均使用page.jsp代碼代碼page.jsp按當(dāng)前頁(yè)數(shù),按當(dāng)前頁(yè)數(shù),計(jì)算出結(jié)果集中的起始記錄的位計(jì)算出結(jié)果集中的起始記錄的位置,并定位到該條記錄,置,并定位到該
51、條記錄,然后按照一頁(yè)的記錄數(shù)讀出并顯然后按照一頁(yè)的記錄數(shù)讀出并顯示。示。在點(diǎn)擊上、下頁(yè)跳轉(zhuǎn)時(shí),將待跳轉(zhuǎn)的頁(yè)碼用用在點(diǎn)擊上、下頁(yè)跳轉(zhuǎn)時(shí),將待跳轉(zhuǎn)的頁(yè)碼用用request對(duì)對(duì)象的參數(shù)象的參數(shù)“page”來傳遞來傳遞1. 而跳到指定頁(yè)后,而跳到指定頁(yè)后,page.jsp先從先從request中讀出當(dāng)前頁(yè)中讀出當(dāng)前頁(yè)碼,然后計(jì)算應(yīng)從數(shù)據(jù)集中讀出的記錄數(shù),并定位到本頁(yè)碼,然后計(jì)算應(yīng)從數(shù)據(jù)集中讀出的記錄數(shù),并定位到本頁(yè)的起始記錄的那個(gè)位置。的起始記錄的那個(gè)位置。82% Connection sqlCon=null; /數(shù)據(jù)庫(kù)連接對(duì)象數(shù)據(jù)庫(kù)連接對(duì)象Statement sqlStmt=null; /SQL語(yǔ)句
52、對(duì)象語(yǔ)句對(duì)象ResultSet sqlRst=null; /結(jié)果集對(duì)象結(jié)果集對(duì)象int intPageSize; / 一頁(yè)顯示的記錄數(shù)一頁(yè)顯示的記錄數(shù)int intRowCount; /記錄總數(shù)記錄總數(shù)int intPageCount; /總頁(yè)數(shù)總頁(yè)數(shù)int intPage; /待顯示頁(yè)碼待顯示頁(yè)碼String strPage; /存存request傳遞來的當(dāng)前傳遞來的當(dāng)前“page”頁(yè)碼頁(yè)碼intPageSize=2; /設(shè)置一頁(yè)顯示的記錄數(shù)設(shè)置一頁(yè)顯示的記錄數(shù)strPage=request.getParameter(page); /取得待顯示頁(yè)碼取得待顯示頁(yè)碼if(strPage=null
53、) /表明表明request中沒有這個(gè)參數(shù),即為顯示第一頁(yè)中沒有這個(gè)參數(shù),即為顯示第一頁(yè)intPage=1;elseintPage=Integer.parseInt(strPage);if (intPage84頁(yè)次:頁(yè)次:/頁(yè)頁(yè) 條條/頁(yè)頁(yè) ID 電話電話0) sqlRst.absolute(intPage-1)*intPageSize-1);/若不是第一頁(yè),則結(jié)果集絕對(duì)定位到當(dāng)若不是第一頁(yè),則結(jié)果集絕對(duì)定位到當(dāng) /前頁(yè)的起始記錄前頁(yè)的起始記錄=(當(dāng)前頁(yè)碼當(dāng)前頁(yè)碼-1)*頁(yè)面大小頁(yè)面大小-1; int i=0; while(i 851)% a href=page.jsp?page=上一頁(yè)上一頁(yè)
54、%if (intPagea href=page.jsp?page=下一頁(yè)下一頁(yè)8687 SQL語(yǔ)言的操作對(duì)象主要是數(shù)據(jù)表。依照SQL命令操作關(guān)系型數(shù)據(jù)庫(kù)的不同功能,可將SQL命令分成數(shù)據(jù)定義語(yǔ)言DDL(Data Definition Language)、數(shù)據(jù)操縱語(yǔ)言DML(Data Manipulation Language)、數(shù)據(jù)查詢語(yǔ)言DQL(Data Query Language)和數(shù)據(jù)控制語(yǔ)言DCL(Data Control Language)四大類。我們這里只介紹前三類。88 數(shù)據(jù)定義語(yǔ)言數(shù)據(jù)定義語(yǔ)言 數(shù)據(jù)定義語(yǔ)言提供對(duì)數(shù)據(jù)庫(kù)及其數(shù)據(jù)表的創(chuàng)建、修改、刪除等操作,屬于數(shù)據(jù)定義語(yǔ)言的命令
55、有Create、Alter和Drop。 0.創(chuàng)建數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù) create database 數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)名 1創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表 在SQL語(yǔ)言中,使用CREATE TABLE語(yǔ)句創(chuàng)建新的數(shù)據(jù)庫(kù)表格。CREATE TABLE語(yǔ)句的使用格式如下: CREATE TABLE 表名(字段名l 數(shù)據(jù)類型限制條件, 字段名2 數(shù)據(jù)類型限制條件,字段名n 數(shù)據(jù)類型限制條件)89 說明:說明: (1) 表名是指存放數(shù)據(jù)的表格名稱;字段名是指表格中某一列的名稱,通常也稱為列名。表名和字段名都應(yīng)遵守標(biāo)識(shí)符命名規(guī)則。 (2) 數(shù)據(jù)類型用來設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。 (3) 所謂限制條件就是當(dāng)輸入此列數(shù)
56、據(jù)時(shí)必須遵守的規(guī)則。這通常由系統(tǒng)給定的關(guān)鍵字來說明。例如,使用UNIQUE關(guān)鍵字限定本列的值不能重復(fù);NOT NULL用來規(guī)定表格中該列的值不能為空;PRIMARYKEY表明該列為該表的主鍵(也稱主碼),它既限定本列的值不能重復(fù),也限定該列的值不能為空。 (4) 表示可選項(xiàng)(下同)。例如,CREATE語(yǔ)句中的限制條件便是一個(gè)可選項(xiàng)。90修改數(shù)據(jù)表包括向表中添加字段和刪除字段。這兩個(gè)操作都使用ALTER命令,但其中的關(guān)鍵字有所不同。1)添加字段使用的格式為: ALTER TABLE 表名 ADD 字段名 數(shù)據(jù)類型 限制條件2)刪除字段使用的格式為: ALTER TABLE 表名 DROP 字段名
57、91在SQL語(yǔ)言中使用DROP TABLE語(yǔ)句刪除某個(gè)表格及表格中的所有記錄,其使用格式如下: DROP TABLE 表名 92 數(shù)據(jù)操縱語(yǔ)言用來維護(hù)數(shù)據(jù)庫(kù)的內(nèi)容,屬于數(shù)據(jù)操縱語(yǔ)言的命令有Insert、Delete和Update。 1向數(shù)據(jù)表中插入數(shù)據(jù)向數(shù)據(jù)表中插入數(shù)據(jù) SQL語(yǔ)言使用INSERT語(yǔ)句向數(shù)據(jù)庫(kù)表格中插入或添加新的數(shù)據(jù)行,其格式如下: INSERT INTO 表名(字段名l,字段名n) VALUES(值l,值n) 說明:命令行中的“值”表示對(duì)應(yīng)字段的插入值。在使用時(shí)要注意字段名的個(gè)數(shù)與值的個(gè)數(shù)要嚴(yán)格對(duì)應(yīng),二者的數(shù)據(jù)類型也應(yīng)該一一對(duì)應(yīng),否則就會(huì)出現(xiàn)錯(cuò)誤。93SQL語(yǔ)言使用UPDAT
58、E語(yǔ)句更新或修改滿足規(guī)定條件的現(xiàn)有記錄,使用格式如下: UPDATE 表名 SET 字段名l 新值l ,字段名2 新值2 WHERE 條件 說明:關(guān)鍵字WHERE引出更新時(shí)應(yīng)滿足的條件,即滿足此條件的字段值將被更新。在WHERE從句中可以使用所有的關(guān)系運(yùn)算符和邏輯運(yùn)算符。94SQL語(yǔ)言使用DELETE語(yǔ)句刪除數(shù)據(jù)庫(kù)表格中的行或記錄,其使用格式如下: DELETE FROM 表名 WHERE 條件 說明:通常情況下,由關(guān)鍵字WHERE引出刪除時(shí)應(yīng)滿足的條件,即滿足此條件的記錄將被刪除。如果省略WHERE子句,則刪除當(dāng)前記錄。95數(shù)據(jù)庫(kù)查詢是數(shù)據(jù)庫(kù)的核心操作。SQL語(yǔ)言提供了SELECT語(yǔ)句進(jìn)行數(shù)
59、據(jù)庫(kù)的查詢,并以數(shù)據(jù)表的形式返回符合用戶查詢要求的結(jié)果數(shù)據(jù)。SELECT語(yǔ)句具有豐富的功能和靈活的使用方式,其一般的語(yǔ)法格式如下: SELECT DISTINCT 字段名l,字段名2, FROM 表名 WHERE 條件96 其中:DISTINCT表示不輸出重復(fù)值,即當(dāng)查詢結(jié)果中有多條記錄具有相同的值時(shí),只返回滿足條件的第一條記錄值;語(yǔ)句中的字段名用來決定哪些字段將作為查詢結(jié)果返回。用戶可以按照自己的需要返回?cái)?shù)據(jù)表中的任意的字段,也可以使用通配符“*”來表示查詢結(jié)果中包含所有字段。97 2Connection類類 java.sql.Connection類負(fù)責(zé)建立與指定數(shù)據(jù)庫(kù)的連接。常用成員方法如
60、下: (1) public Statement createStatement( )throws SQLException用來創(chuàng)建Statement類對(duì)象。 (2) public Statement createStatement(int resultSetType, int resultSetConcurrecy)throws SQLException方法,用來按指定的參數(shù)創(chuàng)建Statement類對(duì)象。 (3) public DatabaseMetaData getMetaData( )throws SQLException用來創(chuàng)建DatabaseMetaData對(duì)象。不同數(shù)據(jù)庫(kù)系統(tǒng)擁有不同的特性,DatabaseMetaData類不但可以保
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省淄博市高新區(qū)2024-2025學(xué)年(五四學(xué)制)六年級(jí)下學(xué)期期末歷史試題(含答案)
- 北師大版四年級(jí)上冊(cè)數(shù)學(xué)第一單元 認(rèn)識(shí)更大的數(shù) 檢測(cè)題(無答案)
- 3D MAX的進(jìn)階之路(山東聯(lián)盟) 知到智慧樹答案
- 《跨文化認(rèn)知與文明互鑒:意大利》知到智慧樹答案
- 《道德經(jīng)》的智慧啟示知到智慧樹見面課答案
- 虛擬現(xiàn)實(shí)技術(shù)在旅游行業(yè)的應(yīng)用案例研究
- 2025茶葉買賣合同標(biāo)準(zhǔn)版
- 水費(fèi)收費(fèi)員安全知識(shí)培訓(xùn)課件
- 消防設(shè)備調(diào)試與維護(hù)方案
- 水粉小獅子課件重點(diǎn)難點(diǎn)
- 2025年公文核改競(jìng)賽試題及答案
- 2025歷年退役軍人考試題庫(kù)及答案
- 第一二單元月考綜合試卷(試題)四年級(jí)上冊(cè)數(shù)學(xué)滬教版
- 2025級(jí)新生軍訓(xùn)開訓(xùn)儀式動(dòng)員大會(huì)
- 農(nóng)產(chǎn)品質(zhì)量安全標(biāo)準(zhǔn)體系與實(shí)施路徑-洞察及研究
- 中組部選調(diào)生管理辦法
- 克痙方濕熱敷:缺血性腦卒中后上肢肌肉痙攣康復(fù)新路徑
- 血常規(guī)檢驗(yàn)中的質(zhì)量控制
- 高尿酸血癥健康管理方案
- 新人教版九年級(jí)下冊(cè)初中化學(xué)全冊(cè)課前預(yù)習(xí)單
- 工廠規(guī)章制度員工守則.doc
評(píng)論
0/150
提交評(píng)論