第四篇——JDBC操作資料庫之修改資料
阿新 • • 發佈:2019-02-18
使用JDBC修改資料庫中的資料,其操作方法是和新增資料差不多的,只不過在修改資料的時候還要用到UPDATE語句來實現的,例如:把圖書資訊id為1的圖書數量改為100,其sql語句是:update book set bookCount=100 where id=1。在實際開發過程中,通常會由程式傳遞SQL語句中的引數,所以修改資料也通常使用PreparedStatement物件進行操作。
2、在第三篇基礎上繼續實現功能——第四篇JDBC操作資料庫之修改資料。
一、bookList.jsp
1.新增<td><a href="<%=request.getContextPath()%>/bookUpdate?id=${bookitem.id}">修改</a></td>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="com.entity.*" %> <% 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>圖書列表</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="css/bookList.css"> </head> <body> <form action="" method="post"> <table width="80%" align="center"> <div class="list">圖書列表</div> <ul> <li><a href="bookAdd.jsp">新增圖書</a> </li> <li>xxx</li> <li>xxx</li> <li>xxx</li> </ul> <tr> <td>圖書編號</td> <td>圖書名稱</td> <td>圖書價格</td> <td>圖書數量</td> <td>圖書作者</td> <td>圖書修改</td> <td>圖書刪除</td> </tr> <c:forEach var="bookitem" items="${booklist}"> <tr> <td>${bookitem.id}</td> <td>${bookitem.name}</td> <td>${bookitem.price}</td> <td>${bookitem.bookCount}</td> <td>${bookitem.author}</td> <td><a href="<%=request.getContextPath()%>/BookUpdate?id=${bookitem.id}">修改</a></td> <td>xx</td> </tr> </c:forEach> </table> </form> </body> </html>
二、BookUpdate.java
1.根據input標籤name屬性獲取值
2.呼叫模型----呼叫查詢方法-->根據Id
/** * Created by Ray on 2018/3/11 0011. **/ public class BookUpdate extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //根據input name獲取值 int id = Integer.parseInt(request.getParameter("id")); //呼叫模型 BookModel BookModel = new BookModel(); //呼叫查詢方法(根據id),返回booklist集合 List booklist = BookModel.listId(id); //不同頁面間傳遞,傳遞一次後,request失去作用 request.setAttribute("booklist",booklist); //request請求,不會改變路徑 request.getRequestDispatcher("/bookUpdate.jsp").forward(request,response); } }
三、bookUpdate.jsp
1.新增<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
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>修改圖書資訊</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>
<form action="<%=request.getContextPath()%>/BookDoUpdate" method="post">
<table align="center">
<div align="center" style="font-size: 36px;font-weight: bold">修改列表</div>
<c:forEach var="bookitem" items="${booklist}">
<tr>
<td>圖書編號:</td>
<td><input type="text" name="id" value="${bookitem.id}"></td>
</tr>
<tr>
<td>圖書名稱:</td>
<td><input type="text" name="name" value="${bookitem.name}"></td>
</tr>
<tr>
<td>圖書價格:</td>
<td><input type="text" name="price" value="${bookitem.price}"></td>
</tr>
<tr>
<td>圖書數量:</td>
<td><input type="text" name="bookCount" value="${bookitem.bookCount}"></td>
</tr>
<tr>
<td>圖書作者:</td>
<td><input type="text" name="author" value="${bookitem.author}"></td>
</tr>
</c:forEach>
<tr>
<td><input type="submit" value="修改"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
四、BookDoUpdate.java
1.根據input標籤name屬性獲取值
2.呼叫模型----呼叫更新方法
package com.control;
import com.model.BookModel;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by Ray on 2018/3/11 0011.
**/
public class BookDoUpdate extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//根據input name獲取值
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
double price = Double.parseDouble(request.getParameter("price"));
int bookCount = Integer.parseInt(request.getParameter("bookCount"));
String author = request.getParameter("author");
//呼叫模型
BookModel BookModel = new BookModel();
//呼叫更新方法
BookModel.updateBook(id,name,price,bookCount,author);
//response重定向改變路徑
response.sendRedirect(request.getContextPath() + "/BookList");
}
}
五、BookModel.java
1.根據id獲取資訊listId(int id)
2.修改圖書資訊updateBook(int id,String name,double price,int bookCount,String author)
package com.model;
import com.dbutil.Dbconn;
import com.entity.Book;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ray on 2018/3/11 0011.
**/
public class BookModel {
Dbconn Dbconn = new Dbconn();
Connection conn = null;
PreparedStatement ps;
ResultSet rs;
/**
* @Author: Ray
* @Date: 2018/3/11 0011
* @Description: 查詢所有圖書資訊
* @Return: booklist
*/
public List<Book> bookList(){
//建立booklist集合
List booklist = new ArrayList();
Book Book = null;
try{
//建立Connection連線
conn = Dbconn.getConnection();
//查詢所有圖書資訊的sql語句
String sql = "select * from booktable";
//獲取PreparedStatement
ps = conn.prepareStatement(sql);
//執行查詢
rs = ps.executeQuery();
//判斷游標向後移動,並判斷是否有效
while (rs.next()){
//例項化Book物件
Book = new Book();
//對id屬性賦值
Book.setId(rs.getInt("id"));
//對name屬性賦值
Book.setName(rs.getString("name"));
//對price屬性賦值
Book.setPrice(rs.getDouble("price"));
//對bookCount屬性賦值
Book.setBookCount(rs.getInt("bookCount"));
//對author屬性賦值
Book.setAuthor(rs.getString("author"));
//將book物件新增到集合中
booklist.add(Book);
}
//關閉連線
Dbconn.closeConnection(conn,ps,rs);
}catch (Exception e){
e.printStackTrace();
}
//返回booklist集合
return booklist;
}
/**
* @Author: Ray
* @Date: 2018/3/11 0011
* @Description: 新增圖書資訊
* @Return:
*/
public void addBook(int id,String name,double price,int bookCount,String author){
try{
//建立Connection連線
conn = Dbconn.getConnection();
//新增圖書資訊的sql語句
String sql = "insert into booktable(id,name,price,bookCount,author) values(?,?,?,?,?)";
//獲取PrepareStatement
ps = conn.prepareStatement(sql);
//對佔位符進行賦值
ps.setInt(1,id);
ps.setString(2,name);
ps.setDouble(3,price);
ps.setInt(4,bookCount);
ps.setString(5,author);
//執行更新,返回更新鎖影響的行數
int row = ps.executeUpdate();
if(row > 0){
System.out.println("新增資料成功");
}
ps.close();
conn.close();
}catch (Exception e){
System.out.println("新增資料失敗");
e.printStackTrace();
}
}
/**
* @Author: Ray
* @Date: 2018/3/11 0011
* @Description: 根據Id查詢圖書資訊
* @Return: booklist集合
*/
public List<Book> listId(int id){
//建立booklist集合
List booklist = new ArrayList();
Book Book = null;
try{
//建立Connection 連線
conn = Dbconn.getConnection();
//根據id查詢圖書資訊的sql語句
String sql = "select * from booktable where id = ?";
//建立PreparedStatement
ps = conn.prepareStatement(sql);
//對佔位符進行賦值
ps.setInt(1,id);
//執行查詢
rs = ps.executeQuery();
//判斷游標向後移動,並判斷是否有效
while(rs.next()){
Book = new Book();
Book.setId(rs.getInt("id"));
Book.setName(rs.getString("name"));
Book.setPrice(rs.getDouble("price"));
Book.setBookCount(rs.getInt("bookCount"));
Book.setAuthor(rs.getString("author"));
booklist.add(Book);
}
}catch (Exception e){
e.printStackTrace();
}
return booklist;
}
/**
* @Author: Ray
* @Date: 2018/3/11 0011
* @Description: 修改圖書資訊
* @Return:
*/
public void updateBook(int id,String name,double price,int bookCount,String author){
try{
//建立Connection連線
conn = Dbconn.getConnection();
//更新圖書資訊的sql語句
String sql = "update booktable set name=?,price=?,bookCount=?,author=? where id=?";
//獲取PreparedStatement
ps = conn.prepareStatement(sql);
//對佔位符進行賦值
ps.setString(1,name);
ps.setDouble(2,price);
ps.setInt(3,bookCount);
ps.setString(4,author);
ps.setInt(5,id);
//執行更新
int row = ps.executeUpdate();
//判斷是否有效
if(row > 0){
System.out.println("修改資料成功");
}
//關閉連線
ps.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
六、web.xml
這個很關鍵,不能出錯,否則訪問會出現404錯誤
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>BookList</servlet-name>
<servlet-class>com.control.BookList</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookList</servlet-name>
<url-pattern>/BookList</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookAdd</servlet-name>
<servlet-class>com.control.BookAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookAdd</servlet-name>
<url-pattern>/BookAdd</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookUpdate</servlet-name>
<servlet-class>com.control.BookUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookUpdate</servlet-name>
<url-pattern>/BookUpdate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDoUpdate</servlet-name>
<servlet-class>com.control.BookDoUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDoUpdate</servlet-name>
<url-pattern>/BookDoUpdate</url-pattern>
</servlet-mapping>
</web-app>
七、頁面效果
ok!