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>