完整的CRUD——javaweb
1,总体架构
index是进去的页面,
可以跳转Insert的增加页面,operatePerson是根据传进来的URI来判断增删改查的页面,
DbManager.java是封装的数据库操作类, Pagination.java是页脚的信息栏
2,index页面
final int pageSize = 5;//一页显示多少纪录
int pageNum = 1;//当前页数
int pageCount = 1;//总页数
int recordCount = 0;//总记录数
<form action="operatePerson.jsp" method="post">
<table border="1">
<%
for(; resultSet.next();){
out.println("<tr>");
String name = resultSet.getString("name");
out.println("<td>" + name + "</td>");
out.println("<td>" + resultSet.getString("age") + "</td>");
out.println("<td>" + resultSet.getString("sex") + "</td>");
out.println("<td><a href='operatePerson.jsp?action=delete&name=" + name +"'>删除</a></td>");
out.println("<td><a href='operatePerson.jsp?action=edit&name=" + name +"'>修改</a></td>");
out.println("</tr>");
}
%>
</table>
<%=Pagination.getPagination(pageNum, pageCount
, recordCount, request.getRequestURI()) %>
画出表,包括页脚,(上面的form其实没有什么用
分页技术使用数据库的 select * from person limit ?,? ----意思是从哪条开始(不包括这一条)的 n条记录
问号使用preparedStatement语句来实现
代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="testPackage.DbManager" %>
<%@ page import="testPackage.Pagination" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <%
final int pageSize = 5;//一页显示多少纪录
int pageNum = 1;//当前页数
int pageCount = 1;//总页数
int recordCount = 0;
try{//当前页数
pageNum = Integer.parseInt(request.getParameter("pageNum"));
System.out.println("0000:" + pageNum);
}catch(Exception e){}
String sql = null;
Connection con = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try{
sql = "select count(*) from person";
recordCount = DbManager.getCount(sql);
pageCount = (recordCount + pageSize - 1) / pageSize;
int startRecord = (pageNum - 1) * pageSize;
sql = "select * from person limit ?,?";
con = DbManager.getConnection();
preparedStatement = con.prepareStatement(sql);
DbManager.setParams(preparedStatement, startRecord, pageSize);
resultSet = preparedStatement.executeQuery();
%>
<body>
<a href="Insert.jsp">新建一个</a>
<form action="operatePerson.jsp" method="post">
<table border="1">
<%
for(; resultSet.next();){
out.println("<tr>");
String name = resultSet.getString("name");
out.println("<td>" + name + "</td>");
out.println("<td>" + resultSet.getString("age") + "</td>");
out.println("<td>" + resultSet.getString("sex") + "</td>");
out.println("<td><a href='operatePerson.jsp?action=delete&name=" + name +"'>删除</a></td>");
out.println("<td><a href='operatePerson.jsp?action=edit&name=" + name +"'>修改</a></td>");
out.println("</tr>");
}
%>
</table>
<%=Pagination.getPagination(pageNum, pageCount
, recordCount, request.getRequestURI()) %>
<br/>
<%=pageNum %>
</form>
<%
}catch(SQLException e1){
out.println("0001" + e1.getMessage());
}
finally {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (con != null)
con.close();
}
%>
</body>
</html>
2,operatePerson.jsp页面
我写的时候没有使用DbManager类,在里面的增删改都用了原始的操作
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");//一定要
String action = request.getParameter("action");//先接受是什么操作
增:request.getPararmeter("name...")通过这个方法来获得表传进来的数据
删:request.getPararmeter("name")通过这个方法来获得uri传进来的paramer
改:request.getPararmeter("name")通过这个方法来获得uri传进来的paramer,(我设计的时候没有完善好,默认他们不能有同名,所以不能改名字
request.setAttribute("name", resultSet.getString("name")//把传进来的参数穿进去request里面,用forward转向到insert的页面在,那样insert可以从request里面提取数据(同时也把"save"信息传过去),和真正的插入有了区别
在insert会判断是save的传递,把数据传回来operate页面,做真正的修改
3,insert页面
会根据传过来的action判断是插入还是修改,以此来修改uri,form表给的提交方式要改为post ,因为这样表格的内容就不能形象uri的传递,
value="${name}"的时候,在修改的时候会显示值,注意:el表达式,${name}或者${requestScope.name}而不是${request.name}
4,Pagination.java
页脚,用StringBuffer类,append字符串
5,DbManager.java
数据库管理类
public static Connection getConnection(String dbName, String userName,String password)
public static Connection getConnection() //获得con对象
public static void setParams(PreparedStatement preparedStatement,Object... params) //把preparedStatement放进去,发若干个参数,preparedStatement.setInt.....之类的
public static int executeUpdate(String sql)
public static int executeUpdate(String sql, Object... params) //对上面方法的封装,穿进去sql的字符串就行了
源码:
DbManager
package testPackage; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types; public class DbManager {
public static Connection getConnection() throws SQLException,
ClassNotFoundException {
return getConnection("test", "kooing", "");
} public static Connection getConnection(String dbName, String userName,
String password) throws SQLException, ClassNotFoundException {
String url = "jdbc:mysql://localhost:3306/" + dbName;
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url);
return con;
} public static void setParams(PreparedStatement preparedStatement,
Object... params) throws SQLException {
for (int i = 1; i <= params.length; i++) {
Object param = params[i - 1];
if (param == null) {
preparedStatement.setNull(i, Types.NULL);
} else if (param instanceof Integer) {
preparedStatement.setInt(i, (Integer) param);
} else if (param instanceof String) {
preparedStatement.setString(i, (String) param);
}
}
} public static int executeUpdate(String sql) throws SQLException,
ClassNotFoundException {
return executeUpdate(sql, new Object[] {});
} public static int executeUpdate(String sql, Object... params)
throws SQLException, ClassNotFoundException {
Connection con = null;
PreparedStatement preparedStatement = null;
try {
con = getConnection();
preparedStatement = con.prepareStatement(sql);
setParams(preparedStatement, params);
return preparedStatement.executeUpdate();
} finally {
if (preparedStatement != null)
preparedStatement.close();
if (con != null)
con.close();
}
} public static int getCount(String sql) throws SQLException,
ClassNotFoundException {
Connection con = null;
Statement statement = null;
ResultSet rs = null;
try {
con = getConnection();
statement = con.createStatement();
rs = statement.executeQuery(sql);
rs.next();
return rs.getInt(1);
} finally {
if (rs != null)
rs.close();
if (statement != null)
statement.close();
if (con != null)
con.close();
}
}
}
Pagination
package testPackage; public class Pagination {
public static String getPagination(int pageNum, int pageCount,
int recordCount, String pageUrl) {
String url = pageUrl.contains("?") ? pageUrl : pageUrl + "?";
if (!url.endsWith("?") && !url.endsWith("&")) {
url += "&";
}
StringBuffer buffer = new StringBuffer();
buffer.append("第 " + pageNum + "/" + pageCount + "页,共" + recordCount
+ "纪录。");
buffer.append(pageNum == 1 ? "第一页" : "<a href='" + url
+ "pageNum=1'>第一页</a>");
// buffer.append(pageNum == 1 ? "第一页" : "<a href='" + url + "pageNum=" +
// 1
// + "'>第一页</a>"); buffer.append(pageNum == 1 ? "上一页" : "<a href='" + url + "pageNum="
+ (pageNum - 1) + "'>上一页</a>"); buffer.append(pageNum == pageCount ? "下一页" : "<a href='" + url
+ "pageNum=" + (pageNum + 1) + "'>下一页</a>"); buffer.append(pageNum == pageCount ? "最后一页" : "<a href='" + url
+ "pageNum=" + pageCount + "'>最后一页</a>");
return buffer.toString();
}
}
index
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="testPackage.DbManager" %>
<%@ page import="testPackage.Pagination" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <%
final int pageSize = 5;//一页显示多少纪录
int pageNum = 1;//当前页数
int pageCount = 1;//总页数
int recordCount = 0;
try{//当前页数
pageNum = Integer.parseInt(request.getParameter("pageNum"));
System.out.println("0000:" + pageNum);
}catch(Exception e){}
String sql = null;
Connection con = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try{
sql = "select count(*) from person";
recordCount = DbManager.getCount(sql);
pageCount = (recordCount + pageSize - 1) / pageSize;
int startRecord = (pageNum - 1) * pageSize;
sql = "select * from person limit ?,?";
con = DbManager.getConnection();
preparedStatement = con.prepareStatement(sql);
DbManager.setParams(preparedStatement, startRecord, pageSize);
resultSet = preparedStatement.executeQuery();
%>
<body>
<a href="Insert.jsp">新建一个</a>
<form action="operatePerson.jsp" method="post">
<table border="1">
<%
for(; resultSet.next();){
out.println("<tr>");
String name = resultSet.getString("name");
out.println("<td>" + name + "</td>");
out.println("<td>" + resultSet.getString("age") + "</td>");
out.println("<td>" + resultSet.getString("sex") + "</td>");
out.println("<td><a href='operatePerson.jsp?action=delete&name=" + name +"'>删除</a></td>");
out.println("<td><a href='operatePerson.jsp?action=edit&name=" + name +"'>修改</a></td>");
out.println("</tr>");
}
%>
</table>
<%=Pagination.getPagination(pageNum, pageCount
, recordCount, request.getRequestURI()) %>
<br/>
<%=pageNum %>
</form>
<%
}catch(SQLException e1){
out.println("0001" + e1.getMessage());
}
finally {
if (resultSet != null)
resultSet.close();
if (preparedStatement != null)
preparedStatement.close();
if (con != null)
con.close();
}
%>
</body>
</html>
operate
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String action = request.getParameter("action");
String sql = null;
if ("add".equals(action)) {
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String sex = request.getParameter("sex");
sql = "insert into person values('" + name + "','" + age
+ "','" + sex + "')";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "kooing", "");
Statement sm = con.createStatement();
int resultSet = sm.executeUpdate(sql);
out.println(sql);
} catch (Exception e) { }
}
if ("delete".equals(action)) {
String name = request.getParameter("name");
System.out.println(name);
sql = "delete from person where name = '" + name + "'";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "kooing", "");
Statement sm = con.createStatement();
int resultSet = sm.executeUpdate(sql);
out.println(sql);
} catch (Exception e) { }
}
if ("edit".equals(action)) {
try {
String name = request.getParameter("name");
sql = "select * from person where name ='" + name + "'";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "kooing", "");
Statement sm = con.createStatement();
ResultSet resultSet = sm.executeQuery(sql);
out.println(sql);
resultSet.next();
request.setAttribute("name", resultSet.getString("name"));
request.setAttribute("age", resultSet.getString("age"));
request.setAttribute("sex", resultSet.getString("sex"));
request.setAttribute("action", action);
request.getRequestDispatcher("Insert.jsp").forward(request,
response);
} catch (Exception e) {
}
}
if("save".equals(action)){
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String sex = request.getParameter("sex");
sql = "update person set "
+ "name='" + name
+ "',age='" + age
+ "',sex='" + sex + "' where name ='" + name +"'";
System.out.println(sql);
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"kooing", "");
Statement sm = con.createStatement();
int result = sm.executeUpdate(sql);
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'operatePerson.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
This is my JSP page.
<br>
<a href="index.jsp">主页</a>
</body>
</html>
insert
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'Insert.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<%
String myAction = (String)request.getAttribute("action");
myAction = myAction == null? "add" : "save";
System.out.println(myAction);
System.out.println(request.getAttribute("name"));
System.out.println(request.getAttribute("age"));
System.out.println(request.getAttribute("sex"));
%>
<form action="operatePerson.jsp?action=<%=myAction %>" method="post">
姓名<input type="text" name="name" value="${name }"><br/>
年龄<input type="text" name="age" value="${age }"><br/>
性别<input type="text" name="sex" value="${sex }"><br/>
<input type="submit">
</form>
</body>
</html>
完整的CRUD——javaweb的更多相关文章
- Servlet(六):连接数据库,完整的CRUD
Servlet的知识点大致讲完了,今天补充下与之相关的一些小知识,然后做一个完整的小例子. 一.MVC设计模式 1.MVC设计模式是什么? 在了解MVC之前,先聊聊Model1.Model2开发模式. ...
- SpringMVC+easyUI 分页,查询 (完整的CRUD)
最终完毕CRUD的功能了,注意,这里会对前面有一些修改,UserController的listUser() 已经改写了,如今把所有整理一下吧. JSP: <%@ page language=&q ...
- [MyBatis]完整MyBatis CRUD工程
下载地址:https://files.cnblogs.com/files/xiandedanteng/Person191005.rar pom.xml:这个文件主要是引入依赖 <project ...
- JavaWeb学习总结(转载)
JavaWeb学习总结(五十三)--Web应用中使用JavaMail发送邮件 JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 JavaWeb学习总结(五十 ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- 纯前端JSON文件编辑器[0]
准备工作 参考资料: FileReader(用来获取上传文件的数据) <download>(用来设置下载文件的名称) Blob(用来存储数据的一个容器) createObjectURL(用 ...
- angularjs的简单应用(一)
AngularJS是为了克服html在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了. AngularJS使用了不同的方法,它尝试去 ...
- 前端的数据库:IndexedDB 。 ps:入门
应用程序需要数据.对大多数Web应用程序来说,数据在服务器端组织和管理,客户端通过网络请求获取.随着浏览器变得越来越有能力,因此可选择在浏览器存储和操纵应用程序数据. 本文向你介绍名为IndexedD ...
- 演练5-5:Contoso大学校园管理系统5
Contoso University示例网站演示如何使用Entity Framework 5创建ASP.NET MVC 4应用程序. Entity Framework有三种处理数据的方式: Data ...
随机推荐
- Dangling Javadoc comment
Javadoc主要用于对类和方法的注释.Javadoc没有@file和@date的注解.Javadoc has no @file or @date tags. You should be taggin ...
- XML基本知识点——思维导图
如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/5dcd3224563939 有道云笔记图片链接 http://note.youdao.com/ ...
- Android -- UI布局管理,相对布局,线性布局,表格布局,绝对布局,帧布局
1. 相对布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- Codeforces Round #363 (Div. 2) A、B、C
A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- 摘录:Jetty 的工作原理以及与 Tomcat 的比较
引子:Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty ...
- scala学习手记23 - 函数值
scala的一个最主要的特性就是支持函数编程.函数是函数编程中的一等公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回值,甚至可以在其它函数中嵌套.这些高阶函数称为函数值. 举一个简单的例子 ...
- 前端分布引导插件IntroJs的使用
在用户第一次使用网站的时候,一般会提供新手引导的提示,提示用户重要的功能使用,实现方法比较多,但是有一点,屏幕的自适应问题,大多数自己写的实现方法无非就是一个div遮罩层,然后再需要指引的位置放置一张 ...
- 阿里云centOS7.4 nginx: [emerg] "server" directive is not allowed here in /etc/nginx/vhost/xxxxxx.conf:2
里云centOS7.4配置多个站点遇到的问题nginx: [emerg] "server" directive is not allowed here in /etc/nginx/ ...
- 地图Legend控件的使用
http://support.esrichina-bj.cn/2011/0318/1150.html
- 【scala】类的定义和单例对象
一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{ var sum = 0;//Scala默认关键字为public priv ...