对数据库进行查询操作
1.查询指定记录
以设计一个简单的登录界面为例
步骤:
(1)启动数据库,选择相应的表(此项操作可详见上篇博客,此处我选择的仍然是test数据库下的t_user表)
当前表中所有记录:
(2)打开eclipse,在当前项目中的WebContent目录下新建一个jsp文件(我这里命名为signin.jsp),在源文件目录下选择合适的包新建一个Servlet文件(我这里命名为SigninServlet.java),以用作连接数据库,处理登录界面发送的请求参数等。
(3)选择用户进行登录需要验证的字段,相应的在jsp文件中编辑源代码(此处我选择的是使用username登陆,并进行密码验证;为提高查询效率,可在该列添加索引)。
signin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登陆</title>
</head>
<body>
<form action="/blog/SigninServlet" method="post">
登录名称:<input name="username" type="text" /><br /><p></p>
密 码:<input name="password" type="password" /><br />
<p><input type="submit" /></p>
</form>
</body>
</html>
显示效果:
(4)编辑SigninServlet.java源代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//定义变量接收参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//为登陆时参数的输入设置条件
boolean error = false;
String errorMsg = " ";
if (StringUtils.isEmpty(username)) {
error = true;
errorMsg = "用户名不允许为空";
} else if (StringUtils.isEmpty(password)) {
error = true;
errorMsg = "密码不允许为空";
}
//如果上述条件不满足,则跳转到error.jsp(源代码可见上篇博客),并给出相应提示
if (error) {
request.setAttribute("errorMsg", errorMsg);
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
return;
}
Connection connection = null;
Statement statement = null;
try {
//连接数据库,创建Statment接口
connection = (Connection) DBUtil.getConnection();
statement = (Statement) connection.createStatement();
//准备sql语句
String sql = "select * from t_user where username = '"+username+"' and password = '"+password+"'";
System.out.println(sql);
// 执行sql语句
ResultSet resultSet = statement.executeQuery(sql);
resultSet.last();
//判断登陆是否成功,如果成功则转到success.jsp页面,如失败则跳转到error.jsp页面,给出提示
int rowCount = resultSet.getRow();
if (rowCount <= 0) {
request.setAttribute("errorMsg", "用户名或密码错误");
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
return;
}
request.setAttribute("msg", "登陆成功");
RequestDispatcher dispatcher = request.getRequestDispatcher("success.jsp");
dispatcher.forward(request, response);
return;
//捕获执行try操作中的异常
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//关闭数据库连接和Statement接口
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
request.setAttribute("errorMsg", "系统异常");
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
}
}
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>status</title>
</head>
<body>
<h1 style="color: red; text-align: center;">
${msg}<!-- EL表达式 -->
</h1>
<a href="/blog/showUsers">查看所有注册用户</a><!-- 设置了一个链接,用于直接跳转到查看所有用户信息页面 -->
</body>
</html>
如果登录成功则页面显示:
2.查询表中所有记录
鉴于很多步骤都与前面的相同,所以这里就不做详细说明,只简单补充
(1)定义usreList.jsp文件用于显示所有用户信息界面
需导入jstl-1.2.jar包和standard-1.1.2.jar包(网上下载后直接copy到lib目录下)
usreList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>所有用户信息</title>
</head>
<body>
<table>
<tr>
<th>id</th>
<th>邮箱</th>
<th>电话号码</th>
<th>用户名</th>
<th>显示昵称</th>
<th>密码</th>
<th>创建时间</th>
<th>更新时间</th>
</tr>
<!-- -jstl表达式 -->
<c:forEach items="${userList}" var="u" varStatus="status">
<tr >
<td>${u.id}
</td>
<td>${u.email}
</td>
<td>${u.phoneNumber}
</td>
<td>${u.username}
</td>
<td>${u.nickname}
</td>
<td>${u.password}
</td>
<td> <fmt:formatDate value="${u.createTime}" pattern="yyyy-MM-dd HH:mm:ss" />
</td>
<td><fmt:formatDate value="${u.updateTime}" pattern="yyyy-MM-dd HH:mm:ss" />
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
(2)定义ShowUsersServlet处理请求
ShowUsersServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Connection connection = null;
Statement statement = null;
try {
connection = (Connection) DBUtil.getConnection();
statement = (Statement) connection.createStatement();
// 准备sql语句
String sql = "SELECT * FROM t_user";//sql语句,不区分大小写
System.out.println(sql);
ResultSet resultSet = statement.executeQuery(sql);
List<User> userList = new ArrayList<User>();//封装不限长度的数组
//遍历结果
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getLong("id"));
user.setEmail(resultSet.getString("email"));
user.setPhoneNumber(resultSet.getString("phone_number"));
user.setUsername(resultSet.getString("username"));
user.setNickname(resultSet.getString("nickname"));
user.setPassword(resultSet.getString("password"));
user.setCreateTime(resultSet.getTimestamp("create_time"));
user.setUpdateTime(resultSet.getTimestamp("update_time"));
userList.add(user);
}
request.setAttribute("userList", userList);
RequestDispatcher dispatcher = request.getRequestDispatcher("userList.jsp");
dispatcher.forward(request, response);
return;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
request.setAttribute("errorMsg", "系统异常");
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
}
完成登录后点击链接显示:
拓展:
JDBC resultSet关于时间的显示
(1)resultSet.getDate(); 显示日期部分——> yyyy -mm-dd
(2)resultSet.getTime(); 显示时间部分——> hh:mm:ss
(3)resultSet.getTime(); 显示日期和时间——> yyyy -mm-dd hh:mm:ss