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的更多相关文章

  1. Servlet(六):连接数据库,完整的CRUD

    Servlet的知识点大致讲完了,今天补充下与之相关的一些小知识,然后做一个完整的小例子. 一.MVC设计模式 1.MVC设计模式是什么? 在了解MVC之前,先聊聊Model1.Model2开发模式. ...

  2. SpringMVC+easyUI 分页,查询 (完整的CRUD)

    最终完毕CRUD的功能了,注意,这里会对前面有一些修改,UserController的listUser() 已经改写了,如今把所有整理一下吧. JSP: <%@ page language=&q ...

  3. [MyBatis]完整MyBatis CRUD工程

    下载地址:https://files.cnblogs.com/files/xiandedanteng/Person191005.rar pom.xml:这个文件主要是引入依赖 <project ...

  4. JavaWeb学习总结(转载)

    JavaWeb学习总结(五十三)--Web应用中使用JavaMail发送邮件      JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件     JavaWeb学习总结(五十 ...

  5. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

  6. 纯前端JSON文件编辑器[0]

    准备工作 参考资料: FileReader(用来获取上传文件的数据) <download>(用来设置下载文件的名称) Blob(用来存储数据的一个容器) createObjectURL(用 ...

  7. angularjs的简单应用(一)

    AngularJS是为了克服html在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了. AngularJS使用了不同的方法,它尝试去 ...

  8. 前端的数据库:IndexedDB 。 ps:入门

    应用程序需要数据.对大多数Web应用程序来说,数据在服务器端组织和管理,客户端通过网络请求获取.随着浏览器变得越来越有能力,因此可选择在浏览器存储和操纵应用程序数据. 本文向你介绍名为IndexedD ...

  9. 演练5-5:Contoso大学校园管理系统5

    Contoso University示例网站演示如何使用Entity Framework 5创建ASP.NET MVC 4应用程序. Entity Framework有三种处理数据的方式:  Data ...

随机推荐

  1. Boostnote:适合程序员的笔记软件【转】

    本文转载自:https://blog.csdn.net/u013553529/article/details/70306899 Boostnote:适合程序员的笔记软件 注意: Boostnote正在 ...

  2. [mongodb] WiredTiger Storage Engine

    今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解! 在mongodb3.2版本以后,wire ...

  3. [洛谷3041]视频游戏的连击Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...

  4. grable编译spring源码并导入eclipse

    1.下载安装gradle, spring 源码构建加入了gradle支持. gradle下载: http://www.gradle.org/downloads ,下载后设置环境变量: GRADLE_H ...

  5. tomcat官方下载连接——安装版&绿色版

    Tomcat绿色版Windows64位9.0.10 http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat- ...

  6. python学习笔记(异常处理)

    上次提到正则表达式 当未匹配到数据返回值 None 再使用 match.group 会出现异常 AttributeError 为了避免异常我改成“ match != None” 这次加入异常处理 #! ...

  7. oracle: 分割字符串,或者查找字段里面的关键字(关键字1,关键字2,关键字3)

    表中有一个字段:keyword, keyword里面的存储的字符一般是:[关键字1,关键字2,关键字3] 那么,在搜索的时候,不能用like 来模糊查询,因为这样会,多查询出一下不相干的关键字, hi ...

  8. 如何用VC编写供PB调用的DLL

    和编写一般的DLL方法相同,需要注意以下两点: (1)调用约定 c函数有_stdcall._cdecl._fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者) ...

  9. UVALive 4270 Discrete Square Roots

    题目描述: 在已知一个离散平方根的情况下,按照从小到大的顺序输出其他所有的离散平方根. 在模n意义下,非负整数x的离散平方根是满足0<=r<n且r2=x(mod n)的整数r. 解题思路: ...

  10. 51nod 1119 组合数,逆元

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119 1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:13 ...