使用JDBC通过网页去完成数据库表的增删改查
对于刚入门JavaWeb的人来说,想要一上来就开发一个管理系统可能会有些费力,而一个管理系统的主要功能及实现逻辑其实就是通过网页对你的数据库进行增删改查。所以搞懂这里面的逻辑之后再去开发系统会更加得心应手。下面是我做的一个简单的工程项目,使用的是JDBC,非常适合初学者。话不多说,直接上素材吧。
运行效果图
数据表
create database studentsdb;
use studentsdb;
create table student(id int primary key auto_increment,name varchar(20),
teacher varchar(20),
age int,
score int
)
insert into student(name,teacher,age,score)values('xiaoming','Jack',20,80),('xiaohong','Mike',21,90),
('xiaodong','Bob',19,78),
('lihua','kite',21,99);
工具类JDBCUtils.java
package cn.twle.demo.Utils;
import java.sql.*;
public class JDBCUtils {
public static Connection getConnect() throws SQLException,ClassNotFoundException{
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/studentsdb?serverTimezone=GMT%2B8";
String username="root";
String password="root";
Connection conn= DriverManager.getConnection(url,username,password);
return conn;
}
public static void release(Statement stmt,Connection conn){
if(stmt!=null){
try{
stmt.close();
}catch (SQLException e){
e.printStackTrace();
}
stmt=null;
}
if (conn!=null){
try{
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
conn=null;
}
}
public static void release(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try{
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
rs=null;
}
release(stmt,conn);
}
}
StudentDao.java
package cn.twle.demo.Dao;
import cn.twle.demo.pojo.Student;
import cn.twle.demo.Utils.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
public class StudentDao {
public void insert(Student student) {
Connection conn = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnect();
String sql = "insert into student" + "(name,teacher,age,score) values" +
"(?,?,?,?)";
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, student.getName());
preparedStatement.setString(2, student.getTeacher());
preparedStatement.setInt(3, student.getAge());
preparedStatement.setInt(4, student.getScore());
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, preparedStatement, conn);
}
}
public ArrayList<Student> findAll(){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
ArrayList<Student> student=new ArrayList<>();
try{
conn= JDBCUtils.getConnect();
stmt=conn.createStatement();
String sql="select * from student";
rs=stmt.executeQuery(sql);
while (rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
String teacher=rs.getString("teacher");
int age=rs.getInt("age");
int score=rs.getInt("score");
student.add(new Student(id,name,teacher,age,score));
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.release(rs,stmt,conn);
}
return student;
}
public Student find(int id){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
Student student=null;
try{
conn= JDBCUtils.getConnect();
stmt=conn.createStatement();
String sql="select * from student where id=?";
rs=stmt.executeQuery(sql);
while (rs.next()) {
String name=rs.getString("name");
String teacher=rs.getString("teacher");
int age=rs.getInt("age");
int score=rs.getInt("score");
student=new Student(id,name,teacher,age,score);
}
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.release(rs,stmt,conn);
}
return student;
}
public boolean delete(int id) {
boolean flag=false;
Connection conn=null;
try {
conn = JDBCUtils.getConnect();
String sql="delete from student where id=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setInt(1, id);
flag=statement.executeUpdate()>0;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
public boolean update(Student student){
Connection conn = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
boolean flag=false;
try {
conn = JDBCUtils.getConnect();
String sql = "update student set name=?,teacher=?,age=?,score=? where id =?";
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, student.getName());
preparedStatement.setString(2, student.getTeacher());
preparedStatement.setInt(3, student.getAge());
preparedStatement.setInt(4, student.getScore());
flag=preparedStatement.executeUpdate()>0;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, preparedStatement, conn);
}
return flag;
}
}
实体类
package cn.twle.demo.pojo;
public class Student {
protected int id;
protected String name;
protected String teacher;
protected int age;
protected int score;
public Student(){};
public Student(String name,String teacher,int age,int score){
super();
this.name=name;
this.teacher=teacher;
this.age=age;
this.score=score;
}
public Student(int id,String name,String teacher,int age,int score){
super();
this.id=id;
this.name=name;
this.teacher=teacher;
this.age=age;
this.score=score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
StudentServlet.java
package cn.twle.demo.Servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.twle.demo.Dao.StudentDao;
import cn.twle.demo.pojo.Student;
import java.io.IOException;
import java.util.List;
@WebServlet("/")
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private StudentDao studentDao;
public void init(){studentDao=new StudentDao();}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
req.setCharacterEncoding("utf-8");
String action = req.getServletPath();
try{
switch (action) {
case "/new":
showNewForm(req, resp);
break;
case "/insert":
add(req, resp);
break;
case "/delete":
delete(req, resp);
break;
// 显示编辑表单的逻辑
case "/find":
find(req, resp);
break;
case "/update":
update(req, resp);
break;
default:
findAll(req,resp);
break;
}
}catch (Exception e){
throw new ServletException(e);
}
}
private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String teacher = request.getParameter("teacher");
int age = Integer.parseInt(request.getParameter("age"));
int score = Integer.parseInt(request.getParameter("score"));
Student newstudent = new Student(name, teacher, age, score); // 假设ID由数据库自动生成
studentDao.insert(newstudent);
response.sendRedirect("list");
}
private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String teacher = request.getParameter("teacher");
int age = Integer.parseInt(request.getParameter("age"));
int score = Integer.parseInt(request.getParameter("score"));
Student updatedStudent = new Student(id, name, teacher, age, score);
studentDao.update(updatedStudent);
response.sendRedirect("user-list.jsp");
}
private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
studentDao.delete(id);
response.sendRedirect("list");
}
// 新增方法以处理编辑页面的请求
private void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
Student existingStudent=studentDao.find(id);
RequestDispatcher dispatcher = request.getRequestDispatcher("user-form.jsp");
request.setAttribute("student", existingStudent);
dispatcher.forward(request, response);
}
private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Student> listStudent = studentDao.findAll();
request.setAttribute("listStudent", listStudent);
RequestDispatcher dispatcher = request.getRequestDispatcher("user-list.jsp");
dispatcher.forward(request, response);
}
private void showNewForm(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("user-form.jsp");
dispatcher.forward(request, response);
}
}
user-list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>User Management Application</title>
</head>
<body>
<br>
<div >
<!-- <div class="alert alert-success" *ngIf='message'>{{message}}</div> -->
<div>
<h3 >学生列表</h3>
<hr>
<div>
<a href="<%=request.getContextPath()%>/new">添加学生</a>
</div>
<br>
<table>
<tr>
<th>ID</th>
<th>姓名</th>
<th>指导老师</th>
<th>学生年龄</th>
<th>分数</th>
</tr>
<c:forEach var="student" items="${listStudent}">
<tr>
<td><c:out value="${student.id}" /></td>
<td><c:out value="${student.name}" /></td>
<td><c:out value="${student.teacher}" /></td>
<td><c:out value="${student.age}" /></td>
<td><c:out value="${student.score}"/></td>
<td><a href="find?id=<c:out value='${student.id}' />">查看</a>
<a href="delete?id=<c:out value='${student.id}' />">删除</a>
<a href="editStudent.jsp?id=<c:out value='${student.id}' />">修改</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>
user-form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<body>
<br>
<div>
<div>
<div>
<c:choose>
<c:when test="${student != null}">
<form action="update" method="post">
<h2>查看学生</h2>
<input type="hidden" name="id" value="${student.id}" />
</c:when>
<c:otherwise>
<form action="insert" method="post">
<h2>添加学生</h2>
</c:otherwise>
</c:choose>
<fieldset>
<label>学生姓名</label>
<input type="text" name="name" value="${student.name}" required="required" />
</fieldset>
<fieldset>
<label>学生指导老师</label>
<input type="text" name="teacher" value="${student.teacher}" />
</fieldset>
<fieldset>
<label>年龄</label>
<input type="text" name="age" value="${student.age}" />
</fieldset>
<fieldset>
<label>分数</label>
<input type="text" name="score" value="${student.score}" />
</fieldset>
<button type="submit" class="btn btn-success">保存</button>
</form> <!-- 注意这里表单的结束标签 -->
</div>
</div>
</div>
</body>
</html>
editStudent.jsp
<%@ page import="cn.twle.demo.pojo.Student" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>编辑学生信息</title>
</head>
<body>
<h1>编辑学生信息</h1>
<%-- 假设有一个Student对象在request范围内,包含要编辑的学生信息 --%>
<% Student student = (Student) request.getAttribute("student"); %>
<form action="update" method="post">
<input type="hidden" name="id" value="<%= (student != null) ? student.getId() : "" %>">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" value="<%= (student != null) ? student.getName() : "" %>">
<label for="teacher">教师:</label>
<input type="text" id="teacher" name="teacher" value="<%= (student != null) ? student.getTeacher() : "" %>">
<label for="age">年龄:</label>
<input type="text" id="age" name="age" value="<%= (student != null) ? student.getAge() : "" %>">
<label for="score">分数:</label>
<input type="text" id="score" name="score" value="<%= (student != null) ? student.getScore() : "" %>">
<input type="submit" value="保存更改">
</form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- <servlet>-->
<!-- <servlet-name>StudentServlet</servlet-name>-->
<!-- <servlet-class>cn.twle.demo.Servlet.StudentServlet</servlet-class>-->
<!-- </servlet>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>StudentServlet</servlet-name>-->
<!-- <url-pattern>/</url-pattern>-->
<!-- </servlet-mapping>-->
<welcome-file-list>
<welcome-file>user-list.jsp</welcome-file>
</welcome-file-list>
</web-app>