使用jdbc实现简单的mvc模式的增删改查

Mvc模式设计:

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

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

模型:userbean

数据库层:DBBean

总体设计:

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

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

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

详细设计:

数据库层:DBBean

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

 1 public class DBBean {
 2     private Connection con;
 3     private Statement stmt;
 4     private ResultSet rs;
 5     public DBBean() {
 6
 7     }
 8     //获取数据库的连接
 9     public Connection getConnection() throws Exception
10     {
11         String url="jdbc:mysql://localhost:3306/bookstore";
12         String dbuser="root";
13         String dbpass="";
14         if(con==null)
15         {
16             Class.forName("com.mysql.jdbc.Driver");
17             con=DriverManager.getConnection(url, dbuser, dbpass);
18         }
19         return con;
20     }
21
22     //执行查询语句,返回结果集
23     public ResultSet executeQuery(String sql) throws Exception
24     {
25         if(con==null)
26         {
27             throw new Exception("没有连接对象可用");
28         }
29         stmt=con.createStatement();
30         rs=stmt.executeQuery(sql);
31         return rs;
32     }
33
34     public int executeUpdate(String sql)throws Exception
35     {
36         if(con==null)
37         {
38             throw new Exception("没有连接对象可用");
39         }
40         stmt=con.createStatement();
41
42         return stmt.executeUpdate(sql);
43     }
44
45     public void close()
46     {
47         if(rs!=null)
48             try {
49                 rs.close();
50             } catch (SQLException e) {
51                 e.printStackTrace();
52             }
53         try {
54             stmt.close();
55         } catch (SQLException e) {
56             // TODO Auto-generated catch block
57             e.printStackTrace();
58         }
59         try {
60             con.close();
61         } catch (SQLException e) {
62             // TODO Auto-generated catch block
63             e.printStackTrace();
64         }
65     }
66 }

模型层设计:UserBean

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

 1 public void add() throws Exception {
 2         Connection con = null;
 3         DBBean db = new DBBean();
 4         String sql = "insert into usertable values(‘"+userid+"‘,‘"+username+"‘,‘"+userpass+"‘,‘"+type+"‘,‘"+new java.sql.Date(birthday.getTime())+"‘,‘"+degree+"‘,‘"+local+"‘,‘"+email+"‘,‘"+address+"‘,‘"+comment+"‘)";
 5
 6         try {
 7             con = db.getConnection();
 8             db.executeUpdate(sql);
 9         } catch (Exception e) {
10             System.out.println(e.toString());
11
12         } finally {
13             db.close();
14         }
15     }

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

 1 public UserBean findUserById(String userid) throws Exception {
 2         Connection con = null;
 3         ResultSet rs=null;
 4         DBBean db = new DBBean();
 5         String sql = "select * from usertable where userid=‘"+userid+"‘";
 6
 7         try {
 8             con = db.getConnection();
 9             rs=db.executeQuery(sql);
10
11             if(rs.next())
12             {
13                 String tmpUserid=rs.getString(1);
14                 String tmpUsername=rs.getString(2);
15                 String tmpUserpass=rs.getString(3);
16                 String tmpType=rs.getString(4);
17                 java.util.Date tmpBirthday=rs.getDate(5);
18                 String tmpDegree=rs.getString(6);
19                 String tmpLocal =rs.getString(7);
20                 String tmpEmail=rs.getString(8);
21                 String tmpAddress=rs.getString(9);
22                 String tmpComment=rs.getString(10);
23                 UserBean user=new UserBean();
24                 user.setAddress(tmpAddress);
25                 user.setBirthday(tmpBirthday);
26                 user.setComment(tmpComment);
27                 user.setDegree(tmpDegree);
28                 user.setEmail(tmpEmail);
29                 user.setLocal(tmpLocal);
30                 user.setType(tmpType);
31                 user.setUserid(tmpUserid);
32                 user.setUsername(tmpUsername);
33                 user.setUserpass(tmpUserpass);
34                 return user;
35             }
36         } catch (Exception e) {
37             System.out.println(e.toString());
38         } finally {
39             db.close();
40         }
41         return null;
42     }

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

 1 public int update(String userid) throws Exception {
 2         Connection con=null;
 3         DBBean db = new DBBean();
 4         String sql="update usertable set username=‘"+username+"‘,userpass=‘"+userpass+"‘,birthday=‘"+new java.sql.Date(birthday.getTime())+"‘,degree=‘"+degree+
 5                 "‘,local=‘"+local+"‘,email=‘"+email+"‘,address=‘"+address+"‘,comment=‘"+comment+"‘ where userid=‘"+userid+"‘";
 6         try
 7         {
 8             con=db.getConnection();
 9             return db.executeUpdate(sql);
10         }catch(Exception e)
11         {
12             System.out.println(e.toString());
13         }
14         finally{db.close();}
15         return 0;
16     }

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

 1 public int delete(String userid) throws Exception {
 2         Connection con=null;
 3         DBBean db = new DBBean();
 4         String sql="delete  from usertable where userid=‘"+userid+"‘";
 5         try
 6         {
 7             con=db.getConnection();
 8             return db.executeUpdate(sql);
 9         }catch(Exception e)
10         {
11             System.out.println(e.toString());
12         }
13         finally{db.close();}
14         return 0;
15     }

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

 1 public boolean hasExist(String userid) throws Exception {
 2         boolean find=false;
 3         Connection con = null;
 4         ResultSet rs=null;
 5         DBBean db = new DBBean();
 6         String sql = "select * from usertable where userid=‘"+userid+"‘";
 7         try
 8         {
 9             con=db.getConnection();
10             rs= db.executeQuery(sql);
11             if(rs.next())
12             {
13                 find=true;
14             }
15             else
16             {
17                 find =false;
18             }
19         }catch(Exception e)
20         {
21             System.out.println(e.toString());
22         }
23         finally{db.close();}
24     return find;
25
26     }

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

 1 public Integer getPageCount() throws Exception {
 2         int pageCount=1;
 3         Connection con = null;
 4         ResultSet rs=null;
 5         DBBean db = new DBBean();
 6         String sql="select count(*) from usertable";
 7         try
 8         {
 9             con=db.getConnection();
10             rs= db.executeQuery(sql);
11             if(rs.next())
12             {
13                 int n=rs.getInt(1);
14                 pageCount=(n-1)/10+1;
15             }
16
17         }catch(Exception e)
18         {
19             System.out.println(e.toString());
20         }
21         finally{db.close();}
22         return new Integer(pageCount);
23     }

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

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

 1 public ArrayList findAllUser(String pageNo) throws Exception {
 2         ArrayList<UserBean> userlist=new ArrayList<UserBean>();
 3         Connection con = null;
 4         ResultSet rs=null;
 5         DBBean db = new DBBean();
 6         String sql="select * from usertable";
 7         try
 8         {
 9             con=db.getConnection();
10             rs= db.executeQuery(sql);
11             int iPageNo=1;
12             try{
13                 iPageNo=Integer.parseInt(pageNo);
14             }
15             catch(Exception e){}
16             int begin=(iPageNo-1)*10+1;//当前页面开始的记录
17             int end=iPageNo*10;//当前页面结束的记录
18             int index=1;
19             UserBean user=null;
20             while(rs.next())
21             {
22                 if(begin>index)//遇到在当前页面之前的记录直接跳过
23                     continue;
24                 if(end<index)//遇到在当前页面之后的记录退出循环
25                     break;
26                 String tmpUserid=rs.getString(1);
27                 String tmpUsername=rs.getString(2);
28                 String tmpUserpass=rs.getString(3);
29                 String tmpType=rs.getString(4);
30                 java.util.Date tmpBirthday=rs.getDate(5);
31                 String tmpDegree=rs.getString(6);
32                 String tmpLocal =rs.getString(7);
33                 String tmpEmail=rs.getString(8);
34                 String tmpAddress=rs.getString(9);
35                 String tmpComment=rs.getString(10);
36                 user=new UserBean();
37                 user.setAddress(tmpAddress);
38                 user.setBirthday(tmpBirthday);
39                 user.setComment(tmpComment);
40                 user.setDegree(tmpDegree);
41                 user.setEmail(tmpEmail);
42                 user.setLocal(tmpLocal);
43                 user.setType(tmpType);
44                 user.setUserid(tmpUserid);
45                 user.setUsername(tmpUsername);
46                 user.setUserpass(tmpUserpass);
47                 userlist.add(user);//查找到的记录封装好放在userlist中
48                 index++;
49             }
50
51
52         }catch(Exception e)
53         {}
54         finally{db.close();}
55         return userlist;
56     }

控制器设计

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

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         String tmpUserid=request.getParameter("userid");
 4         String tmpUsername=request.getParameter("username");
 5         String tmpUserpass=request.getParameter("userpass");
 6         String birthday=request.getParameter("birthday");
 7         DateFormat df=new SimpleDateFormat("yyyy-mm-dd");
 8         java.util.Date tmpBirthday=null;
 9         try
10         {tmpBirthday=df.parse(birthday);
11
12         }catch(Exception e)
13         {}
14
15         String tmpDegree=request.getParameter("degree");
16         tmpDegree=new String(tmpDegree.getBytes("8859_1"));
17         String tmpLocal =request.getParameter("local");
18         tmpLocal=new String(tmpLocal.getBytes("8859_1"));
19         String tmpEmail=request.getParameter("email");
20         String tmpAddress=request.getParameter("address");
21         String tmpComment=request.getParameter("comment");
22         UserBean user=new UserBean();
23         user.setAddress(tmpAddress);
24         user.setBirthday(tmpBirthday);
25         user.setComment(tmpComment);
26         user.setDegree(tmpDegree);
27         user.setEmail(tmpEmail);
28         user.setLocal(tmpLocal);
29
30         user.setUserid(tmpUserid);
31         user.setUsername(tmpUsername);
32         user.setUserpass(tmpUserpass);
33         String forward=null;
34         String info=null;
35         try {
36             if(user.hasExist(tmpUserid))
37             {
38                 info="用户已存在";
39                 forward="addUser.jsp";
40             }
41             else
42             {
43                 try{
44                     user.add();
45                     forward="FindAllUser";
46                     info="添加成功";
47                 }catch(Exception e)
48                 {
49                     info="数据库异常";
50                     forward="FindAllUser";
51                 }
52             }
53         } catch (Exception e) {
54             // TODO Auto-generated catch block
55             e.printStackTrace();
56         }
57
58         request.setAttribute("info", info);
59         RequestDispatcher rd=request.getRequestDispatcher(forward);//更新成功返回用户列表界面
60         rd.forward(request, response);
61     }

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

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         String tmpUserid=request.getParameter("userid");
 4         String tmpUsername=request.getParameter("username");
 5         String tmpUserpass=request.getParameter("userpass");
 6         String birthday=request.getParameter("birthday");
 7         DateFormat df=new SimpleDateFormat("yyyy-mm-dd");
 8         java.util.Date tmpBirthday=null;
 9         try
10         {tmpBirthday=df.parse(birthday);
11
12         }catch(Exception e)
13         {}
14
15         String tmpDegree=request.getParameter("degree");
16         String tmpLocal =request.getParameter("local");
17         String tmpEmail=request.getParameter("email");
18         String tmpAddress=request.getParameter("address");
19         String tmpComment=request.getParameter("comment");
20         UserBean user=new UserBean();
21         user.setAddress(tmpAddress);
22         user.setBirthday(tmpBirthday);
23         user.setComment(tmpComment);
24         user.setDegree(tmpDegree);
25         user.setEmail(tmpEmail);
26         user.setLocal(tmpLocal);
27
28         user.setUserid(tmpUserid);
29         user.setUsername(tmpUsername);
30         user.setUserpass(tmpUserpass);
31         String info;
32         try{
33             if(user.update(tmpUserid)>0)
34             {
35                 info="信息更新成功";
36             }
37             else
38             {
39                 info="信息更新失败";
40             }
41
42         }catch(Exception e)
43         {
44             info="数据库异常";
45         }
46         request.setAttribute("info", info);
47         RequestDispatcher rd=request.getRequestDispatcher("FindAllUser");//更新成功返回用户列表界面
48         rd.forward(request, response);
49     }

3.显示信息控制器:

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

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         int pageNo=1;
 4         String strPageNo=request.getParameter("pageNo");
 5         if(strPageNo!=null)
 6         {
 7             pageNo=Integer.parseInt(strPageNo);
 8         }
 9         UserBean user=new UserBean();
10         try{
11             ArrayList<UserBean> userlist=user.findAllUser(String.valueOf(pageNo));
12             request.setAttribute("userlist", userlist);
13             Integer pageCount=user.getPageCount();
14             request.setAttribute("pageCount", pageCount);
15             request.setAttribute("pageNo", pageNo);
16         }catch(Exception e)
17         {
18
19         }
20         RequestDispatcher rd=request.getRequestDispatcher("userlist.jsp");
21         rd.forward(request, response);
22     }

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

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         String userid=request.getParameter("userid");
 4         UserBean user=new UserBean();
 5         String info=null;
 6         try
 7         {
 8             if(user.delete(userid)>0)
 9             {
10                 info="删除成功";
11             }
12             else
13             {
14                 info="删除失败 ";
15             }
16         }catch(Exception e)
17         {
18             info="数据异常";
19         }
20         request.setAttribute("info", info);
21         RequestDispatcher rd=request.getRequestDispatcher("FindAllUser");
22         rd.forward(request, response);
23
24     }

视图设计

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

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模式的理解,表达式的使用,标签库的初步了解。

   

时间: 2024-12-29 13:20:12

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

一个基本的MVC模式的增删改查

Model:Employee.java View:listEmp.jsp   addEmp.jsp   modifyEmp.jsp Controler:ActionServlet Dao:BaseDao.java(与DBUtil功能一致,可以让子类dao继承)   EmpDao.java 本案例采用一个Servlet控制器接收请求,所有请求格式为...*.do,servlet根据.do前面与"/"后面的内容判断请求类型. 执行步骤演示: 浏览器发送请求:request:http://l

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

package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import ceet.ac.cn.model.Admin; public class AdminDao {

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

最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1.public Connection getConnection()   获得数据库的连接 2.public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException  更新数据库

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

四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 delete from [table] where column = ? 三.修改语句 update [table] set column = ? where column = ? 四.查询语句 1)查询单条记录的所有字段 select * from [table] where [column] = ? 2

MVC+EF 的增删改查操作

1. //创建EF映射对象数据集 static Models.db_JiaoYouEntities DbDeleteData = new Models.db_JiaoYouEntities(); 2. #region 得到数据集合+Query() /// <summary> /// 得到数据集合 /// </summary> /// <returns></returns> public List<Models.tb_Msg> Query() {

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

#Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2. 获取: get key 127.0.0.1:6379> get username "zhangsan" 以下同理: 127.0.0.1:6379> set age 23 OK 127.0.0.1:6379> get age "23" 127.0.0

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

这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 namespace DAL 2 { 3 public class DalHouse : IHouse 4 { 5 public int Add(HouseInfo m) 6 { 7 string sql = "pro_add"; 8 SqlParameter eid = new SqlP

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

(这是一个故事……) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已经搭建好的框架平台,在平台上进行编码,不限制技术. 虽然说不限制技术,但还是得根据已经搭建的框架平台进行编码. 所以首先第一步,分析框架平台结构组成. 入手:看目录.看配置.看jar包.看js库.看数据库... 不难发现项目是基于:Spring + Hibernate + Spring MVC +

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

一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创