JSP
网页应用程序开发
网页应用程序开发
实验目的:掌握在JSP页面中查询数据库的方法
本次实验使用Access数据库Book.mdb,表名为bookForm,包含字段如下:
字段名称 | 数据类型和长度 | 说明 |
bookISBN | 文本(50) | 书号,该字段为主键 |
bookName | 文本(50) | 书名 |
bookAuthor | 文本(50) | 作者 |
bookPrice | 数字 | 价格,单精度浮点数 |
bookPublish | 文本(50) | 出版社 |
bookTime | 日期/时间 | 出版时间 |
bookAbstract | 文本(255) | 摘要 |
1 查询记录
本例使用自定义标记以JDBC-ODBC桥接方式连接数据库查询图书,用户可以输入查询条件和文本,例如书名包含“JSP”的所有图书。
首先创建图书查询页面inputMess.jsp,首先在页顶添加指令引入自定义标记:
<%@ taglib tagdir="/WEB-INF/tags" prefix="findBook" %>
在页面中添加表单,在表单中添加文本域findContent、列表框condition(包含书名/作者/出版社/出版时间/内容提要等5个选项)和提交接钮:
继续在页面中添加代码段获取表单提交的查询文本和查询条件,添加自定义标记执行查询操作,添加表达式显示结果:
<% String findContent = request.getParameter("findContent"); String condition = request.getParameter("condition"); if (findContent == null) { findContent = ""; } if (condition == null) { condition = ""; } byte b[]=findContent.getBytes("iso-8859-1"); findContent=new String(b, "utf-8"); %> <findBook:FindBook dataSource="Driver={Microsoft Access Driver (*.mdb)};DBQ=d:/Book.mdb" tableName="bookForm" findContent="<%= findContent %>" condition="<%= condition %>" /> <%= giveResult %>
接下来在在/WEB-INF/tags下创建标记文件FindBook.tag,内容如下:
<%@ tag import="java.sql.*" %> <%@ tag pageEncoding="utf-8" %> <%@ attribute name="dataSource" required="true" %> <%@ attribute name="tableName" required="true" %> <%@ attribute name="findContent" required="true" %> <%@ attribute name="condition" required="true" %> <%@ variable name-given="giveResult" variable-class="java.lang.StringBuffer" scope="AT_END" %> <% try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e){ out.print(e); } Connection con; Statement sql; ResultSet rs; StringBuffer queryResult = new StringBuffer(); String uri = "jdbc:odbc:" + dataSource; try { con = DriverManager.getConnection(uri,"",""); sql = con.createStatement(); String s = "SELECT * FROM " + tableName + " WHERE " + condition + " Like'%" + findContent + "%'"; rs=sql.executeQuery(s); queryResult.append("查询到的图书:"); queryResult.append("<table border=1>"); queryResult.append("<tr>"); queryResult.append("<th>ISBN</td>"); queryResult.append("<th>图书名称</td>"); queryResult.append("<th>作者</td>"); queryResult.append("<th>价格</td>"); queryResult.append("<th>出版社</td>"); queryResult.append("<th>出版时间</td>"); queryResult.append("<th>摘要</td>"); queryResult.append("</tr>"); int fields = 7; while (rs.next()) { queryResult.append("<tr>"); String bookISBN = ""; for (int k=1; k<=fields; k++) { if (k == 7) { String bookAbstract = rs.getString(k); String abs = "<textarea rows=6 colums=10/>" + bookAbstract + "</textarea>"; queryResult.append("<td>" + abs + "</td>"); } else { queryResult.append("<td>"+rs.getString(k)+"</td>"); } } } queryResult.append("</table>"); jspContext.setAttribute("giveResult",queryResult); con.close(); } catch(SQLException exp){ jspContext.setAttribute("giveResult",new StringBuffer("请设置查询条件。")); } %>
完成后在浏览器中运行inputMess.jsp,输入查询文本并选择查询条件,点击提交按钮执行查询:
2 查询记录(DW自动生成代码)
本例使用Dreamweaver的数据库面板自动生成代码来实现图书查询功能。
首先创建图书查询页面findBook.jsp,在页面中添加与上例相同的查询表单,提交查询内容参数findContent和查询字段参数condition。
接下来创建数据库连接:在数据库面板中点击“+”按钮,选择“自定义JDBC连接”;在“自定义JDBC连接”对话框中设置连接信息,连接名称为connBook,驱动程序为com.hxtt.sql.access.AccessDriver,URL为jdbc:access:/d:/Book.mdb,点击“测试”按钮测试连接,点击“确定”按钮完成连接的创建。
接下来是绑定记录集:切换到“绑定”面板,点击“+”按钮,选择“记录集(查询)”;在“记录集”对话框中设置记录集信息:名称为rsBook,连接为connBook,表格为bookForm,先设置筛选为bookName包含URL/表单变量findContent。点击“测试”按钮测试,点击“确定”按钮完成记录集的创建。
注意:在记录集对话框中只能设置筛选书名字段的内容,而不能根据用户提交的参数改变要筛选的字段。想实现更复杂的查询记录集,还需要对自动生成的代码进行一些修改。
在页顶添加以下代码段,获取用户提交的查询条件参数condition,默认值设为书名字段bookName:
<% request.setCharacterEncoding("utf-8"); String condition = "bookName"; if (request.getParameter("condition") != null) { condition = request.getParameter("condition"); } %>
然后在代码中找到rsBook记录集对应的查询语句,即下面这一行:
PreparedStatement StatementrsBook = ConnrsBook.prepareStatement("SELECT * FROM bookForm WHERE bookName LIKE ?");
修改查询语句将固定的书名字段改为变量:
PreparedStatement StatementrsBook = ConnrsBook.prepareStatement("SELECT * FROM bookForm WHERE " + condition + " LIKE ?");
接下来是添加显示记录集第一条记录的各个字段的动态文本,在页面中添加一个2行7列的表格,先输入表头文本,然后将绑定面板中rsBook记录集的各个拖到表格第2行的各个单元格即可:
然后还要通过循环显示记录集的所有记录:先在页面中选定动态文本所在的行,切换到“服务器行为”面板,点击“+”按钮,选择“重复区域”,在重复区域对话框中选择显示rsBook记录集的所有记录即可。
注意如果查询所得的rsBook记录集中没有任何记录,运行显示记录的服务器行为就会导致错误,因此还需要选中整个表格并添加一个有条件显示区域的服务器行为,如果记录集不为空则显示区域:
可以看到DW能够自动生成各种通用功能的代码,为Web应用程序的开发提供极大的便利,但要满足更特殊的需求、实现更灵活的功能,阅读和修改代码仍然是开发者必须掌握的能力。
博主 in 教程 09:22上午 10月 26, 2012
Tags: 实验