Java/JavaWeb连接数据库完成增删改查(胎教级教程)

目录

项目展示:(增删改查)环境:Tomcat 8.5

1.数据库结构

        1.1 创建数据库(source_db)

        1.2 创建数据表(tb_source),结构如下。

2.项目文件结构

3.jar包导入

4.创建JDBC数据库访问类:JDBCutil

5.创建实体类:Source

6.创建数据访问层:SourceDao

7.创建业务逻辑层:SourceService

8.HTTP响应:SourceServlet

9.index.jsp

10.add.jsp

11.update.jsp

12.web.xml

整体项目文件:


项目展示:(增删改查)环境:Tomcat 8.5

1.数据库结构

        1.1 创建数据库(source_db)

        1.2 创建数据表(tb_source),结构如下。

字段名说明字段类型长度备注
id编号int主键,自增,增量为 1
name名称varchar50不能为空
type类型varchar20不能为空
uploadDate上传日期date不能为空

2.项目文件结构

3.jar包导入

下载链接:

https://download.csdn.net/download/kai212/87724319https://download.csdn.net/download/kai212/87724319

4.创建JDBC数据库访问类:JDBCutil

package com.ydhl.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCutil {

	private static final String QD = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://localhost:3306/source_db?serverTimezone=GMT%2B8";
	private static final String USE = "root";
	private static final String PAS = "root";

	static {
		try {
			Class.forName(QD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {
		Connection con = null;
		try {
			con = DriverManager.getConnection(URL, USE, PAS);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;
	}

	public static void close(ResultSet rs, PreparedStatement st, Connection con) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (st != null) {
				st.cancel();
			}
			if (con != null) {
				con.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

5.创建实体类:Source

package com.ydhl.entity;

public class Source {
	private int id;
	private String name;
	private String type;
	private String uploadDate;

	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 getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getUploadDate() {
		return uploadDate;
	}

	public void setUploadDate(String uploadDate) {
		this.uploadDate = uploadDate;
	}

	public Source() {

	}

	public Source(int id, String name, String type, String uploadDate) {
		super();
		this.id = id;
		this.name = name;
		this.type = type;
		this.uploadDate = uploadDate;
	}

}

6.创建数据访问层:SourceDao

package com.ydhl.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.ydhl.entity.Source;
import com.ydhl.util.JDBCutil;

public class SourceDao {

    // 创建connection对象
    private Connection con = null;
    // 创建PreparedStatement对象
    private PreparedStatement st = null;
    // 创建resultSet对象
    private ResultSet rs = null;

    //查询
    public List<Source> Query(String name) {
        // 创建一个arraylist集合 填充数据库表数据
        ArrayList<Source> list = new ArrayList<>();
        try {
            // 获取数据库连接对象
            con = JDBCutil.getConnection();
            String sq = "SELECT * FROM tb_source WHERE name LIKE ?";
            st = con.prepareStatement(sq);// 将sql存放入小汽车中搬运
            st.setString(1, "%" + name + "%");
            rs = st.executeQuery();// 获取结果
            // 使用while循环读取resultset数据
            while (rs.next()) {
                Source sr = new Source();
                sr.setId(rs.getInt("id"));
                sr.setName(rs.getString("name"));
                sr.setType(rs.getString("type"));
                sr.setUploadDate(rs.getString("uploadDate"));
                // 将对象保存到对应arraylist
                list.add(sr);
            }
        } catch (SQLException e) {
            // 异常抛出
            e.printStackTrace();
        } finally {
            // 使用之后关闭连接
            JDBCutil.close(rs, st, con);
        }
        // 返回最终结果
        return list;
    }

    // 删除
    public boolean del(int id) {
        try {
            // 获取对应数据库connection对象
            con = JDBCutil.getConnection();
            // 删除数据库sql
            String sql = "delete from tb_source where id=?";
            st = con.prepareStatement(sql);
            // 设置删除ID
            st.setInt(1, id);
            // 执行sql 并且返回结果
            return st.executeUpdate() > 0;
        } catch (SQLException e) {
            // 抛出异常
            e.printStackTrace();
        } finally {
            // 关闭连接
            JDBCutil.close(rs, st, con);
        }
        // 如果异常默认返回false
        return false;
    }

    // 添加
    public boolean add(Source source) {
        try {
            // 根据对应数据库获取对应连接
            con = JDBCutil.getConnection();
            // 新增sql
            String sql = "INSERT INTO tb_source(name, type, uploadDate) VALUES (?, ?, ?)";
            // 传入sql值
            st = con.prepareStatement(sql);
            st.setString(1, source.getName());
            st.setString(2, source.getType());
            st.setString(3, source.getUploadDate());
            // 执行sql并且返回结果
            return st.executeUpdate() > 0;
        } catch (SQLException e) {
            // 抛出异常
            e.printStackTrace();
        } finally {
            // 关闭连接
            JDBCutil.close(rs, st, con);
        }
        // 如果异常则默认返回false
        return false;
    }

    // 根据id查询对应数据
    public Source Modifysel(int id) {
        try {
            con = JDBCutil.getConnection();
            // 根据id查询sql
            String sql = "SELECT * FROM tb_source where id=?";
            st = con.prepareStatement(sql);// 将sql存放入小汽车中搬运
            // 替换?值
            st.setInt(1, id);
            // 执行查询结果
            rs = st.executeQuery();// 获取结果
            // 绑定对象
            while (rs.next()) {
                Source sr = new Source();
                sr.setId(rs.getInt("id"));
                sr.setName(rs.getString("name"));
                sr.setType(rs.getString("type"));
                sr.setUploadDate(rs.getString("uploadDate"));
                return sr;
            }
        } catch (SQLException e) {
            // 抛出异常
            e.printStackTrace();
        } finally {
            // 关闭连接
            JDBCutil.close(rs, st, con);
        }
        // 如果出现异常则默认抛出null
        return null;
    }

    // 修改方法
    public boolean modify(Source source) {
        try {
            con = JDBCutil.getConnection();
            // 修改sql
            String sql = "UPDATE tb_source SET name=?, type=?, uploadDate=? WHERE id=?";
            // 填充sql
            st = con.prepareStatement(sql);
            // 替换参数
            st.setString(1, source.getName());
            st.setString(2, source.getType());
            st.setString(3, source.getUploadDate());
            st.setInt(4, source.getId());
            // 返回结果
            return st.executeUpdate() > 0;
        } catch (SQLException e) {
            // 抛出异常
            e.printStackTrace();
        } finally {
            // 关闭连接
            JDBCutil.close(rs, st, con);
        }
        // 如果异常则默认返回false
        return false;
    }

}

7.创建业务逻辑层:SourceService

package com.ydhl.service;

import java.util.List;

import com.ydhl.dao.SourceDao;
import com.ydhl.entity.Source;

public class SourceService {

	// 查询-模糊查询
	public List<Source> Query(String name) {
		// 调用数据访问层
		SourceDao dao = new SourceDao();
		return dao.Query(name);
	}

	// 删除方法
	public boolean del(int id) {
		SourceDao dao = new SourceDao();
		return dao.del(id);
	}

	// 新增方法
	public boolean add(Source source) {
		SourceDao dao = new SourceDao();
		return dao.add(source);
	}

	//根据id查询对应数据 方面后续修改
	public Source Modifysel(int id) {
		SourceDao dao = new SourceDao();
		return dao.Modifysel(id);
	}

	//修改方法
	public boolean Modify(Source source) {
		SourceDao dao = new SourceDao();
		return dao.modify(source);
	}

}

8.HTTP响应:SourceServlet

package com.ydhl.servlet;

import java.io.IOException;
import java.util.ArrayList;

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 com.ydhl.entity.Source;
import com.ydhl.service.SourceService;

@WebServlet("/SourceServlet")
public class SourceServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 也是可以直接获取参数的
        // 设置编码字符集
        req.setCharacterEncoding("utf-8");
        // 假设我们的参数请求中都有一个标记
        String action = req.getParameter("action");
        if (action == null) {
            action = "";// 这是查询请求中没有action参数
        }
        switch (action) {
            case "":
                Query(req, resp);
                break;
            case "del":
                // 如果标记是del 代表删除
                del(req, resp);
                break;
            case "add":
                // 如果标记是add 代表新增
                add(req, resp);
                break;
            case "Modifysel":
                // 如果标记是Modifysel 代表根据id查询对应对象
                Modifysel(req, resp);
                break;
            case "modify":
                // 获取页面参数直接修改对应数据
                Modify(req, resp);
                break;
        }
    }

    protected void Query(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        SourceService service = new SourceService();// 创建业务逻辑层对象
        String name = request.getParameter("name");
        if (name == null) {
            name = "";
        }
        ArrayList<Source> list = (ArrayList<Source>) service.Query(name);// 调用业务逻辑层方法
        // 将数据保存到request作用域中 稍后配合转发请求携带数据到页面
        request.setAttribute("list", list);
        // 使用转发请求 携带查询到的数据到页面当中以方便获取
        request.getRequestDispatcher("/index.jsp").forward(request, response);// 转发跳转页面
    }

    // 根据id删除对应数据
    protected void del(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取唯一的id
        int id = Integer.parseInt(request.getParameter("id"));
        SourceService service = new SourceService();// 创建业务逻辑层对象
        // 执行删除方法
        service.del(id);
        // 重定向到对应查询工作 删除之后需要重新查询
        response.sendRedirect("source");
    }

    // 新增方法
    protected void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取所有的参数
        String name = request.getParameter("name");
        String type = request.getParameter("type");
        String uploadDate = request.getParameter("uploadDate");
        // 将参数保存到对应person对象中
        Source person = new Source(0, name, type, uploadDate);
        SourceService service = new SourceService();// 创建业务逻辑层对象
        // 执行对应新增操作
        service.add(person);
        // 重定向 重新查询数据 并且跳转首页
        response.sendRedirect("source");
    }

    // 根据id查询对应数据
    protected void Modifysel(HttpServletRequest request, HttpServletResponse
            response)
            throws ServletException, IOException {
        // 获取所有的参数
        int id = Integer.parseInt(request.getParameter("id"));
        SourceService service = new SourceService();// 创建业务逻辑层对象
        // 根据id查询到单个对应数据
        Source sr = service.Modifysel(id);
        // 将数据保存到对应的request域中
        request.setAttribute("Source", sr);
        // 转发数据
        request.getRequestDispatcher("update.jsp").forward(request, response);//转发跳转页面
    }

    // 获取用户修改后的数据
    protected void Modify(HttpServletRequest request, HttpServletResponse
            response)
            throws ServletException, IOException {
        // 获取所有的参数 然后传入修改方法
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        String type = request.getParameter("type");
        String uploadDate = request.getParameter("uploadDate");
        //和新增一样 保存到对应方法中
        Source sr = new Source(id, name, type, uploadDate);
        // 创建业务逻辑层对象
        SourceService service = new SourceService();
        // 调用修改方法
        service.Modify(sr);
        // 重定向 重新查询数据
        response.sendRedirect("source");
    }
}

9.index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>前端素材管理系统</title>
</head>
<body>
<form style="padding-bottom: 10px;">
    <fieldset>
        <legend>搜索</legend>
        名称:<input type="text" name="name" id="">
        <input type="submit" value="搜索">
    </fieldset>
</form>
<table border="1" style="width: 100%;">
    <tr style="text-align: center; background-color:#ffaa00;">
        <th>编号</th>
        <th>名称</th>
        <th>类型</th>
        <th>上传时间</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list}" var="Source">
        <tr>
            <td>${Source.id }</td>
            <td>${Source.name }</td>
            <td>${Source.type }</td>
            <td>${Source.uploadDate }</td>
            <td>
                <a href="/Source/SourceServlet?action=del&id=${Source.id}"
                   onclick="return confirm('您确定删除该人员信息')">删除</a>
                <a href="/Source/SourceServlet?action=Modifysel&id=${Source.id}">修改</a>
            </td>
        </tr>
    </c:forEach>
</table>
<div style="float: right;">
    <a href="add.jsp">新增</a>
    <span>共
			<c:out value="${list.size()}"/>
			条数据</span>
</div>
</body>
</html>

10.add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>add</title>
</head>
<body>
<form action="source" method="post">
    <table>
        <tr>
            <td>名称</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td>类型</td>
            <td><input type="text" name="type"></td>
        </tr>
        <tr>
            <td>上传时间</td>
            <td><input type="date" name="uploadDate"></td>
        </tr>
        <tr>
            <td><input type="submit" value="添加"></td>
            <td><input type="reset" value="重置"></td>
            <td><input type="hidden" value="add" name="action"></td>
        </tr>
    </table>
</form>
</body>
</html>

11.update.jsp

<%--
  Created by IntelliJ IDEA.
  User: 一念陨星
  Date: 2023/4/24
  Time: 15:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>update</title>
</head>
<body>
<form action="source" method="post">
    <table>
        <tr>
            <td>名称:</td>
            <td><input type="text" name="name" value=${Source.name }></td>
        </tr>
        <tr>
            <td>类型:</td>
            <td><input type="text" name="type" value=${Source.type }>
            </td>
        </tr>
        <tr>
            <td>上传时间:</td>
            <td><input type="date" name="uploadDate"
                       value=${Source.uploadDate }></td>
        </tr>
        <tr>
            <td><input type="submit" value="修改"/></td>
            <td><input type="reset" value="删除"/></td>
            <td><input type="hidden" value="modify" name="action">
                <input type="hidden" value="${Source.id}" name="id"></td>
        </tr>
    </table>
</form>
</body>
</html>

12.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         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>SourceServlet</servlet-name>
        <servlet-class>com.ydhl.servlet.SourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SourceServlet</servlet-name>
        <url-pattern>/source</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>source</welcome-file>
    </welcome-file-list>


</web-app>

整体项目文件:

https://download.csdn.net/download/kai212/87724913https://download.csdn.net/download/kai212/87724913

### 回答1: JavaWeb连接数据库实现增删改查,需要使用Java语言编写代码,通过JDBC驱动连接数据库,使用SQL语句实现对数据库的操作。 具体步骤如下: 1. 导入JDBC驱动包,可以使用Maven或手动导入。 2. 在Java代码中使用JDBC驱动连接数据库,获取数据库连接对象。 3. 使用SQL语句实现对数据库的增删改查操作,可以使用PreparedStatement或Statement对象执行SQL语句。 4. 执行SQL语句后,可以通过ResultSet对象获取查询结果。 5. 最后,关闭数据库连接对象和ResultSet对象。 需要注意的是,JavaWeb连接数据库时,需要配置数据库连接信息,包括数据库URL、用户名、密码等。同时,为了防止SQL注入攻击,需要使用PreparedStatement对象预编译SQL语句,避免直接拼接SQL语句。 ### 回答2: JavaWeb连接数据库实现增删改查Web开发中非常常见的任务,它涉及到Java连接数据库,编写SQL语句,以及将数据渲染到用户界面的流程。下面是实现增删改查的基本步骤: 一、连接数据库 连接数据库主要是通过JDBC来完成,需要导入相应的JDBC驱动包。在代码中可以使用以下语句来连接数据库: 1. 加载JDBC驱动 ```java Class.forName("com.mysql.jdbc.Driver"); ``` 2. 建立数据库连接 ```java String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, username, password); ``` 其中url是数据库的地址,username和password是连接数据库时的凭证,根据实际情况进行设置。 二、增加数据 实现添加数据功能需要使用SQL的INSERT语句,示例代码如下: ```java String sql = "INSERT INTO user(name, age, address) VALUES(?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "张三"); pstmt.setInt(2, 20); pstmt.setString(3, "北京"); pstmt.executeUpdate(); ``` 通过PreparedStatement类实现对数据库的操作,其中?是占位符,表示实际值在执行代码时指定,这样可以避免SQL注入的风险。 三、删除数据 实现删除数据功能需要使用SQL的DELETE语句,示例代码如下: ```java String sql = "DELETE FROM user WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); pstmt.executeUpdate(); ``` 同样使用PreparedStatement类实现对数据库的操作,表示删除ID为1的数据。 四、修改数据 实现修改数据功能需要使用SQL的UPDATE语句,示例代码如下: ```java String sql = "UPDATE user SET name = ?, age = ?, address = ? WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "李四"); pstmt.setInt(2, 30); pstmt.setString(3, "上海"); pstmt.setInt(4, 2); pstmt.executeUpdate(); ``` 同样使用PreparedStatement类实现对数据库的操作,表示将ID为2的数据的信息修改为新的信息。 五、查询数据 实现查询数据功能需要使用SQL的SELECT语句,示例代码如下: ```java String sql = "SELECT * FROM user"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); System.out.println(id + "\t" + name + "\t" + age + "\t" + address); } ``` 通过ResultSet类进行查询结果集的操作,遍历结果集中的每一行数据,并输出到控制台。 六、关闭数据库连接 通过在finally语句块中调用关闭连接的方法来关闭连接,防止数据库连接过多,导致系统崩溃,代码如下: ```java if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } ``` 以上就是使用JavaWeb连接数据库实现增删改查的基本步骤,通过这些基础操作可以实现复杂的业务逻辑,完成Web应用程序的开发。 ### 回答3: JavaWeb是一种基于Java语言的Web开发框架,与数据库连接实现增删改查JavaWeb开发常见的业务需求之一。以下是实现步骤: 1. 导入jdbc驱动包,使用反射技术加载jdbc驱动类。 2. 配置数据库连接参数,包括数据库的url、用户名、密码等。 3. 使用jdbc提供的API创建连接对象,连接数据库。 4. 获取一个Statement执行对象,通过Statement对象执行SQL语句,实现增、删、改、查等操作。 5. 关闭连接和Statement对象,释放相应的资源。 在具体实现过程中,还需要考虑如何防止SQL注入攻击,这可以通过使用PreparedStatement对象来解决。下面是一个示例代码,展示如何使用JavaWeb连接数据库实现增删改查。 1. 导入jdbc驱动包 在项目源代码目录下的lib文件夹中添加对应版本的jdbc驱动包。 2. 加载jdbc驱动类 ```java Class.forName("com.mysql.jdbc.Driver"); //加载MySQL驱动类 ``` 3. 配置数据库连接参数 ```java String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"; String user = "root"; String password = "123456"; ``` 4. 创建连接对象 ```java Connection conn = DriverManager.getConnection(url, user, password); ``` 5. 创建Statement执行对象 ```java Statement stmt = conn.createStatement(); ``` 6. 实现增、删、改、查操作 ```java //增 String insertSql = "insert into user (name, age) values ('张三', 20)"; stmt.executeUpdate(insertSql); //删 String deleteSql = "delete from user where name='张三'"; stmt.executeUpdate(deleteSql); //改 String updateSql = "update user set age=21 where name='张三'"; stmt.executeUpdate(updateSql); //查 String selectSql = "select * from user"; ResultSet rs = stmt.executeQuery(selectSql); while(rs.next()){ System.out.println(rs.getString("name") + " " + rs.getInt("age")); } ``` 7. 关闭连接和Statement对象 ```java rs.close(); stmt.close(); conn.close(); ``` 综上,通过以上步骤就可以实现JavaWeb连接数据库实现增删改查的操作。在实际项目开发中,需要更加细致、全面地处理异常和错误,保证项目的安全性和稳定性。
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一念陨星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值