Download
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
答疑时间:周二下午 答疑地点:信息技术系(行政楼 526 ) 李智敏 PowerPoint Presentation
Download Presentation
答疑时间:周二下午 答疑地点:信息技术系(行政楼 526 ) 李智敏

答疑时间:周二下午 答疑地点:信息技术系(行政楼 526 ) 李智敏

181 Views Download Presentation
Download Presentation

答疑时间:周二下午 答疑地点:信息技术系(行政楼 526 ) 李智敏

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 第 九 章 基于JSP的Web数据库应用开发 答疑时间:周二下午 答疑地点:信息技术系(行政楼526) 李智敏

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

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

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

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

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

  7. 9.1 Web数据库应用基础 9.1.3 SQL语句 1. 选择语句(Select Statement) 从现有的数据库中检索数据,将满足一定约束条件的一个或多个表中的字段从数据库中挑选出来,并按一定的分组和排序方法显示。简单的选择语句只有FROM子句,用来指定数据的来源,也就是记录来自那些表。 WHERE子句指定选择记录时要满足的条件,如果没有WHERE子句,则返回表中的所有记录。 SELECT 字段1[,字段2,…]FROM 表名[WHERE 条件表达式]

  8. 9.1 Web数据库应用基础 9.1.3 SQL语句 (1)在booktable表中检索所有书名 SELECT bookname FROM booktable 功能:从booktable表的bookname字段检索数据。 SELECT:关键字,说明要做查询操作;  bookname:字段名,数据从该字段中检索;  FROM:关键字,指明信息来源,后面列出表的名称。  booktable:表的名称,数据从该表中检索。 结果集是booktable表中的全部书名。 (2)在booktable表中查询书号等于ISBN7-04-012301-0的书名 SELECT bookname FROM booktable WHERE bookid=ISBN ISBN 7-04-012301-0 结果集是:C++程序设计。

  9. 9.1 Web数据库应用基础 9.1.3 SQL语句 (3)范围查询,在booktable表中查询2002年上半年出版的书名 SELECT bookname FROM booktable WHERE pubdate Between‘2002-1-1’and ‘2002-6-30’ (4)ORDER BY子句,使结果集按序排列。图书按出版日期排序。 SELECT* FROM booktable ORDER BYbookid 缺省值是升序, 按降序排列, 加关键字DESC: SELECT* FROM booktable ORDER BYbookidDESC (5)模糊查询,在WHERE子句中应用LIKE运算符,可以只选择与用户规定格式相同的记录。用通配符“%”可以代替任何字符串。例如,在userinfo表中查询所有姓王的读者,可用以下语句: SELECT * FROM userinfo WHERE username LIKE‘王%’

  10. 9.1 Web数据库应用基础 9.1.3 SQL语句 2. 插入语句(Insert Statement) 一个或多个记录添加到指定表中。 INSERT INTO 表名(字段1[,字段2,…n]) VALUES(值1[,值2,…n]) 例如,在booktable表中插入新书记录(书号:ISBN 7-04-012301-0,书名:C++程序设计,作者:吴乃陵,出版社编号:3,出版日期:2003-8-1,定价:29.5) : INSERT INTObooktable (bookid, bookname, author, publisher, pubdate, price,type, quantity) VALUES(‘ISBN 7-04-012301-0’,’ C++程序设计’,’吴乃陵’,’高等教育出版社‘,’2003-8-1’,29.5,’计算机‘,100)

  11. 9.1 Web数据库应用基础 9.1.3 SQL语句 3. 更新语句(Update Statements) 更新表中的字段。 UPDATE 表名 SET 列名=表达式[,列名=表达式,…][WHERE条件表达式] 例如,在booktable表中把所有图书的在库册数减2,语句如下: UPDATEbooktable SET quantity = quantity-2

  12. 9.1 Web数据库应用基础 9.1.3 SQL语句 4. 删除语句(Delete Statement) 删除由FROM子句列出的、满足WHERE子句条件的一个或多个表中的记录。 DELETE FROM 表名 [WHERE条件表达式] 例如,在booktable表中删除刚才插入的书号为ISBN 7-04-012301-0的记录,语句如下: DELETE FROM booktable WHERE bookid= ISBN 7-04-012301-0 又如:下条SQL语句的功能将删除表中所有的记录,使用时要特别当心: DELETE FROM booktable

  13. 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等数据库。

  14. 9.2 JDBC接口技术 9.2.1 JDBC 概述 2. JDBC 的功能 (1) 与一个数据库建立连接(connection); (2) 向数据库发送SQL语句(statement); (3) 处理数据库返回的结果(resultset)。 3.JDBC访问数据库的四种方式 (1)JDBC-ODBC Bridge驱动程序 JDBC-ODBC桥利用ODBC驱动程序提供JDBC访问。利用微软 ODBC的开放性,只要本地机装有ODBC驱动,采用JDBC-ODBC桥驱动几乎可以访问所有的数据库。 (2)本地API驱动 本地API驱动直接把JDBC调用转变成数据库标准调用,然后再去访问数据库。这种方法也需要本地数据库驱动程序。 (3)网络协议驱动 使用一段纯Java代码,把JDBC调用转换成目标数据库网络协议调用。 (4)本地协议驱动 使用一段纯Java代码,把JDBC调用转换成数据库本地协议调用。

  15. 9.2 JDBC接口技术 9.2.2 JDBC-ODBC桥 先建立数据源,数据源对应一个数据库。为了连接到数据库,需要建立一个JDBC-ODBC桥接器,也就是加载JDBC-ODBC桥驱动程序。以网上书店的bookshop数据库为例 。 建立数据源(DSN:Data Source Name) 一个数据源就是对数据库的一个命名连接。数据源有三种:用户数据源、系统数据源和文件数据源。用户数据源只有用户可以看见,只能用于当前机器中。系统数据源允许所有用户登录特定服务器去访问数据库,任何具有权限的用户都可以访问系统数据源。文件数据源把信息存储在后缀为.dsn的文本文件中,如果把该文件放在网络共享目录中,则可被网络中任何一台工作站访问到。Web应用程序访问数据库时,通常是建立系统数据源。

  16. JDBC-ODBC Bridge 9.2 JDBC接口技术 9.2.3 JDBC建立数据库连接示例 用JDBC-ODBC Bridge驱动程序建立与数据库的连接。 【例9.1】(P232):使用JSP技术查询booktable表中书号是ISBN 7-04-012301-0的图书。本例使用前面生成的bookshoplk数据源,通过JDBC-ODBC桥访问数据库。

  17. 9.2 JDBC接口技术 9.2.3 JDBC建立数据库连接示例 <%@ 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(结果集)对象 ResultSet rs; //ResultSet类存放查询结果。当建立一个ResultSet类对象时,它指向第一行之前的位置。

  18. 9.2 JDBC接口技术 9.2.3 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的列的内容作为字符型返回

  19. 9.2 JDBC接口技术 9.2.3 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>

  20. 9.2 JDBC接口技术 9.2.4 JDBC建立数据库连接方法详解 1. JDBC建立数据库连接步骤 (1) 加入命令行:<%@ page import="java.sql.*" %> (2) 加载驱动程序: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); (3) 建立连接: 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对象

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

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

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

  24. 9.2 JDBC接口技术 9.2.4 JDBC建立数据库连接方法详解 (5)创建结果集对象(P236) 一旦连接到数据库,就可以查询数据表名、列名和有关的信息,并且可以运行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'");

  25. 9.2 JDBC接口技术 9.2.4 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对象。

  26. 9.2 JDBC接口技术 9.2.4 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。

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

  28. 9.2 JDBC接口技术 9.2.4 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>

  29. 9.2 JDBC接口技术 9.2.4 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>

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

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

  32. 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>

  33. 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>

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

  35. 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>

  36. 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>

  37. 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>

  38. 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>

  39. 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>

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

  41. 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>

  42. 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>

  43. 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+"%'"); %>

  44. 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>

  45. 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>

  46. 范围查询 9.3 查询记录 9.3.4 范围查询 【例9.6】(P244):输出数据表booktable中某段时间内出版的图书。用户在界面(ex9_06.html)中输入查询的开始日期和截至日期,提交给ex9-06.jsp处理,输出数据表booktable中该时间段出版的图书。 分析:其关键查询语句为 "Select * From booktable where pubdate between '"+s_pubdate+"' and '"+e_pubdate+"'"

  47. 9.3 查询记录 9.3.4 范围查询 代码ex9_06.html清单如下: <html><head><title>范围查询应用案例</title></head> <body><center> <font size = 4 color = blue> 根据出版日期查询图书</font></center><hr> <form method="post" action="ex9_06.jsp"><font color=green> 查询在 <input type=text name="starpubdate" size=10 maxlength=10> 和<input type=text name="endpubdate"size=10 maxlength=10>之间出版的图书 <input type=submit value=" 提 交 "> <input type=reset value=" 清 除 "> </form></font></body></html>

  48. 9.3 查询记录 9.3.4 范围查询 代码ex9_06.jsp清单如下: <%@ page contentType="text/html; charset=GB2312" %> <%@ page import="java.sql.*" %> <html><head><title>范围查询</title></head> <body><center> <% request.setCharacterEncoding("GB2312"); String s_pubdate=request.getParameter("starpubdate"); if(s_pubdate==null){ s_pubdate=""; } String e_pubdate=request.getParameter("endpubdate"); if(e_pubdate==null){ e_pubdate=""; } %>

  49. 9.3 查询记录 9.3.4 范围查询 <font size=4 color=blue>在<%=s_pubdate%>和<%=e_pubdate%>之间出版的图书 </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 where pubdate between '"+s_pubdate+"' and '"+e_pubdate+"'"); %>

  50. 9.3 查询记录 9.3.4 范围查询 <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>