使用JDBC修改数据库中的数据使用UPDATE语句实现
修改图书数量SQL语句:update tb_book set bookcount =100 where id =1;
在实际开发中通常都是程序传递SQL语句中的参数,所以修改数据也需要使用Preparedestatement对象执行操作。
在查询所有图书信息的页面中添加修改图书数量的表单,通过servlet修改数据库中图书数量
1)在book_list.jsp中添加修改图书数量的表单,表单提交地址设置为updateservlet其关键代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.List"%>
<%@page import="com.xhd.bean.Book"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>所有图书信息</title>
<style type="text/css">
form{margin: 0px;}
td{font-size: 12px;}
h2{margin: 2px}
</style>
<script type="text/javascript">
function check(form){
with(form){
if(bookCount.value == ""){
alert("请输入更新数量!");
return false;
}
if(isNaN(bookCount.value)){
alert("格式错误!");
return false;
}
return true;;
}
}
</script>
</head>
<body>
<table align="center" width="500" border="1" height="170" bordercolor="white" bgcolor="black" cellpadding="1" cellspacing="1">
<tr bgcolor="white">
<td align="center" colspan="6">
<h2>所有图书信息</h2>
</td>
</tr>
<tr align="center" bgcolor="#e1ffc1" >
<td><b>ID</b></td>
<td><b>图书名称</b></td>
<td><b>价格</b></td>
<td><b>数量</b></td>
<td><b>作者</b></td>
<td><b>修改数量</b></td>
</tr>
<%
// 获取图书信息集合
List<Book> list = (List<Book>)request.getAttribute("list");
// 判断集合是否有效
if(list == null || list.size() < 1){
out.print("没有数据!");
}else{
// 遍历图书集合中的数据
for(Book book : list){
%>
<tr align="center" bgcolor="white">
<td><%=book.getId()%></td>
<td><%=book.getName()%></td>
<td><%=book.getPrice()%></td>
<td><%=book.getBookCount()%></td>
<td><%=book.getAuthor()%></td>
<td>
<form action="UpdateServlet" method="post" οnsubmit="return check(this);">
<input type="hidden" name="id" value="<%=book.getId()%>">
<input type="text" name="bookCount" size="3">
<input type="submit" value="修 改">
</form>
</td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
在修改图书信息表单中主要包含两个属性信息,图书ID和图书数量bookcount,修改数量时要先确定图书ID号,
否则会修改所有的图书信息记录。
因为图书ID不需要显示,所以<input>type为hidden
2)创建修改图书数量的servlet对象,其名为“UpdateServlet”。
由于表单提交的请求时“post”所以在更新类中编写doPost方法处理修改图书信息的请求
package com.xhd.bean;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class UpdateServlet
*/
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.valueOf(request.getParameter("id"));
int bookCount = Integer.valueOf(request.getParameter("bookCount"));
try {
// 加载数据库驱动,注册到驱动管理器
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接字符串
String url = "jdbc:mysql://localhost:3306/db_database11";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "1234";
// 创建Connection连接
Connection conn = DriverManager.getConnection(url,username,password);
// 更新SQL语句
String sql = "update tb_book set bookcount=? where id=?";
// 获取PreparedStatement
PreparedStatement ps = conn.prepareStatement(sql);
// 对SQL语句中的第一个参数赋值
ps.setInt(1, bookCount);
// 对SQL语句中的第二个参数赋值
ps.setInt(2, id);
// 执行更新操作
ps.executeUpdate();
// 关闭PreparedStatement
ps.close();
// 关闭Connection
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// 重定向到FindServlet
response.sendRedirect("FindServlet");
}
}
HttpServletRequest接受的参数值为String类型,图书ID和图书数量我int类型,通过Integer类的valueOf()方法实现。
查看信息
修改之后页面重定向到FindServlet.jsp