1 / 81

答疑时间:周二 答疑地点:计算机系(行政楼 518 ) 答疑网址: cc.sbs/web.html 李智敏

第九章 基于 JSP 的 Web 数据库应用开发. 答疑时间:周二 答疑地点:计算机系(行政楼 518 ) 答疑网址: http://cc.sbs.edu.cn/web.html 李智敏. 学习要点. 1. 了解 JDBC 的基本功能 2. 理解数据库的基本概念,掌握 SQL 语言使用、数据库和数据表的创建技术 3. 掌握 JDBC 连接数据库的工作原理、连接方式和连接过程 4. 熟练掌握使用 JSP 技术查询、插入、更新和删除数据库数据技术。. 9.1 Web 数据库应用基础. 9.1.1 数据库基本概念. 1. 基本术语 ( 1 )数据库系统

lorant
Download Presentation

答疑时间:周二 答疑地点:计算机系(行政楼 518 ) 答疑网址: cc.sbs/web.html 李智敏

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 基于JSP的Web数据库应用开发 答疑时间:周二 答疑地点:计算机系(行政楼518) 答疑网址:http://cc.sbs.edu.cn/web.html 李智敏

  2. 学习要点 1.了解JDBC的基本功能 2. 理解数据库的基本概念,掌握SQL语言使用、数据库和数据表的创建技术 3. 掌握JDBC连接数据库的工作原理、连接方式和连接过程 4. 熟练掌握使用JSP技术查询、插入、更新和删除数据库数据技术。

  3. 9.1 Web数据库应用基础 9.1.1 数据库基本概念 • 1.基本术语 • (1)数据库系统 • 数据库系统是一个存储数据的计算机系统。 • (2)数据库 • 数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库概念包含两层意思: • 数据库保管数据的“仓库”。“数据”和“库”两个概念结合成为“数据库”。 • 数据库是数据管理的方法和技术,它能够合理地组织数据、方便地维护数据、严密地控制数据和有效地利用数据。 • 数据库是一个合理组织了的数据仓库。

  4. 9.1 Web数据库应用基础 9.1.1 数据库基本概念 (3)数据库管理系统(DBMS) 数据库管理系统(DataBase Management System DBMS)是管理数据库的软件系统,它提供了一组建立数据库和管理数据库的工具。用户可以使用这些工具进行各种数据库操作,如数据库生成、数据表格生成、数据的输入和修改、数据的检索和使用、数据安全、数据相关关系的设定和数据访问权限的设定等。 目前市场上比较著名的数据库管理系统有Oracle、Sybase、Informix、SQL Server等。 2. 数据库设计与管理信息系统 管理信息系统简称为MIS(Management Information System),管理信息系统帮助人们完成需要手工处理的信息处理工作,不仅能够提高工作效率,降低劳动强度,而且能够提升管理信息的质量和水平。管理信息系统的数据存放在数据库中 。

  5. 用 户 9.1 Web数据库应用基础 系 统 信 功 9.1.1 数据库基本概念 管 理 库 能 息 数据库 系 据 模 理 用 户 数 统 用 户 块 管 管理信息系统、数据库管理系统和数据库的关系

  6. 9.1 Web数据库应用基础 9.1.1 数据库基本概念 3. 数据库、表、记录和字段 数据库:数据库中的数据表示为多个表的集合,通过建立表与表之间的关系来定义数据库的结构。 表: 按某一公共结构存储的一组相似数据,它是数据库的基础构件。 记录:表中数据以行、列方式将相关信息排列成逻辑组,表中每一行称为一个记录 字段:表中每一列称为字段 例如,网上书店数据库名为bookshop,库中有7个表:book、userinfo、orderform、orderdetail、notes、employee和publisher。

  7. 9.1 Web数据库应用基础 9.1.2创建数据库和表 1. 创建数据库 (1)启动SQL Server服务管理器 (2)创建数据库 2. 创建新表:booktable

  8. 9.1 Web数据库应用基础 网上书店数据库bookshop 9.1.2创建数据库和表 数据表book 字段值 一个字段 字段名 一条记录

  9. 9.1 Web数据库应用基础 9.1.3 SQL语句 1. 数据定义语言 (1)创建数据表CREATE CREATETABLE [库名]表名(列名 数据类型 [(字符串长度)]… [,…n]) (2)删除数据表DROP DROP命令删除数据表和表中的所有记录 例如,DROP TABLE booktable (3)修改数据表ALTER ALTER命令添加或删除数据表中字段。 例如:ALTER TABLE booktable ADD author varchar(15)

  10. 9.1 Web数据库应用基础 9.1.3 SQL语句 2. 数据操纵语言 (1)数据查询语句SELECT SELECT字段1[,字段2,…] FROM 表名[WHERE条件表达式] [GROUP BY 分列组[HAVING分组条件…] [GROUP BY字段1[ASC/DESC] [,字段2[ASC/DESC][,…]

  11. 9.1 Web数据库应用基础 9.1.3 SQL语句 2.数据操纵语言 (1)数据查询语句SELECT ①SELECT子句:查询操作 ②FROM子句:信息来源,列出要操作的数据表名 ③WHERE子句:查询记录时满足条件 ④GROUP BY:将选择的记录分组 HAVING:指定分组的条件。 ⑤ORDER BY:结果集排序,ASC升序排列,DESC降序排列

  12. 9.1 Web数据库应用基础 9.1.3 SQL语句 (2)SELECT语句使用举例 ①在booktable表中查询所有图书信息 SELECT * FROMbooktable ②在booktable表中查询书名信息 SELECTbookname FROM booktable ③在booktable表中查询书号等于ISBN 7-302-08599-4图书的书名 SELECT bookname FROM booktable WHERE bookid= ISBN 7-302-08599-4

  13. 9.1 Web数据库应用基础 9.1.3 SQL语句 (2)SELECT语句使用举例 ④ 在booktable表中查询2013年上半年出版图书的书名 SELECT bookname FROM booktable WHERE pubdate Between '2013-1-1'and '2013-6-30' ⑤图书按出版日期进行排序 SELECT* FROM booktable ORDER BY pubdate SELECT* FROM booktable ORDER BY pubdateDESC ⑥模糊查询 SELECT * FROM booktable WHERE bookname LIKE 'C++%'

  14. 9.1 Web数据库应用基础 9.1.3 SQL语句 (3)插入语句INSERT INSERT INTO 表名(字段1[,字段2,…字段n]) VALUES(值1[,值2,…值n]) (4)更新语句UPDATE UPDATE 表名 SET 字段名1=新值1[,字段名2=新值2,…][WHERE条件表达式] (5)删除语句DELETE DELETE FROM 表名 [WHERE条件表达式]

  15. 9.1 Web数据库应用基础 9.1.3 SQL语句 3. 插入语句INSERT GRANT:为数据库用户授予某种权限 REVOVE:收回数据库用户的某种权限 DENY:拒绝用户访问数据库的某一对象

  16. 9.2 JDBC接口技术 9.2.1 JDBC 概述 1. 什么是JDBC JDBC(Java Database Connectivity)接口技术实际上是一种通过Java语言访问任何结构化数据库的应用程序接口(API)。许多数据库系统带有JDBC驱动程序,Java程序通过JDBC驱动程序与数据库连接,执行查询、插入、更改和删除等操作。为能够访问带有ODBC驱动程序的数据库,Sun公司开发了JDBC — ODBC Bridge,应用这项技术,Java程序就能够访问带有ODBC驱动程序的数据库。由于大多数数据库系统都带有ODBC驱动程序,所以使用JDBC — ODBC Bridge技术Java程序可以访问大多数数据库,如:MS SQL Server、Oracle、Sybase、Informix和MS Access等数据库。

  17. JDBC 9.2 JDBC接口技术 9.2.1 JDBC 概述 2. JDBC 的功能 (1) 与一个数据库建立连接(connection); (2) 向数据库发送SQL语句(statement); (3) 处理数据库返回的结果(resultset)。 ②发送SQL 语句statement ①建立连接 connection 请求 JSP应用程序 响应 数据库服务器 ③返回结果 resultset 客户端 Web服务器

  18. 9.2 JDBC接口技术 9.2.2 JDBC 工作原理 标准接口 JSP应用程序 JDBC API 驱动管理器 各厂商驱动器 JDBC DriverManager SQL Server JDBC驱动 Oracle JDBC驱动 Access JDBC驱动 各种数据库 SQL Oracle Access

  19. 9.2 JDBC接口技术 9.2.3 JDBC 数据库连接方式 (1)JDBC-ODBC Bridge驱动程序 (2)纯Java数据库驱动程序 JSP应用程序 JDBC转换为ODBC连接 JDBC API 直接连接 JDBC DriverManager 通过ODBC数据源与数据库连接 JDBC-ODBC桥 纯Java驱动 ODBC 数据库 数据库

  20. 9.2 JDBC接口技术 9.2.4 JDBC 数据库连接方式 使用JDBC-ODBC桥连接访问数据库,先要建立数据源(Data Source Name,DSN),这个数据源对应一个数据库 。

  21. JDBC-ODBC Bridge 9.2 JDBC接口技术 9.2.5 JDBC建立数据库连接示例 以网上书店的bookshop数据库为例 【例9.1】(P261):使用JSP技术查询booktable表中书号是ISBN 7-04-012301-0的图书。本例使用前面生成的bookshoplk数据源,通过JDBC-ODBC桥访问数据库。

  22. 9.2 JDBC接口技术 9.2.5 JDBC建立数据库连接示例 ①导入java.sql.*包 <%@ page contentType="text/html; charset=GB2312" %> <%@ page import=“java.sql.*” %> //所有与数据库有关的对象和方法都在java.sql包中 <html><head><title>JDBC建立数据库连接</title></head> <body><center> <font size = 5 color = blue> 数 据 查 询</font><hr> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //建立连接,创建Connection类的一个实例 Connectionconn=DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); //发送SQL语句。在执 行一个SOL查询语句前,必须用createStatement方法建立一个Statement类的对象,用于发送不带参数的简单SQL语句。 Statementstmt=conn.createStatement(); try{//建立ResultSet(结果集)对象 ResultSetrs; //ResultSet类存放查询结果。当建立一个ResultSet类对象时,它指向第一行之前的位置。 ②加载驱动程序 ③与bookshoplk数据源指定的数据库建立连接 ④发送SQL语句 ⑤创建结果集对象

  23. 9.2 JDBC接口技术 9.2.5 JDBC建立数据库连接示例 //执行SQL语句 rs=stmt.executeQuery("SELECT * FROM booktable // executeQuery:用于产生单个结果集的语句 where bookid='ISBN 7-04-012301-0'"); %> <table border=3> <tr bgcolor=silver> <td>bookid</td><td>bookname</td><td>author</td> <td>publisher</td><td>pubdate</td><td>price</td> <td>type</td><td>quantity</td> </tr> <% //利用while循环将数据表中的记录列出 while (rs.next()){ %> <tr> <td><%= rs.getString(“bookid”) %></td>//将名称为bookid的列的内容作为字符型返回 执行查询,并将结果集存储在rs对象中

  24. 9.2 JDBC接口技术 9.2.5 JDBC建立数据库连接示例 <td><%= rs.getString("bookname") %></td> <td><%= rs.getString("author") %></td> <td><%= rs.getString("publisher") %></td> <td><%= rs.getDate("pubdate") %></td>// 只返回年月日 <td><%= rs.getString("price") %></td> <td><%= rs.getString("type") %></td> <td><%= rs.getString("quantity") %></td> </tr> <% } rs.close();//关闭ResultSet对象 } //由于加载驱动程序时可能产生异常,所以需要异常处理程序段 catch(Exception e){ try out.println(e.getMessage()); } stmt.close();//关闭Statement对象 conn.close();//关闭Connection对象 %> </table></center></body></html> ⑥释放资源,关闭与数据库的连接

  25. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 1. JDBC建立数据库连接步骤 (1) 加入命令行:<%@ page import="java.sql.*" %> (2) 加载驱动程序: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); (3) 建立连接:创建Connection类的一个实例 Connection conn=DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); (4) 发送SQL语句: Statement stmt = conn.createStatement(); (5)建立ResultSet(结果集)对象: ResultSet rs; (6)执行SQL语句: rs=stmt.executeQuery("SELECT * FROM booktable where bookid='ISBN 7-04-012301-0'"); // executeQuery:用于产生单个结果集的语句 (7)关闭对象: rs.close(); //关闭ResultSet对象 stmt.close(); //关闭Statement对象 conn.close(); //关闭Connection对象

  26. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 2. JDBC数据库连接步骤详解 (1)加入命令行(P264) 所有与数据库有关的对象和方法都在java.sql包中,所以在使用JDBC的程序中必须加入命令行: <%@ page import="java.sql.*" %> (2)加载驱动程序(P264) 应用JDBC-ODBC Bridge方式连接数据库,必须先加载JDBC-ODBC Bridge驱动程序,语句如下: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class是包java.lang中的一个类,该类通过调用静态方法forName建立JDBC-ODBC桥接器,即加载驱动程序。 由于加载驱动程序时可能产生异常,所以需要异常处理程序段。 try{ …… } catch(Exception e ){ …… }

  27. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 (3)建立连接(P265) 要连接一个数据库,必须创建Connection类的一个实例 : Connection conn = DriverManager.getConnection (jdbc:odbc:数据源名,"Loginname","Password"); 调用DriverManager.getConnection方法建立与数据库的连接,该方法指定了数据库的位置、用户名和用户口令。 DriverManager类位于JDBC的管理层,作用在用户和驱动程序之间。 数据源名是在“控制面板→管理工具→数据源(ODBC)”中设置的数据源名。"Loginname"是用户名,"Password"是用户口令。如果没有为数据源设置用户名和用户口令,连接形式如下: Connection conn = DriverManager.getConnection(jdbc:odbc:数据源名, "sa",""); 一旦DriverManager.getConnection方法找到了建立连接的驱动程序和数据源,则通过用户名和口令开始与DBMS建立连接,如果连接通过,连接建立完成。

  28. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 (4)发送SQL语句(P265) Statement类的对象由Connection 的createStatement方法创建,用于发送不带参数的简单SQL语句,对数据库进行具体操作,如查询、修改等。在执行一个SOL查询语句前,必须用createStatement方法建立一个Statement类的对象。例如: Connection conn =DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); Statement stmt = conn.createStatement();

  29. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 (5)创建结果集对象(P266) 一旦连接到数据库,就可以查询数据表名、列名和有关的信息,并且可以运行SQL语句对数据库的数据进行查询、添加、更新和删除等操作。JDBC提供了ResultSet、DatabaseMetaData和ResultSetMetaData类获取数据库中的信息。 ResultSet类存放查询结果,并通过一套方法提供对数据的访问。它是JDBC中很重要的对象。ResultSet包含任意数量的命名列,可以按名字访问这些列;它也包含一或多个行,可以按顺序自上而下地逐一访问。例如: Statement stmt = con.createStatement(); ResultSetrs; rs=stmt.executeQuery("SELECT * FROM booktable where bookid='ISBN 7-04-012301-0'");

  30. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 当建立一个ResultSet类对象时,它指向第一行之前的位置。ResultSet 对象常用方法如下: ·getInt(int):将序号为int的列的内容作为整数返回; ·getInt(String):将名称为String的列的内容作为整数返回; ·getFloat(int):将序号为int的列的内容作为一个float型数返回; ·getFloat (String):将名称为String的列的内容作为float型数返回; ·getData(int):将序号为int的列的内容作为日期返回; ·getData(String):将名称为String的列的内容作为日期返回; ·next():把行指针移到下一行,如果没有剩余行,则返回false; ·close():关闭结果集; ·getMetaData():返回ResultSetMetaData对象。

  31. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 ResultSetMetaData类实例提供ResultSet中列的名称、数目和类型信息。例如: ResultSetMetaData rsmd; rsmd=Results.getMetaData(); NumCols= rsmd.getColumnCount(); ResultSetMetaData对象常用方法如下: ·getColumnCount():返回ResultSet中的列数; ·getColumnName(int):返回序号为int的列名; ·getColumnLabel(int):返回序号为int列暗含的标签; ·isCurrency(int):如果此列包含有货币单位的一个数字,则返回true; ·isReadOnly(int):如果此列是只读,则返回true; ·isAutoIncrement(int):如果此列自动递增,则返回true。

  32. 输出booktable 表列名 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 【例9.2】(P267):输出booktable 表中各列的名称。代码创建了ResultSetMetaData对象rsmd ,并使用getColumnCount()和getColumnName()方法取得booktable表中的列数和列名。

  33. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 <%@ page contentType="text/html; charset=GB2312" %> <%@ page import="java.sql.*" %> <html><head><title>输出 booktable 表各列的名称 </title></head> <body><center><font size = 4 color = blue>输出 booktable 表各列的名称</font><hr><br> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //建立连接 Connection conn =DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); //发送SQL语句 Statement stmt=conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM booktable");// executeQuery:用于产生单个结果集的语句 ResultSetMetaData rsmd= rs.getMetaData();//创建ResultSetMetaData对象。 getMetaData():返回ResultSetMetaData对象,其类实例提供ResultSet中列的名称、数目和类型信息。 %><p>

  34. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 记录集中共有 <font size = 4 color = red> <%= rsmd.getColumnCount() %></font>列 ,各列的名称是:<br> <font size = 4 color = red>// getColumnCount():返回ResultSet中的列数 <% for(int i = 1; i <= rsmd.getColumnCount(); i++){ if( i==1 ) //getColumnName(int):返回序号为int的列名 out.print(rsmd.getColumnName(i)); else out.print(", "+rsmd.getColumnName(i) ); } rs.close(); //关闭ResultSet对象 stmt.close(); //关闭Statement对象 conn.close();//关闭数据库连接对象 %> </font></body></html>

  35. 9.2 JDBC接口技术 9.2.6 JDBC建立数据库连接方法详解 (6)执行SQL语句 Statement对象提供了3种执行SQL语句的方法: • executeQuery:用于产生单个结果集的语句,例如select语句。 rs = stmt.executeQuery("SELECT * FROM booktable"); • executeUpdate:用来执行insert、delete以及sqlddl(数据定义语句)。 • Execute:用来返回多个结果集、多个更新计数或两者组合的语句。

  36. 顺序查询 9.3 查询记录 11.3.1 顺序查询 应用结果集Result的next()方法顺序输出一个表里的包含全部字段的所有记录。 【例9.3】(P268):顺序输出数据表“ booktable”中的所有记录和所有字段。 分析:使用代码 “ Select * From booktable” 从booktable数据表选择所有的记录,放置在rs结果集中,然后使用rs.next()方法将结果集中的数据顺序显示出来。

  37. 9.3 查询记录 11.3.1 顺序查询 <%@ page contentType="text/html; charset=GB2312" %> <%@ page import="java.sql.*" %> <html><head><title>顺序查询</title></head> <body><center><font size=4 color=blue>顺序输出数据表“ booktable”中包含所有字段的所有记录</font><hr> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn =DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); Statement stmt=conn.createStatement(); try{ ResultSet rs; //建立ResultSet(结果集)对象 rs=stmt.executeQuery(“SELECT * FROM booktable”); //执行SQL语句,executeQuery:用于产生单个结果集的语句 %> <table border=3> <tr bgcolor=silver><b> <td>bookid</td> <td>bookname</td> <td>author</td>

  38. 9.3 查询记录 11.3.1 顺序查询 <td>publisher</td> <td>pubdate</td><td>price</td> <td>type</td><td>quantity</td> </tr> <%//利用while循环将数据表中的记录列出 while (rs.next()){ %> <tr> <td><%= rs.getString("bookid") %></td> <td><%= rs.getString("bookname") %></td> <td><%= rs.getString("author") %></td> <td><%= rs.getString("publisher") %></td> <td><%= rs.getString("pubdate") %></td> <td><%= rs.getString("price") %></td> <td><%= rs.getString("type") %></td> <td><%= rs.getString("quantity") %></td> </tr> <% } rs.close(); } //关闭ResultSet对象 catch(Exception e){//异常处理 out.println(e.getMessage()); } stmt.close(); //关闭Statement对象 conn.close(); //关闭Connection对象 %> </table></center> </body></html>

  39. 参数查询 9.3 查询记录 9.3.2 参数查询 数据筛选是指按条件从数据库中选出符合条件的所有记录,由Where子句指定选择记录时要满足的条件。 【例9.4】(P269):用户在界面输入查询条件,如出版社的名称,输入的名称提交给ex9_04.jsp处理,输出数据表“ booktable”中需要查询的出版社出版的图书。其关键查询语句为: "Select * From booktable where publisher='"+publishername+"'"

  40. 9.3 查询记录 9.3.2 参数查询 ex9_04.html代码清单如下: <html><head> <title>参数查询应用案例</title></head> <body><center> <font size = 4 color = blue> 图 书 查 询</font></center> <hr> <form method="post" action="ex9_04.jsp"><font color=green> 请输入出版社名称: <input type=text name="pubname" size=20 maxlength=20><p> <input type=submit value=" 提 交 "> <input type=reset value=" 清 除 "> </form></font> </body></html>

  41. 9.3 查询记录 9.3.2 参数查询 ex9_04.jsp代码清单如下: <%@ page contentType="text/html; charset=GB2312" %> <%@ page import="java.sql.*" %> <html><head><title>选择查询</title></head> <body><center> <% request.setCharacterEncoding("GB2312"); String publishername =request.getParameter("pubname"); if(publishername==null){ publishername=""; }%><font size=4 color=blue>输出数据表booktable中<%=publishername%>的记录</font><hr>

  42. 9.3 查询记录 9.3.2 参数查询 <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn =DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); Statement stmt=conn.createStatement(); try{ ResultSet rs; //建立ResultSet(结果集)对象 rs=stmt.executeQuery("Select * From booktable where publisher='"+publishername+"'"); //执行SQL语句 %><table border=3> <tr bgcolor=silver><b> <td>bookid</td><td>bookname</td><td>author</td><td>publisher</td> td>pubdate</td><td>price</td> <td>&nbsptype</td><td>quantity</td> </tr> 查询条件

  43. 9.3 查询记录 9.3.2 参数查询 <% //利用while循环将数据表中的记录列出 while (rs.next()){ %> <tr> <td><font size=1><%= rs.getString("bookid") %></font></td> <td><font size=1><%= rs.getString("bookname") %></font></td> <td><font size=1> <%= rs.getString("author") %> </font></td> <td><font size=1><%= rs.getString("publisher") %></font></td> <td><font size=1> <%= rs.getString("pubdate") %> </font></td> <td><font size=1><%= rs.getString("price")%></font></td> <td><font size=1><%= rs.getString("type") %></font></td> <td><font size=1><%= rs.getString("quantity") %></font></td> </tr>

  44. 9.3 查询记录 9.3.2 参数查询 <% } rs.close(); //关闭ResultSet对象 } catch(Exception e){ out.println(e.getMessage()); } stmt.close(); //关闭Statement对象 conn.close(); //关闭Connection对象 %> </table></center> </body></html>

  45. 模糊查询 9.3 查询记录 9.3.3 模糊查询 在模糊查询中可以用通配符“%”代表任意多个字符,“_”代表任意一个字符。 【例9.5】(P272):用户在界面(ex9_05.html)中输入书名中的部分词汇,输入的部分词汇提交给ex9_05.jsp处理,输出数据表“ booktable”中所有包含该词汇图书的书名。其关键查询语句为: "Select * From booktable where booknamelike '%"+b_name+"%'"

  46. 9.3 查询记录 9.3.3 模糊查询 代码ex9_05.html清单如下: <html><head><title>模糊查询应用案例</title></head> <body><center> <font size=4 color=blue> 模 糊 查 询</font></center> <hr><form method="post" action="ex9_05.jsp"> <font color=green> 书名: <input type=text name="bookname" size=20 maxlength=20><br> 注:可以输入部分词汇<br> <input type=submit value=" 提 交 "> <input type=reset value=" 清 除 "> </form></font></body></html>

  47. 9.3 查询记录 9.3.3 模糊查询 代码ex9_05.jsp清单如下: <%@ page contentType="text/html; charset=GB2312" %> <%@ page import="java.sql.*" %> <html><head><title>模糊查询</title></head> <body><center> <% request.setCharacterEncoding("GB2312"); String b_name=request.getParameter("bookname"); if(b_name==null){ b_name=""; } %> <font size=4 color=blue>输出与<%=b_name%>有关的图书</font><hr>

  48. 9.3 查询记录 9.3.3 模糊查询 <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection Conn =DriverManager.getConnection("jdbc:odbc:bookshoplk","sa",""); Statement stmt=conn.createStatement(); try{ ResultSet rs; //建立ResultSet(结果集)对象 rs=stmt.executeQuery("Select * From booktable where bookname like '%"+b_name+"%'"); %> 模糊查询

  49. 9.3 查询记录 9.3.3 模糊查询 <table border=3> <tr bgcolor=silver><b> <td>bookid</td><td>bookname</td><td>author</td><td>publisher</td> <td>pubdate</td><td>price</td><td>&nbsptype</td><td>quantity</td> </tr> <% //利用while循环将数据表中的记录列出 while (rs.next()){ %> <tr> <td><font size=1><%= rs.getString("bookid") %></font></td> <td><font size=1><%= rs.getString("bookname") %></font></td> <td><font size=1><%= rs.getString("author") %></font></td> <td><font size=1><%= rs.getString("publisher") %></font></td>

  50. 9.3 查询记录 9.3.3 模糊查询 <td><font size=1><%= rs.getString("pubdate") %></font></td> <td><font size=1><%= rs.getString("price") %></font></td> <td><font size=1><%= rs.getString("type") %></font></td> <td><font size=1><%= rs.getString("quantity") %></font></td> </tr> <% } rs.close(); //关闭ResultSet对象 } catch(Exception e){ out.println(e.getMessage()); } stmt.close(); //关闭Statement对象 conn.close(); //关闭Connection对象 %> </table></center> </body></html>

More Related