Mvc模式设计:

视图:添加界面(addUser.jsp),修改界面(updateUser.jsp),显示页面(allUser.jsp)

控制器:添加信息控制器(AddUserServlet),修改信息控制器(UpdateUserServlet),删除信息控制器(DeleteUserServlet),显示信息控制器(FindAllUserServlet)

模型:userbean

数据库层:DBBean

总体设计:

  添加信息模块:用户通过添加信息界面(addUser.jsp)提交表单,提交的信息有添加信息控制器(AddUserServlet)控制,控制器通过调用userBean的add方法添加信息,在request对象中添加成功与否的消息,成功则返回成功,跳转到显示界面,失败则返回失败消息,跳转到添加信息页面。

  修改信息模块:用户是通过点击显示页面相应项的修改按钮进入到修改页面中,从显示页面跳转过来时,request对象中封装的信息会显示在当前页面中的特定位置(通过表达式语言),提交表单之后交给修改信息控制器,通过调用更新方法更新,在request对象中封装成功与否消息,成功则返回成功,跳转到显示界面,失败则返回失败消息,跳转到添加信息页面。

  显示信息模块:显示当前页的所有用户信息,每一条信息都有修改和删除选项,修改则进入修改页面,删除则交给删除控制器,控制器通过调用删除方法。

详细设计:

数据库层:DBBean

实现功能:获得与数据库的连接,执行查询操作返回结果集,执行更新操作,关闭连接。

 public class DBBean {
private Connection con;
private Statement stmt;
private ResultSet rs;
public DBBean() { }
//获取数据库的连接
public Connection getConnection() throws Exception
{
String url="jdbc:mysql://localhost:3306/bookstore";
String dbuser="root";
String dbpass="";
if(con==null)
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection(url, dbuser, dbpass);
}
return con;
} //执行查询语句,返回结果集
public ResultSet executeQuery(String sql) throws Exception
{
if(con==null)
{
throw new Exception("没有连接对象可用");
}
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
return rs;
} public int executeUpdate(String sql)throws Exception
{
if(con==null)
{
throw new Exception("没有连接对象可用");
}
stmt=con.createStatement(); return stmt.executeUpdate(sql);
} public void close()
{
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

模型层设计:UserBean

1.add();添加用户信息

 public void add() throws Exception {
Connection con = null;
DBBean db = new DBBean();
String sql = "insert into usertable values('"+userid+"','"+username+"','"+userpass+"','"+type+"','"+new java.sql.Date(birthday.getTime())+"','"+degree+"','"+local+"','"+email+"','"+address+"','"+comment+"')"; try {
con = db.getConnection();
db.executeUpdate(sql);
} catch (Exception e) {
System.out.println(e.toString()); } finally {
db.close();
}
}

2.UserBean findUserById(String userid);根据主键查询用户

 public UserBean findUserById(String userid) throws Exception {
Connection con = null;
ResultSet rs=null;
DBBean db = new DBBean();
String sql = "select * from usertable where userid='"+userid+"'"; try {
con = db.getConnection();
rs=db.executeQuery(sql); if(rs.next())
{
String tmpUserid=rs.getString(1);
String tmpUsername=rs.getString(2);
String tmpUserpass=rs.getString(3);
String tmpType=rs.getString(4);
java.util.Date tmpBirthday=rs.getDate(5);
String tmpDegree=rs.getString(6);
String tmpLocal =rs.getString(7);
String tmpEmail=rs.getString(8);
String tmpAddress=rs.getString(9);
String tmpComment=rs.getString(10);
UserBean user=new UserBean();
user.setAddress(tmpAddress);
user.setBirthday(tmpBirthday);
user.setComment(tmpComment);
user.setDegree(tmpDegree);
user.setEmail(tmpEmail);
user.setLocal(tmpLocal);
user.setType(tmpType);
user.setUserid(tmpUserid);
user.setUsername(tmpUsername);
user.setUserpass(tmpUserpass);
return user;
}
} catch (Exception e) {
System.out.println(e.toString());
} finally {
db.close();
}
return null;
}

3.int update();更新用户信息

 public int update(String userid) throws Exception {
Connection con=null;
DBBean db = new DBBean();
String sql="update usertable set username='"+username+"',userpass='"+userpass+"',birthday='"+new java.sql.Date(birthday.getTime())+"',degree='"+degree+
"',local='"+local+"',email='"+email+"',address='"+address+"',comment='"+comment+"' where userid='"+userid+"'";
try
{
con=db.getConnection();
return db.executeUpdate(sql);
}catch(Exception e)
{
System.out.println(e.toString());
}
finally{db.close();}
return 0;
}

4.Int delete(String userid);//根据传入的用户id删除用户信息

 public int delete(String userid) throws Exception {
Connection con=null;
DBBean db = new DBBean();
String sql="delete from usertable where userid='"+userid+"'";
try
{
con=db.getConnection();
return db.executeUpdate(sql);
}catch(Exception e)
{
System.out.println(e.toString());
}
finally{db.close();}
return 0;
}

5.boolean hasExist(String userid);//查询用户是否存在

 public boolean hasExist(String userid) throws Exception {
boolean find=false;
Connection con = null;
ResultSet rs=null;
DBBean db = new DBBean();
String sql = "select * from usertable where userid='"+userid+"'";
try
{
con=db.getConnection();
rs= db.executeQuery(sql);
if(rs.next())
{
find=true;
}
else
{
find =false;
}
}catch(Exception e)
{
System.out.println(e.toString());
}
finally{db.close();}
return find; }

6.Integer getPageCount() 查询数据库中总数对应在页面显示的总页数(10/页)

 public Integer getPageCount() throws Exception {
int pageCount=1;
Connection con = null;
ResultSet rs=null;
DBBean db = new DBBean();
String sql="select count(*) from usertable";
try
{
con=db.getConnection();
rs= db.executeQuery(sql);
if(rs.next())
{
int n=rs.getInt(1);
pageCount=(n-1)/10+1;
} }catch(Exception e)
{
System.out.println(e.toString());
}
finally{db.close();}
return new Integer(pageCount);
}

7.ArrayList findAllUser(String pageNo)返回当前页面的所有数据

//计算当前页的开始和结束行数,从数据库中查询所有数据,循环遍历结果集,把在当前页的内容放在ArrayList中

 public ArrayList findAllUser(String pageNo) throws Exception {
ArrayList<UserBean> userlist=new ArrayList<UserBean>();
Connection con = null;
ResultSet rs=null;
DBBean db = new DBBean();
String sql="select * from usertable";
try
{
con=db.getConnection();
rs= db.executeQuery(sql);
int iPageNo=1;
try{
iPageNo=Integer.parseInt(pageNo);
}
catch(Exception e){}
int begin=(iPageNo-1)*10+1;//当前页面开始的记录
int end=iPageNo*10;//当前页面结束的记录
int index=1;
UserBean user=null;
while(rs.next())
{
if(begin>index)//遇到在当前页面之前的记录直接跳过
continue;
if(end<index)//遇到在当前页面之后的记录退出循环
break;
String tmpUserid=rs.getString(1);
String tmpUsername=rs.getString(2);
String tmpUserpass=rs.getString(3);
String tmpType=rs.getString(4);
java.util.Date tmpBirthday=rs.getDate(5);
String tmpDegree=rs.getString(6);
String tmpLocal =rs.getString(7);
String tmpEmail=rs.getString(8);
String tmpAddress=rs.getString(9);
String tmpComment=rs.getString(10);
user=new UserBean();
user.setAddress(tmpAddress);
user.setBirthday(tmpBirthday);
user.setComment(tmpComment);
user.setDegree(tmpDegree);
user.setEmail(tmpEmail);
user.setLocal(tmpLocal);
user.setType(tmpType);
user.setUserid(tmpUserid);
user.setUsername(tmpUsername);
user.setUserpass(tmpUserpass);
userlist.add(user);//查找到的记录封装好放在userlist中
index++;
} }catch(Exception e)
{}
finally{db.close();}
return userlist;
}

控制器设计

1.添加用户控制器:从request对象中取出内容封装在UserBean对象中,判断用户id是否存在,调用add方法添加信息,跳转到显示页面

 public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String tmpUserid=request.getParameter("userid");
String tmpUsername=request.getParameter("username");
String tmpUserpass=request.getParameter("userpass");
String birthday=request.getParameter("birthday");
DateFormat df=new SimpleDateFormat("yyyy-mm-dd");
java.util.Date tmpBirthday=null;
try
{tmpBirthday=df.parse(birthday); }catch(Exception e)
{} String tmpDegree=request.getParameter("degree");
tmpDegree=new String(tmpDegree.getBytes("8859_1"));
String tmpLocal =request.getParameter("local");
tmpLocal=new String(tmpLocal.getBytes("8859_1"));
String tmpEmail=request.getParameter("email");
String tmpAddress=request.getParameter("address");
String tmpComment=request.getParameter("comment");
UserBean user=new UserBean();
user.setAddress(tmpAddress);
user.setBirthday(tmpBirthday);
user.setComment(tmpComment);
user.setDegree(tmpDegree);
user.setEmail(tmpEmail);
user.setLocal(tmpLocal); user.setUserid(tmpUserid);
user.setUsername(tmpUsername);
user.setUserpass(tmpUserpass);
String forward=null;
String info=null;
try {
if(user.hasExist(tmpUserid))
{
info="用户已存在";
forward="addUser.jsp";
}
else
{
try{
user.add();
forward="FindAllUser";
info="添加成功";
}catch(Exception e)
{
info="数据库异常";
forward="FindAllUser";
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} request.setAttribute("info", info);
RequestDispatcher rd=request.getRequestDispatcher(forward);//更新成功返回用户列表界面
rd.forward(request, response);
}

2.更新用户信息控制器:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String tmpUserid=request.getParameter("userid");
String tmpUsername=request.getParameter("username");
String tmpUserpass=request.getParameter("userpass");
String birthday=request.getParameter("birthday");
DateFormat df=new SimpleDateFormat("yyyy-mm-dd");
java.util.Date tmpBirthday=null;
try
{tmpBirthday=df.parse(birthday); }catch(Exception e)
{} String tmpDegree=request.getParameter("degree");
String tmpLocal =request.getParameter("local");
String tmpEmail=request.getParameter("email");
String tmpAddress=request.getParameter("address");
String tmpComment=request.getParameter("comment");
UserBean user=new UserBean();
user.setAddress(tmpAddress);
user.setBirthday(tmpBirthday);
user.setComment(tmpComment);
user.setDegree(tmpDegree);
user.setEmail(tmpEmail);
user.setLocal(tmpLocal); user.setUserid(tmpUserid);
user.setUsername(tmpUsername);
user.setUserpass(tmpUserpass);
String info;
try{
if(user.update(tmpUserid)>0)
{
info="信息更新成功";
}
else
{
info="信息更新失败";
} }catch(Exception e)
{
info="数据库异常";
}
request.setAttribute("info", info);
RequestDispatcher rd=request.getRequestDispatcher("FindAllUser");//更新成功返回用户列表界面
rd.forward(request, response);
}

3.显示信息控制器:

//先获取当前页码,根据当前页码调用UserBean中的方法返回userlist放在request对象中,跳转到显示页面。

 public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int pageNo=1;
String strPageNo=request.getParameter("pageNo");
if(strPageNo!=null)
{
pageNo=Integer.parseInt(strPageNo);
}
UserBean user=new UserBean();
try{
ArrayList<UserBean> userlist=user.findAllUser(String.valueOf(pageNo));
request.setAttribute("userlist", userlist);
Integer pageCount=user.getPageCount();
request.setAttribute("pageCount", pageCount);
request.setAttribute("pageNo", pageNo);
}catch(Exception e)
{ }
RequestDispatcher rd=request.getRequestDispatcher("userlist.jsp");
rd.forward(request, response);
}

4.删除用户信息控制器:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userid=request.getParameter("userid");
UserBean user=new UserBean();
String info=null;
try
{
if(user.delete(userid)>0)
{
info="删除成功";
}
else
{
info="删除失败 ";
}
}catch(Exception e)
{
info="数据异常";
}
request.setAttribute("info", info);
RequestDispatcher rd=request.getRequestDispatcher("FindAllUser");
rd.forward(request, response); }

视图设计

只简单介绍显示页面的设计:

1.javascript部分:

<script language="javascript">
function init() {
alert("${info}");  获取request对象中的info消息显示
} </script>
<c:if test="${!empty info}">
<script language="javascript">
window.onload=init;
</script>
</c:if>

2.

<!--分页显示-->
<table align="center">
<tr>
<td>共有${pageCount}页,这是第${pageNo}页</td><!--用表达式语言取出request对象中的消息--> <c:if test="${pageNo==1 }"><!--第一页和最后一页要特别对待,第一页中的‘第一页’和‘上一页’不能显示为超链接,最后一页中的‘最后一页’和‘下一页’不能显示为超链接-->
<td>第一页</td>
<td>上一页</td>
</c:if>
<!-- 如果不是第一页显示超链接 -->
<c:if test="${pageNo!=1 }">
<td><a href="findAllUser?pageNo=1">第一页</a></td>
<td><a href="findAllUser?pageNo=${pageNo-1 }">上一页</a></td>
</c:if> <c:if test="${pageNo==pageCount }">
<td> 下一页</td>
<td> 最后一页</td>
</c:if>
<!-- 如果不是第一页显示超链接 -->
<c:if test="${pageNo!=1 }">
<td><a href="FindAllUser?pageNo=${pageNo+1 }">下一页</a></td>
<td><a href="FindAllUser?pageNo=pageCount">最后一页</a></td>
</c:if> <td>
<form action="FindAllUser">
跳转到<input type="text" name="pageNo">页 <input type="submit"
value="跳转">
</form>
</td>
</tr>
</table>
<table align="center">
<tr><td>用户编号</td>
<td>用户名</td>
<td>生日</td>
<td>学历</td>
<td>地区</td>
<td>Email</td>
<td>地址</td>
</tr>
<c:forEach items="${userlist }" var="user">
<tr>
<td>${user.userid }</td>
<td>${user.username }</td>
<td>${user.birthday }</td>
<td>${user.degree }</td>
<td>${user.local }</td>
<td>${user.email }</td>
<td>${user.address }</td>
<td>...</td>
<td>
        <!--两个表单分别用来处理删除和修改操作-->
<form action="DeleteUser" method="post" onSubmit="return confirm('真的要删除该用户吗?');">
<input type="hidden" name="userid" value="${user.userid }">
<input type="submit" value="删除">
</form>
</td>
<td>
<form action="UpdateFindUser" method="post" >
<input type="hidden" name="userid" value="${user.userid }">
<input type="submit" value="修改">
</form>
</td>
</tr>
</c:forEach>
</table>

tips:添加信息和修改信息页面比较简单,在这里不赘述了。

  总结:

    从这个小例子中学到了什么:jdbc连接数据库实现增删改查,mvc模式的理解,表达式的使用,标签库的初步了解。

   

使用jdbc实现简单的mvc模式的增删改查的更多相关文章

  1. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  2. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  3. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  4. 关于MVC工厂模式的增删改查sql存储过程

    这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 ...

  5. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  6. EasyUI + Spring MVC + hibernate实现增删改查导入导出

    (这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...

  7. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  8. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)

    近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...

  9. 【ASP.NET MVC】jqGrid 增删改查详解

    1   概述 本篇文章主要是关于JqGrid的,主要功能包括使用JqGrid增删查改,导入导出,废话不多说,直接进入正题. 2   Demo相关 2.1   Demo展示 第一部分 第二部分 2.2 ...

随机推荐

  1. npm注册源的配置

    npm注册源的更换 在墙内久了,难免会碰到撞墙的时候,所幸国内也有众多 NPM 镜像可供选择,在大多数情况下我们可以使用国内的源(比如 淘宝 NPM 镜像)去替换官方的源以加快下载包的速度.不过呢,我 ...

  2. Python基础-求两个字符串最长公共前轴

    最长公共前缀,输入两个字符串,如果存在公共前缀,求出最长的前缀,如果没有输出no.如“distance”和“discuss”的最长公共前缀是“dis”. s1 = input('请输入第1个字符串-- ...

  3. JavaScript(6)--- 原型链

    原型链 再上一篇有简单讲过原型:JavaScript(5)--- 面向对象 + 原型 讲原型链知识之前,先说几个重要的结论. 1.原型链就是 对象的__proto__所连接的链状结构 2.protot ...

  4. docker 技术全面整理

    docker 和 vm 虚拟机技术比较像,但又有一些区别. vm 像真机一样有 BIOS ,有硬盘,有网卡,声卡,可以安装操作系统, win7 win10 macOS ubuntu centOS,有好 ...

  5. 【小程序】---- input获得焦点时placeholder重影BUG

    问题小程序的input组件有个自身的bug,即当输入框获取焦点时placeholder内容会出现重影现象. 解决思路原理:将placeholder内容单独写在另外的标签里,控制其显示隐藏.操作:将代表 ...

  6. 纯 css column 布局实现瀑布流效果

    原理 CSS property: columns.CSS属性 columns 用来设置元素的列宽和列数. 兼容性 chrome 50+ IE 10+ android browser 2.1+ with ...

  7. MySQL 统计行数的 count

    MySQL count() 函数我们并不陌生,用来统计每张表的函数.但如果你的表越来越大,并且是 InnoDB 引擎的话,会发现计算的速度会越来越慢.在这篇文章里,会先介绍 count() 实现的原理 ...

  8. 分享几个 PHP 编码的最佳实践

    对于初学者而言,可能很难理解为什么某些做法更安全. 但是,以下一些技巧可能超出了 PHP 的范围. 始终使用大括号 让我们看下面的代码: if (isset($condition) && ...

  9. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  10. cat、head、sed 三盟友

    在linux 中我们必不可少的会使用到这三个命令 他们有什么作用呢? 就是查看文档了,但他的功能远不止于此 来我们学习一下吧 cat [root@ESProbe ~]# cat --help Usag ...