zoukankan      html  css  js  c++  java
  • 第十八部分_使用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() + "
    ");
    			
    			// 调试用,我自己添加的
    			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(作用:解决乱码。最好的解决乱码的方式就是:在所有的JSP页面中设置编码格式为UTF-8,然后后台数据库同样设置为相同的编码格式)

    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,出现页面:

  • 相关阅读:
    【C++clock()函数学习(计算自己代码运行时间)】
    YCOJ 1041113【最近的回文数】
    计蒜客【汉诺塔II】
    YCOJ【汉诺塔】
    【常用算法总结——递归】
    YCOJ【查找】
    【常用算法总结——分治】
    Redis哨兵机制
    Redis主从复制
    SpringBoot集成Redis
  • 原文地址:https://www.cnblogs.com/Code-Rush/p/4677192.html
Copyright © 2011-2022 走看看