MVC、JSP实现mysql的增删改查功能的封装和简陋的界面交互
(6)、源码:
package com.huai.dbc; import java.sql.DriverManager; public class DBConnection { private final String Driver = "com.mysql.jdbc.Driver"; private final String url = "jdbc:mysql://localhost:3306/test"; private java.sql.Connection con; public DBConnection()throws Exception{ Class.forName(Driver); con = DriverManager.getConnection(url, "root", "mysql"); } public java.sql.Connection getConnection(){ return this.con; } public void close()throws Exception{ if(this.con != null){ this.con.close(); } } // public static void main(String args[]){// try {// new Connection().getConnection();// } catch (Exception e) {// e.printStackTrace();// }// }}
package com.huai.dao; import java.util.*;import com.huai.vo.*; /* * 数据库操作的接口,里面的方法分别是增删改查 */public interface IDAOImpl { public ArrayList<User> queryData(String keyWord)throws Exception; public boolean deleteData(String keyWord)throws Exception; public boolean updateData(User user)throws Exception; public boolean insertData(User user)throws Exception;}
package com.huai.dao.impl; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import com.huai.dao.IDAOImpl;import com.huai.vo.User; /* * 此类实现数据库的操作接口 * 注意:在此还没有实现数据库连接的实例化(对象), * 只是提供了一个构造放法,以便在后面的实例化后传入 */public class UserDAOImpl implements IDAOImpl{ Connection con = null; PreparedStatement state = null; public UserDAOImpl(Connection con) { this.con = con; } @Override public ArrayList<User> queryData(String keyWord)throws Exception{ String sql = "select * from member where hobby like ? or name like ?"; ResultSet rs = null; ArrayList<User> users = new ArrayList<User>(); this.state = con.prepareStatement(sql); //百分号表示代表未知的字符 this.state.setString(1, "%"+keyWord+"%"); this.state.setString(2, "%"+keyWord+"%"); rs = this.state.executeQuery(); while(rs.next()){ User user = new User(); user.setId(rs.getString(1)); user.setName(rs.getString(2)); user.setSex(rs.getString(3)); user.setHobby(rs.getString(4)); users.add(user); } return users; } @Override public boolean deleteData(String keyWord) throws Exception { boolean flag = false; String sql = "delete from member where id = ?"; this.state = con.prepareStatement(sql); this.state.setString(1, keyWord); int i = this.state.executeUpdate(); if(i != 0){ flag = true; } return flag; } @Override public boolean updateData(User user) throws Exception { boolean flag = false; String sql = "update member set name=?, sex=?, hobby=? where id=?"; this.state = con.prepareStatement(sql); this.state.setString(1, user.getName()); this.state.setString(2, user.getSex()); this.state.setString(3, user.getHobby()); this.state.setString(4, user.getId()); int i = this.state.executeUpdate(); if(i != 0){ flag = true; } return flag; } @Override public boolean insertData(User user) throws Exception { boolean flag = false; String sql = "insert into member(id, name, sex, hobby) values(?, ?, ?, ?)"; this.state = con.prepareStatement(sql); this.state.setString(1, user.getId()); this.state.setString(2, user.getName()); this.state.setString(3, user.getSex()); this.state.setString(4, user.getHobby()); int i = this.state.executeUpdate(); if(i != 0){ flag = true; } return flag; }}
package com.huai.dao.impl; import java.util.ArrayList; import com.huai.dao.IDAOImpl;import com.huai.dbc.DBConnection;import com.huai.vo.User; /* * 这个类和UserDAOImpl都实现了IDAOImpl接口 * 但是这个类是UserDAOImpl的代理类,目的是在大的项目中更好地进行代码的管理 */public class UserDAOImplProxy implements IDAOImpl{ UserDAOImpl userDAOImpl = null; DBConnection dBConnection = null; public UserDAOImplProxy()throws Exception{ dBConnection = new DBConnection(); userDAOImpl = new UserDAOImpl(dBConnection.getConnection()); } @Override public ArrayList<User> queryData(String keyWord) throws Exception { ArrayList<User> list = null; try{ list = userDAOImpl.queryData(keyWord); }catch(Exception e){ throw e; } return list; } @Override public boolean deleteData(String keyWord) throws Exception { return userDAOImpl.deleteData(keyWord); } @Override public boolean updateData(User user) throws Exception { return userDAOImpl.updateData(user); } @Override public boolean insertData(User user) throws Exception { return userDAOImpl.insertData(user); } }
package com.huai.dao.factory; import com.huai.dao.impl.UserDAOImplProxy; public class DaoFactory { public static UserDAOImplProxy getUserDAOImplProxy() throws Exception{ return new UserDAOImplProxy(); }}
package com.huai.servlet; import java.io.IOException;import java.util.ArrayList; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.huai.dao.factory.DaoFactory;import com.huai.dao.impl.UserDAOImplProxy;import com.huai.vo.User; //此处是新建servlet文件是自动加上的,如果没有它,需要在项目中增加web.xml文件,并且进行相关的映射配置//否则的话jsp文件找不到这个MyServlet文件@WebServlet("/MyServlet") public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; UserDAOImplProxy userDAOImplProxy = null; public MyServlet() { try { userDAOImplProxy = DaoFactory.getUserDAOImplProxy(); } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("gbk"); //status表示的是hidden域,目的是辨清是哪张表所发出的命令 String status = request.getParameter("status"); if ("search".equals(status)) { try { ArrayList<User> list = null; list = userDAOImplProxy.queryData(request .getParameter("keyWord")); request.setAttribute("users", list); request.getRequestDispatcher("searchPage.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } else if ("insert".equals(status)) { String info = ""; String name = request.getParameter("name"); String sex = request.getParameter("sex"); String hobby = request.getParameter("hobby"); if (name == null || sex == null || hobby == null || "".equals(name) || "".equals(sex) || "".equals(hobby)) { info = "The information is not completed"; } else { User user = new User(); user.setName(name); user.setSex(sex); user.setHobby(hobby); try { if (userDAOImplProxy.insertData(user)) { info = "succeed to insert!"; } else { info = "failed to insert!"; } } catch (Exception e) { e.printStackTrace(); } } request.setAttribute("info", info); request.getRequestDispatcher("insertPage.jsp").forward(request, response); } else if ("delete".equals(status)) { String keyWord = request.getParameter("id"); try { String info = ""; if (userDAOImplProxy.deleteData(keyWord)) { info = "succeed to delete!"; } else { info = "failed to delete!"; } request.setAttribute("info", info); //注意:这里的是内部跳转,也就是服务器端的跳转。外在表现是地址栏没变。好处就是提高性能 request.getRequestDispatcher("searchPage.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } else if ("update".equals(status)) { String info = ""; String path = null; String id = request.getParameter("id"); String name = request.getParameter("name"); String sex = request.getParameter("sex"); String hobby = request.getParameter("hobby"); if (name == null || sex == null || hobby == null || "".equals(name) || "".equals(sex) || "".equals(hobby)) { info = "The information is not completed"; path = "updatePage.jsp"; } else { User user = new User(); user.setId(id); user.setName(name); user.setSex(sex); user.setHobby(hobby); try { if (userDAOImplProxy.updateData(user)) { info = "succeed to update!"; path = "searchPage.jsp"; } else { info = "failed to update!"; path = "updatePage.jsp"; } } catch (Exception e) { e.printStackTrace(); } } request.setAttribute("info", info); request.getRequestDispatcher(path).forward(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
package com.huai.vo; public class User { private String id; private String name; private String sex; private String hobby; public User(){ } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } }
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>welcome page</title></head><body><center><%request.setCharacterEncoding("gbk"); %><h1>Welcome !</h1><h3><a href="searchPage.jsp">search_page</a><br></h3><h3><a href="insertPage.jsp">insert_page</a><br></h3><h3><a href="updatePage.jsp">update_page</a><br></h3></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk " pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>insertPage</title></head><body><center> <%request.setCharacterEncoding("gbk"); %> <h1>Insert_Page</h1> <h2>${requestScope.info}</h2> <form action="MyServlet" method="post"> name:<input type="text" name="name"><br> UserSex:<input type="text" name="sex"><br> Hobby:<input type="text" name="hobby"><br> <input type="submit" value="insert"> <input type="reset" value="reset"> <input type="hidden" name="status" value="insert"><br> <a href="index.jsp">-->>index_page</a> </form></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="GB18030"%><%@page import="java.util.*" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>searchPage</title></head><body><center> <%request.setCharacterEncoding("gbk"); %> <h3>${requestScope.info}</h3> <form action="MyServlet" method="post"> <input type="text" name="keyWord"> <input type="hidden" name="status" value="search"/> <input type="submit" value="search"> <a href="index.jsp">-->>index_page</a> </form> <%request.setCharacterEncoding("gbk"); %> <%List list = (List)request.getAttribute("users"); if(list != null){ %> <table border="1"> <tr> <td>id</td> <td>name</td> <td>sex</td> <td>hobby</td> </tr> <% Iterator iter = list.iterator(); while(iter.hasNext()){ pageContext.setAttribute("de", iter.next()); %> <tr> <td>${de.id}</td> <td>${de.name}</td> <td>${de.sex}</td> <td>${de.hobby}</td> <td><a href="updatePage.jsp?id=${de.id}&name=${de.name}&sex=${de.sex}&hobby=${de.hobby}">修改</a></td> <td><a href="MyServlet?id=${de.id}&status=delete">删除</a></td> </tr> <% } %> </table> <% } %></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>update_page</title></head><body><center> <%request.setCharacterEncoding("gbk"); %> <h1>Update_Page</h1> <form action="MyServlet" method="post"> <h3>id = ${param.id}</h3> name:<input type="text" name="name" value=${param.name}><br> sex:<input type="text" name="sex" value=${param.sex}><br> hobby:<input type="text" name="hobby" value=${param.hobby}><br> <input type="hidden" name="id" value=${param.id}><br> <input type="hidden" name="status" value="update"> <input type="submit" value="提交"> <a href="index.jsp">-->index_page</a><br></form></center></body></html>
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%><!-- 导入标准标签库,也就是说,我们需要实现在WEB-INF/lib中放入相关的jar包,具体见截图 --><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><html><head><title>searchPage</title></head><body> <% request.setCharacterEncoding("gbk"); %> <h3>${requestScope.info}</h3> <form action="MyServlet" method="post"> <input type="text" name="keyWord"> <input type="hidden" name="status" value="search" /> <input type="submit" value="search"> <a href="index.jsp">-->>index_page</a> </form> <table border="1"> <tr> <td>num</td> <td>id</td> <td>name</td> <td>sex</td> <td>hobby</td> <td>修改</td> <td>删除</td> </tr> <c:forEach var="student" items="${requestScope.users}" varStatus="num"> <tr> <!-- varStatus表示当前变量student的状态,所以会有num.count(从1开始计数);还有num.index(从0开始计数) 等等--> <td><c:out value="${num.count}"></c:out></td> <td><c:out value="${student.id}"></c:out></td> <td><c:out value="${student.name}"></c:out></td> <td><c:out value="${student.sex}"></c:out></td> <td><c:out value="${student.hobby}"></c:out></td> <!-- 生成一个带有属性id,name, sex, hobby的url地址 --> <td><c:url value="updatePage.jsp" var="update_url" scope="page"> <c:param name="id" value="${student.id}" /> <c:param name="name" value="${student.name}" /> <c:param name="sex" value="${student.sex}" /> <c:param name="hobby" value="${student.hobby}" /> <!-- 根据合成的url地址形成一个超链接,其中update_url是所合成地址的名字 --> </c:url> <a href="${update_url}">修改</a></td> <td><c:url value="MyServlet" var="delete_url" scope="page"> <c:param name="id" value="${student.id}" /> <c:param name="status" value="delete" /> </c:url> <a href="${delete_url}">删除</a></td> </tr> </c:forEach> </table></body></html>
MVC、JSP实现mysql的增删改查功能的封装和简陋的界面交互相关推荐
- 微信小程序+mysql实现增删改查
目录 微信小程序+mysql实现增删改查 一.效果展示 二.相关知识点 1.wx.chooseImage(Object object) 选择图片 2.wx.uploadFile(Object obje ...
- sqlalchemy 对 mysql 进行增删改查
我其实还是喜欢原生的 sql 语句,sqlalchemy是对pymysql的封装,用的时候经常出各种错误.但是orm操作较简单,可以实现外键的关联操作. 视频 https://www.bilibili ...
- 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!
一丶使用三层架构创建一个简单的MVC登录操作 1.首先,创建一个项目以及BLL层.DAL层.Entity层,如图一: 图一 2.创建一个数据库如图二: 图二 3基本工作已做好,接下来就编BLL层.DA ...
- python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...
- 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?
php操作mysql的增删改查方法:1.插入语句[insert into 数据表名(字段1,字段2,....) values("值1","值2",..)]:2. ...
- Mysql (一)Mysql 数据库增删改查
mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...
- Go操作mysql实现增删改查及连接池
[-] 下载驱动 创建测试表 数据库连接 插入操作 查询操作 修改操作 删除操作 完整代码 小结 开启web服务 db对象初始化 请求方法 小结 golang本身没有提供连接mysql的驱动,但是定义 ...
- Java连接Mysql数据库增删改查实现
Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...
- php对mysql进行增删改查,php对mysql进行增删改查
php对mysql进行增删改查 /* 用户名 : MYSQL_USER 密 码 : MYSQL_PASS 域 名 : MYSQL_HOST 端 口 : MYSQL_PORT 数据库名 : MYSQL_ ...
最新文章
- 【小白学习C++ 教程】十八、C++ 中文件处理
- css :after :berfor
- Apache Maven ToolChains的使用
- java 多项式拟合最多的项数_Matlab概率统计与曲线拟合
- WinCE中的RAM-Based Registry与HIVE-Based Registry
- c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
- learning hmm
- 04. Make sure that objects are initialized before they're used
- python求解LeetCode习题Maximum Gap
- matlab对文件夹的遍历
- javax.persistence.TransactionRequiredException: No transactional EntityManager available
- representation learning的理解
- 靶机Who Wants To Be King 1渗透记录
- cesium加载entity图片缩放_教你使用最简单粗暴的js方法实现图片最小边展示
- 第二证券|扶持政策频发,教育板块再度爆发,全通教育“20cm”涨停
- 【系统分析师之路】计算机组成原理章节错题集锦
- 如何利用Python动态模拟太阳系运转
- 面试官:为啥要axios 的二次封装呢 及其使用是干啥的
- 中国地区“MMM dd, yyyy HH:mm:ss a“的时间格式问题
- 情感分析Sentiment Analysis 知识资料全集(入门/进阶/论文/综述/视频/专家,附查看
热门文章
- php 求数组组合数,php实现求数组全排列,元素所有组合的方法
- 11月8日学习内容整理:js的引入方式,变量数据类型,运算符,流程控制,函数...
- CentOS7定制封装发行版-基于CentOS minimal
- django定时任务实现(言简意赅) Django折腾记之启动定时任务(转)
- Theano 中文文档 0.9 - 7.2.5 循环
- Cocos2d之Texture2D类详解之将文件加载成Texture2D对象
- Windows 8.1 应用再出发 - 创建我的第一个应用
- Linux下锁用户与解锁问题
- Linux安装图解全过程(Linux Text文本界面安装)
- 惠普鼠标g260_惠普g260鼠标怎么样 惠普鼠标怎么样?