第十八部分_使用Servlet、JSP与JDBC实现数据库操纵

使用Servlet、JSP与JDBC实现数据库操纵——JDBC连接MySQL实例:

  • 将MySQL数据库驱动的包(我的驱动mysql-connector-java-5.1.34-bin.jar,需单独下载)放在WEB-INF->lib目录下
  • 修改Tomcat解压目录下的conf下的server.xml,配置当前应用上下文
  • 创建新数据库mydb(MySql中自带一个名为test的数据库,因此不能用test这个名字)
  • 创建数据库表users,字段为:id(primary key),username,password,truename,birthday,registerdate,sex,interest,remark

准备工作:cmd->net start,查看如果MySql没有启动网络服务的话,手动启动它。

命令行下:

  • mysql -uroot -proot
  • create database mydb;
  • use mydb;
  • show tables;

使用Navicat创建表

navicat使用攻略: 点击[连接],填写一个合适的连接名,然后切换到[高级]选项卡,在[使用高级连接]前打钩,选择一个非系统数据库,填写用户名和密码即可。

利用这个可视化的工具,可以方便的更改表结构和表数据 点击[查询]->[创建查询]可以执行SQL语句。

更改字体大小: 工具->选项中可更改字体属性。

步入主题:新建一个表,命名为users,字段为:id(primary key),username,password,truename,birthday,registerdate,sex,interest,remark,设置相应的类型,id为int,设为主键不能为空(not null),设置为自动增加,username、password、truename均为varchar(20),这里一定不要忘记指定长度,否则用JDBC往数据库中添加信息抛异常,直接在数据库中插入记录则报错不能完成,birthday、registerdate均为datetime,sex为tinyint,interest为varchar(20),remark为text或者mediumtext。

查看表讯息中的DDL如下:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hh` varchar(0) DEFAULT NULL,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `truename` varchar(20) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `registerdate` datetime DEFAULT NULL,
  `sex` tinyint(4) DEFAULT NULL,
  `interest` varchar(20) DEFAULT NULL,
  `remark` mediumtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

创建相关的类文件:

com.test.bean包下面新建类:Users.java

com.test.db包下新建类:UsersDB.java

web目录下新建页面:register.jsp

com.test.servlet包下面新建Servlet:ProcessUsersServlet

com.test.filter下新建过滤器:UserFilter.java(web.xml中配置)

web目录下创建页面:listAllUsers.jsp;listSingleUser.jsp

用户信息修改留给大家去完成

com.test.bean包下的Users.java:

package com.test.bean;

import java.sql.Date;

public class Users
{
	private int id;

	private String username;

	private String password;

	private String truename;

	private Date birthday;

	private Date registerdate;

	private String sex;

	private String interest;

	private String remark;

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public String getUsername()
	{
		return username;
	}

	public void setUsername(String username)
	{
		this.username = username;
	}

	public String getPassword()
	{
		return password;
	}

	public void setPassword(String password)
	{
		this.password = password;
	}

	public String getTruename()
	{
		return truename;
	}

	public void setTruename(String truename)
	{
		this.truename = truename;
	}

	public Date getBirthday()
	{
		return birthday;
	}

	public void setBirthday(Date birthday)
	{
		this.birthday = birthday;
	}

	public Date getRegisterdate()
	{
		return registerdate;
	}

	public void setRegisterdate(Date registerdate)
	{
		this.registerdate = registerdate;
	}

	public String getSex()
	{
		return sex;
	}

	public void setSex(String sex)
	{
		this.sex = sex;
	}

	public String getInterest()
	{
		return interest;
	}

	public void setInterest(String interest)
	{
		this.interest = interest;
	}

	public String getRemark()
	{
		return remark;
	}

	public void setRemark(String remark)
	{
		this.remark = remark;
	}

}

com.test.db包下的UserDB.java(关键,数据库操纵):

package com.test.db;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Properties;

import com.test.bean.Users;

/**
 * @author user
 *
 * TODO 该类完成与users表相关的数据库操作的所有方法
 */
public class UsersDB
{
	private String resource = "users.properties";

	private Properties props = null;

	// 得到数据库连接
	private Connection getConnection()
	{
		try
		{
			props = new Properties();

			InputStream in = getClass().getResourceAsStream(resource);

			props.load(in);

			String drivers = props.getProperty("jdbc.drivers");
			String url = props.getProperty("jdbc.url");
			String username = props.getProperty("jdbc.username");
			String password = props.getProperty("jdbc.password");

			Class.forName(drivers);//加载数据库驱动

			return DriverManager.getConnection(url, username, password);
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
			System.out.println("连接数据库异常发生 : " + ex.getMessage());
		}
		return null;

	}

	// 插入一笔记录
	public void save(Users bean)
	{
		try
		{
			Connection con = this.getConnection();

			String sql = "insert into users(username,password,truename,birthday,registerdate,sex,interest,remark) values(?,?,?,?,?,?,?,?)";

			PreparedStatement ps = con.prepareStatement(sql);

			ps.setString(1, bean.getUsername());
			ps.setString(2, bean.getPassword());
			ps.setString(3, bean.getTruename());
			ps.setDate(4, bean.getBirthday());
			ps.setDate(5, bean.getRegisterdate());
			ps.setString(6, bean.getSex());
			ps.setString(7, bean.getInterest());
			ps.setString(8, bean.getRemark());

			ps.executeUpdate(); //完成真正的数据库插入

			con.close();

		}
		catch (Exception ex)
		{
			System.out.println("增加记录异常发生:" + ex.getMessage() + "\n");

			// 调试用,我自己添加的
			ex.printStackTrace();

		}
	}

	// 更新一笔记录
	public void update(Users bean)
	{
		try
		{
			Connection con = this.getConnection();

			String sql = "update users set password=?,truename=?,birthday=?,sex=?,interest=?,remark=? where id=?";

			PreparedStatement ps = con.prepareStatement(sql);

			ps.setString(1, bean.getPassword());
			ps.setString(2, bean.getTruename());
			ps.setDate(3, bean.getBirthday());
			ps.setString(4, bean.getSex());
			ps.setString(5, bean.getInterest());
			ps.setString(6, bean.getRemark());
			ps.setInt(7, bean.getId());

			ps.executeUpdate();//真正完成数据的更新

			con.close();
		}
		catch (Exception ex)
		{
			System.out.println("修改记录异常发生:" + ex.getMessage());
		}
	}

	// 删除一笔记录
	public void remove(int id)
	{
		try
		{
			Connection con = this.getConnection();

			String sql = "delete from users where id=?";

			PreparedStatement ps = con.prepareStatement(sql);

			ps.setInt(1, id);

			ps.executeUpdate(); //完成真正的删除

			con.close();
		}
		catch (Exception ex)
		{
			System.out.println("删除记录异常发生:" + ex.getMessage());
		}
	}

	// 查询一笔记录
	public Users restore(int id)
	{
		Users bean = null;
		try
		{
			Connection con = this.getConnection();
			String sql = "select * from users where id=?";
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setInt(1, id);

			ResultSet rs = ps.executeQuery();

			if (rs.next())
			{
				bean = new Users();
				bean.setId(rs.getInt("id"));
				bean.setUsername(rs.getString("username"));
				bean.setPassword(rs.getString("password"));
				bean.setTruename(rs.getString("truename"));
				bean.setBirthday(rs.getDate("birthday"));
				bean.setRegisterdate(rs.getDate("registerdate"));
				bean.setSex(rs.getString("sex"));
				bean.setInterest(rs.getString("interest"));
				bean.setRemark(rs.getString("remark"));
			}

			con.close();
		}
		catch (Exception ex)
		{
			System.out.println("查询记录异常发生:" + ex.getMessage());
		}
		return bean;
	}

	// 查询所有记录
	public ArrayList getAllUsers()
	{
		ArrayList arrayList = new ArrayList();

		Users bean = null;

		try
		{
			Connection con = this.getConnection();
			String sql = "select * from users";
			PreparedStatement ps = con.prepareStatement(sql);

			ResultSet rs = ps.executeQuery();

			while (rs.next())
			{
				bean = new Users();

				bean.setId(rs.getInt("id"));
				bean.setUsername(rs.getString("username"));
				bean.setPassword(rs.getString("password"));
				bean.setTruename(rs.getString("truename"));
				bean.setBirthday(rs.getDate("birthday"));
				bean.setRegisterdate(rs.getDate("registerdate"));
				bean.setSex(rs.getString("sex"));
				bean.setInterest(rs.getString("interest"));
				bean.setRemark(rs.getString("remark"));

				arrayList.add(bean);
			}

			con.close();
		}
		catch (Exception ex)
		{
			System.out.println("查询所有记录异常发生:" + ex.getMessage());
		}
		return arrayList;
	}

}

web目录下的register.jsp:

<%@ page language="java" pageEncoding="GB2312" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>用户注册</title>
<script language="javascript">

function validate()
{
	with(document.form1)
	{
		if(username.value.length < 1)
		{
			alert("用户名不能为空");
			return false;
		}
		if(password.value.length < 1)
		{
			alert("密码不能为空");
			return false;
		}
		if(password_again.value.length < 1)
		{
			alert("重复密码不能为空");
			return false;
		}

		if(username.value.length < 4)
		{
			alert("用户名长度过短");
			return false;
		}
		if(username.value.length > 10)
		{
			alert("用户名长度过长");
			return false;
		}
		if(password.value.length < 4)
		{
			alert("密码长度过短");
			return false;
		}
		if(password.value.length> 10 )
		{
			alert("密码长度过长");
			return false;
		}

		if(password.value != password_again.value)
		{
			alert("密码输入不一致");
			return false;
		}
		if(truename.value.length < 1)
		{
			alert("真实姓名不能为空");
			return false;
		}
		if(birthday.value.length < 1)
		{
			alert("生日不能为空");
			return false;
		}

		if(!sex[0].checked && !sex[1].checked)
		{
			alert("性别必须选择");
			return false;
		}

		var n = 0;

		for( i = 0 ; i < 4 ; i++)
		{
			if(interest[i].checked)
			{
				n++;
			}
		}
		if(n < 1)
		{
			alert("兴趣至少需要选择一个");
			return false;
		}
		if(n > 3)
		{
			alert("兴趣最多选择三个");
			return false;
		}

		if(remark.value.length < 1)
		{
			alert("说明必须填写");
			return false;
		}
	}

	return true;
}

</script>

</head>
<body bgcolor="#FFFFFF">

<form action="/test/ProcessUsersServlet" method="post" name="form1" onSubmit="return validate();">

用户名:<input type="text" name="username" size="20"><br>
密  码:<input type="password" name="password" size="20"><br>
重复输入密码:<input type="password" name="password_again" size="20"><br>
真实姓名:<input type="text" name="truename" size="20"><br>
出生日期:<input type="text" name="birthday" size="20"><br>
性别:男<input type="radio" name="sex" value="0">  
女<input type="radio" name="sex" value="1"><br>
兴趣: 足球<input type="checkbox" name="interest" value="0">  
篮球<input type="checkbox" name="interest" value="1">  
排球<input type="checkbox" name="interest" value="2">  
羽毛球<input type="checkbox" name="interest" value="3">  <br>

说明:<textarea name="remark" rows="15" cols="20"></textarea><br>
<input type="submit" value="点击确认">   <input type="reset" value="重  置">
<input type="hidden" name="type" value="save">
</form>

</body>
</html>

com.test.servlet包下的ProcessUsersServlet:

package com.test.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

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

import com.test.bean.Users;
import com.test.db.UsersDB;

public class ProcessUsersServlet extends HttpServlet
{

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException
	{
		// TODO Method stub generated by Lomboz
		process(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException
	{
		// TODO Method stub generated by Lomboz
		process(request, response);
	}

	protected void process(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException
	{
		String type = request.getParameter("type");
		if ("save".equals(type))
		{
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			String truename = request.getParameter("truename");

			String birthday = request.getParameter("birthday");

			String sex = request.getParameter("sex");
			String[] interest = request.getParameterValues("interest");
			String remark = request.getParameter("remark");

			java.sql.Date birthdayToDate = null;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try
			{
				java.util.Date date = sdf.parse(birthday);
				birthdayToDate = new java.sql.Date(date.getTime());
			}
			catch (ParseException e)
			{

				e.printStackTrace();
			}

			String interestToString = null;
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < interest.length; i++)
			{
				sb.append(interest[i]);
			}
			interestToString = sb.toString();

			Users bean = new Users();
			bean.setUsername(username);
			bean.setPassword(password);
			bean.setTruename(truename);
			bean.setInterest(interestToString);
			bean.setSex(sex);
			bean.setBirthday(birthdayToDate);

			bean.setRegisterdate(new java.sql.Date(new java.util.Date()
					.getTime()));
			bean.setRemark(remark);

			UsersDB userDB = new UsersDB();
			userDB.save(bean);

			ArrayList arrayList = userDB.getAllUsers();
			request.setAttribute("all", arrayList);
			request.getRequestDispatcher("/listAllUsers.jsp").forward(
					request, response);

		}

		if ("remove".equals(type))
		{
			String id = request.getParameter("id");
			UsersDB userDB = new UsersDB();
			userDB.remove(Integer.parseInt(id));
			ArrayList arrayList = userDB.getAllUsers();
			request.setAttribute("all", arrayList);
			request.getRequestDispatcher("/listAllUsers.jsp").forward(
					request, response);

		}
	}

}

com.test.filter下的过滤器:UserFilter.java

package com.test.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
 * @author user
 *
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class UsersFilter implements Filter
{

	public void init(FilterConfig config) throws ServletException
	{
		// TODO Method stub generated by Lomboz
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException
	{
		// TODO Method stub generated by Lomboz
		((HttpServletRequest) request).setCharacterEncoding("gb2312");
		chain.doFilter(request, response);
	}

	public void destroy()
	{
		// TODO Method stub generated by Lomboz
	}

	public FilterConfig getFilterConfig()
	{
		// TODO Method stub generated by Lomboz
		return null;
	}

	public void setFilterConfig(FilterConfig config)
	{
		// TODO Method stub generated by Lomboz
	}
}

web.xml中配置过滤器:

<filter>
 	<filter-name>usersFilter</filter-name>
 	<filter-class>com.test.filter.UsersFilter</filter-class>
 </filter>

 <filter-mapping>
 	<filter-name>usersFilter</filter-name>
 	<url-pattern>/ProcessUsersServlet</url-pattern>
 </filter-mapping>

listAllUsers.jsp:

<%@ page language="java" pageEncoding="GB2312" %>
<%@ page import="java.util.*,com.test.bean.*"%>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<%ArrayList arrayList = (ArrayList)request.getAttribute("all");
Users bean = null;
%>

<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<table width="50%" align="center" border="1">
<tr>
<td>用户名</td>
<td>删除</td>
</tr>
<%for(int i = 0;i < arrayList.size(); i++)
{ bean = (Users)arrayList.get(i);
%>
<tr>
<td><a href="listSingleUser.jsp?id=<%= bean.getId()%>"><%= bean.getUsername()%></a></td>
<td><a href="/test/ProcessUsersServlet?type=remove&id=<%= bean.getId()%>" onClick="javascript:return confirm(‘您确实要删除该记录么?‘)">删除</a></td>
</tr>
<%}%>
</table>
</body>
</html>

listSingleUser.jsp:

<%@ page language="java" pageEncoding="GB2312" %>
<%@ page import="java.util.*,com.test.bean.*,com.test.db.*"%>
<%String id = request.getParameter("id");
UsersDB usersDB = new UsersDB();
Users bean = usersDB.restore(Integer.parseInt(id));
%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<table width="100%" align="center" align="center">
<tr bgcolor="gray">
<td>用户名</td>
<td>密码</td>
<td>真实姓名</td>
<td>生日</td>
<td>注册时间</td>
<td>性别</td>
<td>爱好</td>
<td>说明</td>
</tr>
<tr>
<td><%= bean.getUsername()%></td>
<td><%= bean.getPassword()%></td>
<td><%= bean.getTruename()%></td>
<td><%= bean.getBirthday()%></td>
<td><%= bean.getRegisterdate()%></td>
<td><%= "0".equals(bean.getSex()) ? "男" : "女"%></td>
<td>
<%String interest = bean.getInterest();%>
<%= interest.indexOf("0") != -1 ? "足球" : ""%> 
<%= interest.indexOf("1") != -1 ? "篮球" : ""%> 
<%= interest.indexOf("2") != -1 ? "排球" : ""%> 
<%= interest.indexOf("3") != -1 ? "羽毛球" : ""%> 

</td>
<td><%= bean.getRemark()%></td>
</tr>
</table>

</body>
</html>

启动Tomcat服务器,浏览器中键入:http://localhost:8080/test/register.jsp,出现页面:

下面是分别注册两次后的页面,默认列出所有用户:

点击lisi,出现页面:

时间: 2024-09-30 06:37:37

第十八部分_使用Servlet、JSP与JDBC实现数据库操纵的相关文章

程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事

文/.温国兵 惰性人皆有之,也算是人的一大天性.几日之前便构思好此文,怎奈每日杂事繁多,今日才提起笔,作下此文.本文谈谈我与数据库的故事. 说起和数据库结缘,还得从大一说起.大一刚开始接触C语言,每日就沉浸在无止境的代码中.在网上查资料的过程中,看到别人用C语言写了一个小型的图书操作程序,数据库采用的是SQL Server,运行出来的效果图很炫,惊叹原来还可以这样管理数据.熟知C语言的同学肯定对文件操作不陌生,当时我们写程序如果有静态数据,都是放在文件里的.直到后来做的C语言课程设计,我也是一大

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet 一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</s

S3C2416裸机开发系列十八_音频驱动实现(1)

S3C2416裸机开发系列十八 音频驱动实现(1) 象棋小子    1048272975 在消费电子产品中,往往都会用到音频系统来播放音乐.进行通话等多媒体应用,此外,对于一些需语音提示的产品,音频部分都是不可或缺的功能.笔者此处就s3c2416的音频驱动实现作一个简单的介绍. 1. IIS音频总线 s3c2416支持IIS.PCM.AC97这三种音频接口,此处只分析IIS音频接口.IIS接口(Inter-IC Sound)在20世纪80年代首先被飞利浦公司用于消费音频,为数字音频设备之间的音频

javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

第八部分_客户化JSP标签

 EL语言(减少JSP页面中的Java代码) <body> <%String username = request.getParameter("username"); String password = request.getParameter("password"); %> username: <% out.print(username); %><br> password: <% out.print(passw

Java Web总结十八文件的上传和下载

一.实现Web开发中的文件上传功能,需完成如下两步操作: 1.在web页面中添加上传输入项. 2.在Servlet中读取上传文件的数据,并保存到本地硬盘中. 二.如何在web页面中添加上传输入项? 1.<input type="file">标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意: 1)必须设置input输入项的name属性,否则浏览器将不会发送上传文件的数据. 2)必须把form的enctype属性值设为multipart/form-data.

会员卡管理系统技术解析(十八)Timer定时监听

会员卡管理系统技术解析(十八)Timer定时监听 在web应用中,有时候客户需要一些定时程序,不需要客户自己去操作,而是由应用程序自行触发(代理)执行某些操作.这个时候监听与定时器的配合使用就基本可以实现这个需求了.网上很多代码并不完整,水平未到,看得太吃力了.下面以系统每天00:00:00进行的当日最大单据数维护进行实例解析. 首先,建立相关的包河类,如下图: 图1 然后,在"web.xml"中对定时器和监听类注册,代码如下: <servlet> <servlet-

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试

Struts2.SpringMVC.Servlet(Jsp)性能对比 测试 . Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它. 做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策. 在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识. 人人都要了解. ----------------------------------------------------------------------------------

PHP从零单排(十八)图片处理

1.打开已经存在的图片 <?php header("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jpg"); imagejpeg($img); imagedestroy($img); ?> 函数imagecreatefromjpeg()的参数即文件所在路径,返回值是参数所指图片的资源标识符.该函数时通过已有图像新建一个图像,并不是单纯打开原图像本身.如果将图片的后缀名.jpg强制改为.p