版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、清華大學(xué)出版社 理解JDBC應(yīng)用程序編程接口; 掌握使用純Java驅(qū)動(dòng)程序操作數(shù)據(jù)庫的編程方法; 掌握對(duì)數(shù)據(jù)的增加、刪除、修改和查詢編程技術(shù); 查詢記錄的分頁面顯示; 數(shù)據(jù)庫連接池編程技術(shù)。 7.1 JDBC概述概述 7.2 JDBC應(yīng)用程序接口簡(jiǎn)介應(yīng)用程序接口簡(jiǎn)介 7.3 利用利用JDBC訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫 7.4 數(shù)據(jù)庫操作案例數(shù)據(jù)庫操作案例 7.5 上機(jī)實(shí)訓(xùn)上機(jī)實(shí)訓(xùn) 7.6 本本 章章 習(xí)習(xí) 題題 7.1.1 什么是JDBC JDBC是Java數(shù)據(jù)庫連接(Java Data Base Connectivity)技術(shù)的簡(jiǎn)稱,指Java同許多數(shù)據(jù)庫之間連接的一種標(biāo)準(zhǔn)。 JDBC為數(shù)據(jù)庫應(yīng)用
2、開發(fā)人員、數(shù)據(jù)庫前臺(tái)工具開發(fā)人員提供了一種標(biāo)準(zhǔn)的JavaAPI,使開發(fā)人員可以用純Java語言編寫完整的數(shù)據(jù)庫應(yīng)用程序。 簡(jiǎn)單地說,JDBC能夠完成下列三件事: 與一個(gè)數(shù)據(jù)庫建立連接(connection)。 向數(shù)據(jù)庫發(fā)送SQL語句(statement)。 處理數(shù)據(jù)庫返回的結(jié)果(resultset)。 7.1.2 JDBC的構(gòu)的構(gòu)成成 1.JDBC API:定義了標(biāo)準(zhǔn)接口,無論編寫Mysql還是Oracle等數(shù)據(jù)庫程序,這些接口是一致的。 2.JDBC數(shù)據(jù)庫驅(qū)動(dòng)程序 7.2.1 DrvierManager類 提供管理一組JDBC驅(qū)動(dòng)程序所需要的基本服務(wù),可以跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫和相應(yīng)
3、的驅(qū)動(dòng)程序之間建立連接。 該類的常用方法有:getConnection和forName方法。 public static Connection getConnection(String url,String user,String password) public static Class forName(String className) DrvierManager類的使用法: (1)加載驅(qū)動(dòng))加載驅(qū)動(dòng) 例如: Class.forName(com.mysql.jdbc.Driver); (2)與數(shù)據(jù)庫建立連接)與數(shù)據(jù)庫建立連接 DriverManager.getConnection(Stri
4、ng url,String user,String password); 對(duì)getConnection函數(shù)中的參數(shù)解釋: url參數(shù)的命名方法:url由3部分組成,各部分間用冒號(hào)分隔,如下所示: jdbc: 其中:jdbc協(xié)議名稱。在JDBC URL中的協(xié)議總是jdbc。 驅(qū)動(dòng)程序名或數(shù)據(jù)庫連接機(jī)制的名稱。如“odbc”,它是用于指定ODBC風(fēng)格的數(shù)據(jù)庫資源名稱的URL而保留的。 一種標(biāo)識(shí)數(shù)據(jù)庫的方法。子名稱可以依不同的子協(xié)議而變化。它還可以有子名稱的子名稱(含有驅(qū)動(dòng)程序編程人員所選的任何內(nèi)部語法)。使用子名稱的目的是為定位數(shù)據(jù)庫提供足夠的信息。 7.2.2 Connection接口 Conn
5、ection接口是java.sql包中最重要的接口。Connection對(duì)象代表與數(shù)據(jù)庫的連接。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫有一個(gè)或多個(gè)連接,或者可與許多數(shù)據(jù)庫有連接。 數(shù)據(jù)庫連接一旦建立,就可用來向它所涉及的數(shù)據(jù)庫發(fā)送SQL語句。Connection的作用是創(chuàng)建向數(shù)據(jù)庫發(fā)送SQL語句的三個(gè)接口。這三個(gè)接口分別是: Statement接口 PreparedStatement接口 CallableStatement接口。 7.2.2 Connection接口 Connection接口提供了多個(gè)同名但是參數(shù)不同的方法創(chuàng)建以上的三個(gè)接口。 例如: public Statement createStat
6、ement(); public Statement createStatement(int resultSetType,int resultSetConcurrency); 其中:參數(shù)resultSetType指返回記錄集的類型 resultSetConcurrency指發(fā)送的SQL語句的權(quán)限 7.2.2 Connection接口 常用的一些方法: boolean isClosed():用于判斷Connection對(duì)象是否已經(jīng)被關(guān)閉; void commit():用于提交SQL語句,確認(rèn)從上一次提交以來所進(jìn)行的修改; void close():斷開連接,釋放資源; void rollback(
7、):取消SQL語句,取消當(dāng)前事務(wù)中進(jìn)行的修改。 DatabaseMetaData getMetaData():獲取一個(gè)DatabaseMetaData對(duì)象。 7.2.3 Statement接口 Statement接口對(duì)象創(chuàng)建完畢后,主要使用以下方法: public ResultSet executeQuery(String sql):用于執(zhí)行產(chǎn)生單個(gè)結(jié)果集的語句,如select。 public int executeUpdate(String sql):用于執(zhí)行insert、update或delete語句以及SQL DLL(數(shù)據(jù)定義)語句。當(dāng)執(zhí)行insert、update或delete語句時(shí)將
8、返回一個(gè)整數(shù),用于表示受影響的行數(shù),返回結(jié)果為0時(shí)表示操作失??;當(dāng)執(zhí)行SQL DLL語句,如create table時(shí),由于它不操作行,返回值將總為0。 7.2.3 Statement接口 public boolean execute(String sql):用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者結(jié)合的SQL語句。 public int executeBatch():用于執(zhí)行幾個(gè)SQL語句。Statement接口使用addBatch(String sql)方法將幾個(gè)SQL語句添加到一個(gè)語句塊中,然后一同提交給數(shù)據(jù)庫服務(wù)器,同時(shí)執(zhí)行。當(dāng)執(zhí)行多個(gè)SQL insert語句時(shí)效率將很高,因?yàn)橐淮翁?/p>
9、交比多次提交要節(jié)省很多系統(tǒng)資源。 void close():釋放Satement對(duì)象的數(shù)據(jù)庫和JDBC資源。 7.2.3 Statement接口 PreparedStatement接口對(duì)象主要使用以下方法: public ResultSet executeQuery(String sql):使用Select命名對(duì)數(shù)據(jù)庫進(jìn)行查詢。 public int executeUpdate(String sql):用于執(zhí)行insert、update或delete語句對(duì)數(shù)據(jù)庫進(jìn)行新增、刪除和修改操作。 void setXXX(int parameterIndex,XXX x):設(shè)定XXX數(shù)據(jù)類型值給Prep
10、aredStatement 類對(duì)象的IN參數(shù)。 7.2.3 Statement接口 CallableStatement接口主要用于執(zhí)行存儲(chǔ)過程,其主要方法同Statement。存儲(chǔ)過程有兩種參數(shù),IN參數(shù)和OUT參數(shù)。CallableStatement接口繼承了PerpareedStatement接口的setXXX方法對(duì)IN參數(shù)賦值。在CallableStatement接口中使用OUT參數(shù),要做兩件事情,一是對(duì)OUT參數(shù)進(jìn)行類型注冊(cè),二是獲取OUT參數(shù)的值。 CallableStatement提供了多種方法進(jìn)行類型注冊(cè),下面是常用的兩種: registerOutParameter(String
11、 parameterStringName, int sqlType); registerOutParameter(String parameterStringName, int sqlType,int scale); 7.2.4 數(shù)據(jù)結(jié)果集ResultSet接口 ResultSet接口用于獲取執(zhí)行SQL語句(或數(shù)據(jù)庫存儲(chǔ)過程)返回的結(jié)果。它的實(shí)例對(duì)象是符合SQL語句條件的所有行。 常用的方法有: public boolean next():用于數(shù)據(jù)庫游標(biāo)移動(dòng)到結(jié)果集的下一行,使之成為當(dāng)前行。如果當(dāng)前行為最后一行,返回值為false;否則,返回true。 在定位到結(jié)果集中的某行后,就可以讀取數(shù)據(jù)
12、。對(duì)于不同數(shù)據(jù)類型,要使用不同的讀取方法getXXX()。JDBC提供了兩種形式: 7.2.4 數(shù)據(jù)結(jié)果集ResultSet接口 public XXX getXXX(String columnName):XXX代表任意的數(shù)據(jù)類型,參數(shù)columnName代表列名。 public XXX getXXX(int columnIndex):XXX代表任意的數(shù)據(jù)類型,參數(shù)columnIndex代表列號(hào)。 ResultSetMetaData getMetaData():獲取結(jié)果集的列編號(hào)、類型和屬性 下面是ResultSet接口的示例:private Statement stmt = null;priv
13、ate ResultSet rs = null;private PreparedStatement prpSql=null;Class.forName(com.mysql.jdbc.Driver);Connection conn=DriverManager.getConnection(jdbc:mysql:/localhost:端口號(hào)/數(shù)據(jù)庫名稱,用戶名,密碼);stmt = conn.createStatement();rs = stmt.executeUpdate(select * from database);while(rs.next() rs.getString(1);rs.clos
14、e();stmt.close();conn.close(); 7.2.5 數(shù)據(jù)庫元數(shù)據(jù)數(shù)據(jù)庫元數(shù)據(jù)-DatabaseMetaData和和ResultSetMetaData DatabaseMetaData接口可以從數(shù)據(jù)庫管理系統(tǒng)中獲得數(shù)據(jù)庫的信息,例如數(shù)據(jù)庫所有的表名、存儲(chǔ)過程名等信息。這個(gè)類提供了許多方法來取得這些信息,常用的方法如下: String getDatabaseProductName():獲得數(shù)據(jù)庫的名稱。 ResultSet getCooumns(String databasename,String dboname, String tablename,String column
15、name):獲得表字段信息,以列的方式存儲(chǔ)在一個(gè)ResultSet對(duì)象中。 7.2.5 數(shù)據(jù)庫元數(shù)據(jù)數(shù)據(jù)庫元數(shù)據(jù)-DatabaseMetaData和和ResultSetMetaData ResultSetMetaData接口用來獲取數(shù)據(jù)庫表的結(jié)構(gòu)。通過它提供的一些常用方法,可以獲得ResultSet對(duì)象中的類型和屬性信息的對(duì)象。常用方法如下: int getColumnType(int column):檢索指定列的SQL類型; String getTableName(int column):獲取指定列的名稱; 所有的利用JDBC訪問數(shù)據(jù)庫的程序都具有以下的流程: 加載JDBC驅(qū)動(dòng)程序 建立和數(shù)
16、據(jù)庫的連接 執(zhí)行SQL語句 存放處理結(jié)果 與數(shù)據(jù)庫斷開連接 7.3.1 通過通過JDBC-ODBC橋連接來訪問數(shù)據(jù)橋連接來訪問數(shù)據(jù)庫庫 可以使JDBC有能力訪問幾乎所有類型的數(shù)據(jù)庫。下面通過一個(gè)例子介紹: 1、首先建立一個(gè)access數(shù)據(jù)庫,數(shù)據(jù)庫名稱為:book,保存數(shù)據(jù)庫文件。 7.3.1 通過通過JDBC-ODBC橋連接來訪問數(shù)據(jù)橋連接來訪問數(shù)據(jù)庫庫 2、配置數(shù)據(jù)源、配置數(shù)據(jù)源 首先要配置ODBC數(shù)據(jù)源。選擇數(shù)據(jù)源(ODBC)(Win 2000在管理工具中;Win XP在控制面板中) 先看圖片,在現(xiàn)場(chǎng)演示。先看圖片,在現(xiàn)場(chǎng)演示。 在管理工具中,選擇“數(shù)據(jù)源” 在對(duì)話框中選擇用戶dsn,添
17、加 在對(duì)話框中選擇access driver(*。Mdb) 單擊“完成”。在數(shù)據(jù)源名稱輸入“book”。選擇數(shù)據(jù)庫為book。 選擇圖書管理數(shù)據(jù)庫.mdb權(quán)限默認(rèn),在登錄用戶名輸入對(duì)應(yīng)的用戶名和密碼。 7.3.1 通過通過JDBC-ODBC橋連接來訪問數(shù)據(jù)橋連接來訪問數(shù)據(jù)庫庫 3 編寫相應(yīng)的程序編寫相應(yīng)的程序 (1)加載數(shù)據(jù)庫的驅(qū)動(dòng)程序 (2)建立連接 (3)向數(shù)據(jù)庫發(fā)送SQL語句 (4)處理查詢結(jié)果 (5)關(guān)閉數(shù)據(jù)庫連接 7.3.1 通過通過JDBC-ODBC橋連接來訪問數(shù)據(jù)橋連接來訪問數(shù)據(jù)庫庫 【例7.1】利用JDBC-ODBC橋連接數(shù)據(jù)庫,執(zhí)行SQL語句,并在數(shù)據(jù)庫中插入一條記錄。 ch
18、7_1.jsp文件內(nèi)容如下: 0) out.println(添加成功); else out.println(添加失敗); rs=stmt.executeQuery(select * from book); out.print(); out.print(); out.print(+書號(hào)); out.print(+書名); out.print(+作者); out.print(+出版社); out.print(+單價(jià)); out.print(); while(rs.next() out.print(); out.print(+rs.getString(1)+); out.print(+rs.getS
19、tring(2)+); out.print(+rs.getString(3)+); out.print(+rs.getString(publish)+); out.print(+rs.getFloat(price)+); out.print(); out.print(); stmt.close(); /關(guān)閉數(shù)據(jù)庫 conn.close(); catch(Exception e) out.println(e.toString(); % 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 1.安裝安裝mysql數(shù)據(jù)庫數(shù)據(jù)庫 從網(wǎng)上下載mysql-5.0.22-wi
20、n32.zip,將mysql安裝到了E:mysql目錄中。 2.啟動(dòng)啟動(dòng)mysql cd e:mysqlbin mysqld-nt 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)據(jù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫庫 3.啟動(dòng)啟動(dòng)mysql監(jiān)視器監(jiān)視器 用戶再啟動(dòng)一個(gè)MS-DOS窗口,切換到E:MYSQLBIN目錄中,執(zhí)行如下命令: e: cd mysql cd bin mysql -u root 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 7.3.2 利用本地協(xié)議純
21、利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 4.創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫 啟動(dòng)mysql監(jiān)視器后,可以在提示符下輸入sql語句來創(chuàng)建數(shù)據(jù)庫和表,sql語句結(jié)束必須使用“;”符號(hào)。在編輯sql語句的過程中可以使用/c終止當(dāng)前sql語句的編輯。 在mysql監(jiān)視器提示符下,輸入創(chuàng)建圖書管理數(shù)據(jù)庫booklib的SQL語句并執(zhí)行, 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)據(jù)庫驅(qū)動(dòng)程序連接數(shù)據(jù)庫 5.創(chuàng)建數(shù)據(jù)庫中的表創(chuàng)建數(shù)據(jù)庫中的表 在booklib數(shù)據(jù)庫中創(chuàng)建book表的SQL語句
22、為: CREATE TABLE book ( bid char(20) NOT NULL, name char(20) default NULL, author char(10) default NULL, publish varchar(50) default NULL, price float default NULL, PRIMARY KEY (bid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 5.創(chuàng)建數(shù)據(jù)庫中的表創(chuàng)建數(shù)據(jù)庫中的表7.3.2 利用本地協(xié)議純利用本地協(xié)議
23、純Java驅(qū)動(dòng)程序連接數(shù)據(jù)庫驅(qū)動(dòng)程序連接數(shù)據(jù)庫6.編寫相應(yīng)的程序編寫相應(yīng)的程序-連接連接mysql數(shù)據(jù)庫數(shù)據(jù)庫try Class.forName(com.mysql.jdbc.Driver); try /和數(shù)據(jù)庫建立連接 conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/booklib,root,); conn.close(); catch(Exception e) out.println(e.toString(); 7.3.2 利用本地協(xié)議純利用本地協(xié)議純Java驅(qū)動(dòng)程序連接數(shù)驅(qū)動(dòng)程序連接數(shù)據(jù)庫據(jù)庫 【例7.2】利用純Ja
24、va驅(qū)動(dòng)程序連接mysql數(shù)據(jù)庫,查詢book表中的所有記錄 連接不同的數(shù)據(jù)庫,除Class.forName()中的驅(qū)動(dòng)程序類及url的書寫方式不同之外,其他所有部分均相同。 7.3.3 配置和連接不同的數(shù)據(jù)庫配置和連接不同的數(shù)據(jù)庫 1.連接連接Oracle數(shù)據(jù)庫數(shù)據(jù)庫 安裝完Oracle后,找到文件classes12.zip(可以在Oracle安裝目錄搜索得到),將該文件復(fù)制到Java JDK的子目錄/jre/lib/ext目錄中,并其更名為classes.jre或cleasses.jar。 Class.forName(oracle.jdbc.driver.OracleDriver); Dr
25、iverManager.getConnection(jdbc:oracle:thinhost:端口號(hào):數(shù)據(jù)庫名, 用戶名,密碼); 7.3.3 配置和連接不同的數(shù)據(jù)庫配置和連接不同的數(shù)據(jù)庫 2.連接連接Sql Server數(shù)據(jù)庫數(shù)據(jù)庫 下載sqljdbc_1.1.1501.101_enu.exe驅(qū)動(dòng)安裝文件。 找到sqljdbc.jar文件,將其復(fù)制到Tomcat所使用的JDK的jrelibext目錄中。連接方法: Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); DriverManager.getConnection(
26、jdbc:sqlserver:/172.0.0.1:1443;DatabaseName=數(shù)據(jù)庫名, “用戶名”,“密碼”); 提示: 如果應(yīng)用程序和要連接的Sql Server2000服務(wù)器在不同的計(jì)算機(jī)上,可以使用Sql Server 2000服務(wù)器的ip地址,例如192.168.1.1。如果應(yīng)用程序無法和Sql Server2000連接,可能需要更新Sql Server 2000服務(wù)器。用戶可以從微軟網(wǎng)站下載補(bǔ)丁sqlsp4.rar,安裝該補(bǔ)丁即可。 7.4.1 查詢數(shù)據(jù)查詢數(shù)據(jù) 1.順序查詢數(shù)據(jù)順序查詢數(shù)據(jù) ResultSet rs=stmt.executeQuery(select bi
27、d,name,author,publish,price from book); 對(duì)于結(jié)果集rs的列數(shù)為5列,第一列對(duì)用bid,第二列對(duì)應(yīng)name,第三列對(duì)應(yīng)author,第四列對(duì)應(yīng)publish,第五列對(duì)應(yīng)price;而每一次rs只能看到一行,要在看到下一行,必須使用next()方法移動(dòng)當(dāng)前行。ResultSet對(duì)象使用getXXX()方法獲得當(dāng)前行字段的值。 下面是一個(gè)實(shí)例: QueryBean.java代碼QueryBean.java代碼package mybean.database;import java.sql.*;public class QueryBean String user=
28、; String password=; StringBuffer queryResult; public QueryBean() queryResult=new StringBuffer(); try Class.forName(com.mysql.jdbc.Driver); catch(Exception e) public String getString(String str) String s=str.trim(); trybyte bb=s.getBytes(ISO-8859-1); s=new String(bb); ch7_3.jsp文件內(nèi)容:ch7_3.jsp文件內(nèi)容: 輸入用
29、戶名: 輸入密碼: 查詢到的記錄: 2.隨機(jī)查詢隨機(jī)查詢 如果需要在結(jié)果集中前后移動(dòng)或隨機(jī)顯示某一條記錄,這時(shí)就必須得到一個(gè)可以滾動(dòng)的結(jié)果集。得到滾動(dòng)結(jié)果集的方法如下: Statement stmt=conn.createStatement(int type,int concurrency); ResultSet rs=stmt.executeQuery(sqlstr); 其中type的取值決定結(jié)果集的滾動(dòng)方式,可以取下列值: 2.隨機(jī)查詢隨機(jī)查詢 ResultSet.TYPE_FORWORD_ONLY:結(jié)果集的游標(biāo)只能向下移動(dòng)。 ResultSet.TYPE_SCROLL_INSENSITI
30、VE:結(jié)果集的游標(biāo)可以上下移動(dòng),當(dāng)數(shù)據(jù)庫的數(shù)據(jù)變化時(shí),當(dāng)前結(jié)果集不變。 ResultSet.TYPE_SCROLL_SENSITIVE:結(jié)果集的游標(biāo)可以上下移動(dòng),當(dāng)數(shù)據(jù)庫的數(shù)據(jù)變化時(shí),當(dāng)前結(jié)果集同步變化。 2.隨機(jī)查詢隨機(jī)查詢 滾動(dòng)結(jié)果集ResultSet對(duì)象可以使用的方法如下: public boolean previous():將游標(biāo)向上移動(dòng),當(dāng)移動(dòng)到結(jié)果集第一行之前返回false。 public void beforeFirst():將游標(biāo)移到結(jié)果集第一行之前。 public void afterLast():將游標(biāo)移到結(jié)果集最后一行之后。 public void first():將游標(biāo)
31、移到結(jié)果集的第一行。 public void last():將游標(biāo)移到結(jié)果集的最后一行。 public boolean isAfterLast():判斷游標(biāo)是否在結(jié)果集的最后一行之后。 2.隨機(jī)查詢隨機(jī)查詢 滾動(dòng)結(jié)果集ResultSet對(duì)象可以使用的方法如下: public boolean isBeforeFirst():判斷游標(biāo)是否在結(jié)果集第一行之前。 public boolean isFirst():判斷游標(biāo)是否在結(jié)果集第一行。 public boolean isLast():判斷游標(biāo)是否在結(jié)果集的最后一行。 public int getRow():得到當(dāng)前游標(biāo)所在的行,行號(hào)從1開始,如果
32、結(jié)果集沒有行,則返回0。 public boolean absolute(int row):將游標(biāo)移到到row所指定的行,row取負(fù)值則倒數(shù),如-1,則移動(dòng)到最后一行。 2.隨機(jī)查詢隨機(jī)查詢 【例7.4】隨機(jī)查詢示例。 RandomQuerybean.java StringBuffer queryResult; Connection conn; Statement stmt; ResultSet rs; public String handleString(String s) String str=s; try byte bb=str.getBytes(ISO-8859-1); str=new
33、 String(bb); return str; catch(Exception e) return str; public RandomQuerybean() queryResult=new StringBuffer(); ch7_3.jsp文件內(nèi)容:ch7_4.jsp文件內(nèi)容: 3.條件查詢條件查詢 在順序查詢和隨機(jī)查詢中得到的是表中的全部記錄。如果要得到表中滿足條件的記錄,就要采用條件查詢。條件查詢是由客戶端提供查詢條件,即查詢的參數(shù),再由這些參數(shù)構(gòu)造SQL語句,執(zhí)行該語句并得到篩選結(jié)果的查詢。 下面的例子根據(jù)用戶選擇的字段和輸入的關(guān)鍵字查詢圖書信息,如果沒有輸入關(guān)鍵字則顯示所有圖書的信
34、息。 3.條件查詢條件查詢 【例7.5】條件查詢圖書信息 keyQueryBean.java queryResult.append(+rs.getString(5)+); queryResult.append(); queryResult.append(); rs.close(); stmt.close(); conn.close();catch(Exception e)System.out.println(e);queryResult.append(e.toString();return queryResult; ch7_5.jsp文件內(nèi)容: 選擇 書號(hào) 作者 書名 出版社 含有 含有關(guān)鍵字
35、的記錄: 7.4.2 更新查詢更新查詢 Statement對(duì)象提供了int executeUpdate(String sqlStatement)方法,用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中數(shù)據(jù)的添加、刪除和更新操作。sqlStatement參數(shù)是由insert、delete和update等關(guān)鍵字構(gòu)成的Sql語句。函數(shù)返回值為查詢所影響的行數(shù),失敗返回0。 例如添加記錄的sql語句: String sqlStatement=insert book values(tp1004,高數(shù),楊, 清華出版社,35); 7.4.2 更新查詢更新查詢 stmt.executeUpdate(sqlStatement); 例如更新記
36、錄的sql語句: String sqlStatement=update book set name=新值 where bid=tp1001; stmt.executeUpdate(sqlStatement); 例如刪除記錄的sql語句: String sqlStatement=delete from book where bid=tp1001 ; stmt.executeUpdate(sqlStatement); 7.4.2 更新更新查詢查詢 1、添加記、添加記錄錄 【例7.6】向mysql數(shù)據(jù)庫中的表追加記錄 addBean.java addMessage=對(duì)表中添加+m+記錄; else
37、addMessage=添加記錄失敗!; stmt.close(); conn.close();catch(Exception e)addMessage=輸入的書號(hào)不能為重復(fù)!;return addMessage; ch7_6.jsp文件內(nèi)容: 書號(hào)是主鍵,不能輸入重復(fù)值。 輸入書號(hào): 輸入書名: 輸入作者: 輸入出版社: 輸入單價(jià): 您添加記錄操作結(jié)果為: 當(dāng)前數(shù)據(jù)庫的記錄是: 7.4.2 更新更新查詢查詢 2、刪除記、刪除記錄錄 【例7.7】刪除book表中的記錄。 listBean.javaqueryResult.append(刪除);queryResult.append();queryR
38、esult.append();conn.close();catch(Exception e) queryResult.append(請(qǐng)輸入正確的用戶名和密碼!+注意:用戶名為root,密碼為空。);return queryResult; deleteBean.javapackage mybean.database;import java.sql.*;public class deleteBean String strbid=;String deleteMessage=;public deleteBean()tryClass.forName(com.mysql.jdbc.Driver);catc
39、h(Exception e)public String getStrbid() return strbid;public void setStrbid(String strbid) this.strbid = strbid; ch7_7.jsp文件內(nèi)容:查詢到的記錄:ch7_7delete.jsp文件內(nèi)容:% String strbid=null; try strbid=request.getParameter(bid); 7.4.2 更新更新查詢查詢 3.修改記錄修改記錄 【例7.8】修改記錄,頁面如圖效果如圖所示:use booklibdelimiter $create procedure
40、 update_book_p(in p_bid char(20), in p_name char(20), in p_author char(10), in p_publish varchar(50), in p_price float)reads sql databegin update book set name=p_name, author=p_author, publish=p_publish, price=p_price where bid=p_bid;end $delimiter ; showBean.javapackage mybean.database;import java.
41、sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class showBean StringBuffer queryResult;public showBean()queryResult=new StringBuffer();try Class.forName(com.mysql.jdbc.Driver);catch(Exception e)public String getString(String str)String s=str.t
42、rim();trybyte bb=s.getBytes(ISO-8859-1); 三個(gè)頁面代碼: 第三個(gè)頁面ch7_8update.jsp文件內(nèi)容: 第三個(gè)頁面上的Javabean代碼:pstmt.setString(3, author);pstmt.setString(4, publish);pstmt.setFloat(5, price);pstmt.executeUpdate();pstmt.close();conn.close();updateMessage=成功修改記錄;catch(SQLException e1)updateMessage=e1.toString();return
43、updateMessage; 7.4.3 分頁查詢分頁查詢 分頁顯示程序中可以使用CachedRowSetImpl類,CachedRowSetImpl對(duì)象可以保存ResultSet對(duì)象中的數(shù)據(jù),它不依賴與Connection對(duì)象,并且繼承了ResultSet的所有方法。CachedRowSetImpl類在com.sun.rowset包中。 使用CachedRowSetImpl對(duì)象的代碼如下: 7.4.3 分頁查詢分頁查詢 import com.sun.rowse.*; ResultSet rs=stmt.executeQuery(select * from book); CachedRowSetImpl rowSet=new CachedRowSetImpl(); rowSet.populate(rs); while(rowS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度潯購(gòu)F000353632食品級(jí)冰柜采購(gòu)協(xié)議3篇
- 2025年度個(gè)人房產(chǎn)買賣居間代理服務(wù)協(xié)議3篇
- 二零二五年度環(huán)保型打印耗材研發(fā)與銷售合同可打印協(xié)議書下載3篇
- 醫(yī)療技術(shù)產(chǎn)品的研發(fā)與市場(chǎng)應(yīng)用
- 二零二五年度瓷磚行業(yè)環(huán)保公益活動(dòng)贊助合同3篇
- 未來辦公環(huán)境綠色辦公創(chuàng)業(yè)項(xiàng)目策劃
- 二零二五年度編織袋行業(yè)政策研究與解讀合同3篇
- 2025版顯示屏技術(shù)改造與升級(jí)合同3篇
- 湖北2025年湖北武漢理工大學(xué)專職輔導(dǎo)員招聘筆試歷年參考題庫附帶答案詳解
- 2025年度鋼構(gòu)工程鋼結(jié)構(gòu)焊接與檢驗(yàn)合同協(xié)議
- 云南省普通高中學(xué)生綜合素質(zhì)評(píng)價(jià)-基本素質(zhì)評(píng)價(jià)表
- 2024年消防產(chǎn)品項(xiàng)目營(yíng)銷策劃方案
- 旅游公司發(fā)展規(guī)劃
- 聞道課件播放器
- 03軸流式壓氣機(jī)b特性
- 五星級(jí)酒店收入測(cè)算f
- 大數(shù)據(jù)與人工智能ppt
- 人教版八年級(jí)下冊(cè)第一單元英語Unit1 單元設(shè)計(jì)
- GB/T 9109.5-2017石油和液體石油產(chǎn)品動(dòng)態(tài)計(jì)量第5部分:油量計(jì)算
- 邀請(qǐng)函模板完整
- 2023年江蘇省南京市中考化學(xué)試卷2
評(píng)論
0/150
提交評(píng)論