[JSP] 创建mysql数据库&利用JSP进行数据库查询(2)

接着上次创建好的数据库, 现在利用 jsp技术对数据的数据进行查询, 并显示在页面上.

1. 先创一个查询页面, 表单代码如下:

View Code
<form action="inquire" method="post">
选择查询类型:
<select name="type">
<option value="id">编号</option>
<option value="age">年龄</option>
<option value="name">姓名</option>
<option value="provice">籍贯</option>
</select>
<input type="text" name="keyword"/>
<input type="submit" value="查询"/>
</form>

2. 创建一个JavaBean有来存储数据, 代码如下:

View Code
package com.shy.query;

publicclass ValueObject
{
privateint id;
privateint age;
private String name;
private String provice;
publicint getId()
{
return id;
}
publicvoid setId(int id)
{
this.id = id;
}
publicint getAge()
{
return age;
}
publicvoid setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
publicvoid setName(String name)
{
this.name = name;
}
public String getProvice()
{
return provice;
}
publicvoid setProvice(String provice)
{
this.provice = provice;
}

}

 

3. 创建一个Servlet有来处理  提交的表单数据/数据库链接/数据查询/页面转向 等后台业务逻辑, 代码如下:

View Code
package com.shy.query;

import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

publicclass inquire extends HttpServlet
{
protectedvoid doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
{
//设置输入到Servlet的字符编码格式为utf-8, 这只能post方法有效
req.setCharacterEncoding("utf-8");
//设置输出的字符编码格式为utf-8
resp.setContentType("text/html;charset=utf-8");
/*
* 得到前一网页提交的表单数据
*/
String sqlType
= (String)req.getParameter("type");
String sqlKeyword
= (String)req.getParameter("keyword");


/*
* database为数据库链接的字符串,做为数据库链接的一个参数
*/
String database
="jdbc:mysql://localhost/people?user=root&password=root";
/*
* 定义一个字符串变量,用来存储数据库查询的命令语句
*/
String sqlCmd
="select * from peoples where "+ sqlType +"="+"\""+ sqlKeyword +"\"";
Connection conn
=null;
Statement stmt
=null;
ResultSet rs
=null;
ArrayList list
=new ArrayList();

try
{
/*
* 导入mysql的jdbc驱动
* 但是首先要确认此WEB项目已经导放此jar包
*/
Class.forName(
"com.mysql.jdbc.Driver").newInstance();
/*
* 进行数据库的链接
*/
conn
= DriverManager.getConnection(database);
/*
* 创建一个Statement对象,用来执行数据库查询的语句
*/
stmt
= conn.createStatement();
/*
* 执行一条查询语句, 并将结果返回给ResultSet
*/
rs
= stmt.executeQuery(sqlCmd);

/*
* 判断到没有执行查询
*/
if(stmt.execute(sqlCmd))
{
/*
* 如果执行了查询, 将结果返回给rs
*/
rs
= stmt.getResultSet();
/*
* while循环用来判断rs中是否还有数据
*/
while(rs.next())
{
/*
* 用一个javabean来接收并存储结果
*/
ValueObject vo
=new ValueObject();
/*
* 将rs中的数据以相应的格式提取出来
* 并将其结果存储在 javabean的新对象中
*/
vo.setId(rs.getInt(
1));
vo.setAge(rs.getInt(
2));
vo.setName(rs.getString(
3));
vo.setProvice(rs.getString(
4));
/*
* 将存储有结果的javabean放到list中
*/
list.add(vo);
}
}
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if(rs !=null)
{
try
{
rs.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
if(stmt !=null)
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}

/*
* 将list设置后准备传递给下一页面
*/
req.setAttribute(
"info",list);
/*
* 定义一个页面转向的对象
*/
RequestDispatcher rd
=null;
/*
* 判断list是否为空
*/
if(list.isEmpty())
{
/*
* 如果list为空, 就转向错误页面
*/
rd
= req.getRequestDispatcher("error.jsp");
}
else
{
/*
* 如果list不为空, 就转向显示结果的页面
*/
rd
= req.getRequestDispatcher("result.jsp");
}
/*
* 实现转向
*/
rd.forward(req,resp);

}
}

 4. 创建一个 result.jsp, 用来显示用户查询到的数据, 代码如下:

View Code
<%@ page language="java" import="java.util.*,com.shy.query.ValueObject" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Result</title>
</head>

<body>
<h1>查询结果如下:</h1>
<%
ArrayList list
= (ArrayList)request.getAttribute("info");
Iterator it
= list.iterator();

out.println(
"<table border=1>");
out.println(
"<tr>");
out.println(
"<th>编号</th>");
out.println(
"<th>年龄</th>");
out.println(
"<th>姓名</th>");
out.println(
"<th>籍贯</th>");
out.println(
"</tr>");
while(it.hasNext())
{
ValueObject vo
= (ValueObject)it.next();
out.println(
"<tr>");
out.println(
"<td>"+ vo.getId() +"</td>");
out.println(
"<td>"+ vo.getAge() +"</td>");
out.println(
"<td>"+ vo.getName() +"</td>");
out.println(
"<td>"+ vo.getProvice() +"</td>");
out.println(
"</tr>");
}
out.println(
"</talbe>");
%>
<br />

<a href="index.jsp">返回继续查询</a>
</body>
</html>

5. 再创建一个 error.jsp, 有来显示错误提示并让用户返回继续查询;

posted @ 2011-08-09 00:32  ShanHaiyang  阅读(3225)  评论(0编辑  收藏  举报