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: 实验