JavaWeb學習筆記6——JDBC連線MySql進行增刪改查
阿新 • • 發佈:2018-12-22
資料庫的增、刪、改、查是非常重要的操作,只要程式是關於資料庫的操作,無論程式大小,歸根結底都是這4種操作的使用。
連線MySql資料庫的過程:
1、註冊驅動
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
2、獲取資料庫連線
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/資料庫名?useUnicode=true&characterEncoding=UTF-8","資料庫賬號","資料庫密碼");
3、獲取Statement
Statement stmt = conn.createStatement();
4、返回Resultset
ResultSet rs = stmt.executeQuery(sql);
下面的例子就是對MySql資料庫進行連線並對tb_person表進行增、刪、改、查。
本例子資料庫名:databaseWeb,表名:tb_person
listPagedPerson.jsp
<%@page import="org.apache.jasper.tagplugins.jstl.core.Param"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%> <%@ page import="java.sql.Connection"%> <%@ page import="java.sql.ResultSet"%> <%@ page import="java.sql.Statement"%> <%@ page import="java.sql.DriverManager"%> <jsp:directive.page import="java.sql.Date" /> <jsp:directive.page import="java.sql.Timestamp" /> <jsp:directive.page import="java.sql.SQLException" /> <jsp:directive.page import="java.sql.PreparedStatement" /> <jsp:directive.page import="com.hedong.learn.Pagination" /> <style>a{text-decoration:none}</style> <%--去掉頁面超連結的註釋 --%> <form action="listPagedPerson.jsp" method=get> <input type="hidden" name="action" value="search"> <%--執行查詢操作 --%> <table align="center"> <tr> <td>姓名</td> <td><input type="text" name='name' value="${param.name}" ></td> <td><input type="submit" value="查詢"></td> </tr> </table> </form> <% final int pageSize = 5; //每頁10條資料 int pageNum = 1; //當前頁數,預設從第一頁開始 int pageCount = 1; //總頁數 int recordCount = 0; //總共有多少條記錄 String action=request.getParameter("action"); try { pageNum = Integer.parseInt(request.getParameter("pageNum"));//取當前頁數 } catch (Exception e) { } String sql = null; Connection conn = null; Statement stmt = null; ResultSet rs = null; try { if(!"search".equals(action)) { conn=Pagination.getConnection(); stmt = conn.createStatement(); sql = "SELECT count(*) FROM tb_person "; //查詢記錄總數的sql語句 rs = stmt.executeQuery(sql); if (rs.next()) { recordCount = rs.getInt(1);//獲得記錄總數 } pageCount = (recordCount + pageSize - 1) / pageSize;//計算總頁數 int startRecord = (pageNum - 1) * pageSize; //計算本頁記錄從stratRecord開始 sql = "Select * from tb_person LIMIT "+startRecord+","+pageSize;//此sql語句將記錄進行分頁 rs = stmt.executeQuery(sql); } else if("search".equals(action)) { String name=request.getParameter("name");//獲得要查詢的人的名字 conn=Pagination.getConnection(); sql="SELECT * FROM tb_person WHERE name='"+name+"'"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } %> <form action="operatePerson.jsp" method=get> <table bgcolor="#CCCCCC" cellspacing=1 cellpadding=5 width=100%> <tr bgcolor=#DDDDDD> <th>序號</th> <th>姓名</th> <th>英文名</th> <th>性別</th> <th>年齡</th> <th>生日</th> <th>備註</th> <th>操作</th> </tr> <% int count=1; while (rs.next()) { //獲得表中各資料 int id = rs.getInt("id"); int age = rs.getInt("age"); String name = rs.getString("name"); String englishName = rs.getString("english_name"); String sex = rs.getString("sex"); String description = rs.getString("description"); Date birthday = rs.getDate("birthday"); //將資料進行寫出 out.println("<tr bgcolor=#FFFFFF>"); out.println("<td>" + count + "</td>"); out.println("<td>" + name + "</td>"); out.println("<td>" + englishName + "</td>"); out.println("<td>" + sex + "</td>"); out.println("<td>" + age + "</td>"); out.println("<td>" + birthday + "</td>"); out.println("<td>" + description + "</td>"); out.println("<td>"); out.println("<a href='operatePerson.jsp?action=del&id=" + id + "' onclick='return confirm(\"確定刪除記錄?\");'>刪除</a>"); out.println("<a href='operatePerson.jsp?action=edit&id=" + id + "'>修改</a>"); out.println("</td"); out.println("</tr>"); count++; } %> <tr> <td colspan="2" align="left"><a href="addPerson.jsp">新建人員資料</a> <!-- 轉到新增人員的頁面 --></td> <td colspan="6" align="right"><%=Pagination.getPagination(pageNum, pageCount, recordCount, request.getRequestURI())%></td> </tr> </table> </form> <% } catch (SQLException e) { out.println("執行SQL:" + sql + "時發生異常:" + e.getMessage()); e.printStackTrace(); } finally { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } %> </body> </html>
addPerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html;charset=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"> <% String action = (String) request.getAttribute("action"); String id = (String) request.getAttribute("id"); String name = (String) request.getAttribute("name"); String englishName = (String) request.getAttribute("englishName"); String age = (String) request.getAttribute("age"); String sex = (String) request.getAttribute("sex"); String birthday = (String) request.getAttribute("birthday"); String description = (String) request.getAttribute("description"); boolean isEdit = "edit".equals(action);//判斷是修改還是新增操作 %> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title><%=isEdit ? "修改人員資料" : "新建人員資料"%></title> <style type="text/css"> body, td { font-size: 12px; } </style> </head> <body> <script type="text/javascript" src="js/calendar.js"></script> <!-- 日期日曆控制元件 --> <form action="operatePerson.jsp" method="post"> <input type="hidden" name="action" value="<%=isEdit ? "save" : "add"%>"> <input type="hidden" name="id" value="<%=isEdit ? id : ""%>"> <fieldset> <legend><%=isEdit ? "修改人員資料" : "新建人員資料"%></legend> <table align=center> <tr> <td>姓名</td> <td><input type="text" name="name" value="<%=isEdit ? name : ""%>" /></td> </tr> <tr> <td>英文名</td> <td><input type="text" name="englishName" value="<%=isEdit ? englishName : ""%>" /></td> </tr> <tr> <td>性別</td> <td><input type="radio" name="sex" value="男" id="sex_male" <%=isEdit && "男".equals(sex) ? "checked" : ""%> /> <label for="sex_male">男</label> <input type="radio" name="sex" value="女" id="sex_female" <%=isEdit && "女".equals(sex) ? "checked" : ""%> /> <label for="sex_female">女</label></td> </tr> <tr> <td>年齡</td> <td><input type="text" name="age" value="<%=isEdit ? age : ""%>" /></td> </tr> <tr> <td>生日</td> <td><input type="text" name="birthday" onfocus="setday(birthday)" value="<%=isEdit ? birthday : ""%>" /><img src="images/calendar.gif" onclick="setday(birthday);" /></td> </tr> <tr> <td>描述</td> <td><textarea name="description"><%=isEdit ? description : ""%></textarea></td> </tr> <tr> <td></td> <td><input type="submit" value="<%=isEdit ? "儲存":"新增人員資訊" %>" /></td> </tr> </table> </fieldset> </form> </body> </html>
operatePerson.jsp
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.SQLException"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
contentType="text/html;charset=UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.Date"%>
<%@ page import="com.hedong.learn.Pagination" %>
<%
//獲取各種資料
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String englishName = request.getParameter("englishName");
String age = request.getParameter("age");
String birthday = request.getParameter("birthday");
String sex = request.getParameter("sex");
String description = request.getParameter("description");
String action = request.getParameter("action");
//如果是新增操作
if ("add".equals(action)) {
Connection conn = null;
Statement stmt = null;
int result = 0;
String sql = "INSERT INTO tb_person(name,english_name,age,sex,birthday,description)" + "values('" + name
+ "','" + englishName + "','" + age + "','" + sex + "','" + birthday + "','" + description
+ "')";
try {
conn=Pagination.getConnection();
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
out.println("執行SQL\"" + sql + "\"時發生異常:" + e.getMessage());
return;
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
out.println("<html><style>body{font-size:12px;line-height:25px;}</style><body>");
out.println(result + "條記錄被新增到資料庫中。");
out.println("<a href='listPagedPerson.jsp'>返回人員列表</a>");
out.println("<br/><br/>執行的SQL語句為:<br/>" + sql);
return;
}
//如果是刪除操作
else if ("del".equals(action)) {
String id=request.getParameter("id");
String sql="delete from tb_person where id="+id;
Connection conn = null;
Statement stmt = null;
try {
conn=Pagination.getConnection();
stmt = conn.createStatement();
int result = stmt.executeUpdate(sql);
out.println("<html><style>body{font-size:12px;line-height:25px;}</style><body>");
out.println(result + "條記錄被刪除。");
out.println("<a href='listPagedPerson.jsp'>返回人員列表</a>");
out.println("<br/><br/>執行的SQL語句為:<br/>" + sql);
} catch (SQLException e1) {
out.println("執行SQL\"" + sql + "\"時發生異常:" + e1.getMessage());
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
}
//如果是修改
else if ("edit".equals(action)) {
String id = request.getParameter("id");
String sql = "SELECT * FROM tb_person WHERE id =" + id;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn=Pagination.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
request.setAttribute("id", rs.getString("id"));
request.setAttribute("name", rs.getString("name"));
request.setAttribute("englishName", rs.getString("english_name"));
request.setAttribute("age", rs.getString("age"));
request.setAttribute("sex", rs.getString("sex"));
request.setAttribute("birthday", rs.getString("birthday"));
request.setAttribute("description", rs.getString("description"));
request.setAttribute("action", action);
request.getRequestDispatcher("/addPerson.jsp").forward(request, response);
} else {
out.println("沒有找到id為" + id + "的記錄。");
}
} catch (SQLException e2) {
out.println("執行SQL\"" + sql + "\"時發生異常:" + e2.getMessage());
e2.printStackTrace();
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
}
//如果是儲存操作
else if ("save".equals(action)) {
String id = request.getParameter("id");
String sql = "UPDATE tb_person SET name=?,english_name=?,sex=?,age=?,birthday=?,description=? WHERE id=?";
Connection conn = null;
//用PreparedStatement,sql中可含有引數
PreparedStatement preStmt = null;
try {
conn=Pagination.getConnection();
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date(f.parse(birthday).getTime());
preStmt = conn.prepareStatement(sql);
preStmt.setString(1, name);
preStmt.setString(2, englishName);
preStmt.setString(3, sex);
preStmt.setInt(4, Integer.parseInt(age));
preStmt.setDate(5, d);
preStmt.setString(6, description);
preStmt.setInt(7, Integer.parseInt(id));
int result = preStmt.executeUpdate();//此時括號中無需填寫sql
out.println("<html><style>body{font-size:12px;line-height:25px;}</style><body>");
if (result == 0)
out.println("影響數目為0,修改失敗。");
else
out.println(result + "條記錄被修改。");
out.println("<a href='listPagedPerson.jsp'>返回人員列表</a>");
out.println("<br/><br/>執行的SQL語句為:<br/>" + sql);
} catch (SQLException e3) {
out.println("執行SQL\"" + sql + "\"時發生異常:" + e3.getMessage());
e3.printStackTrace();
} finally {
if (preStmt != null)
preStmt.close();
if (conn != null)
conn.close();
}
}
%>
下面是執行後的結果