【javaEE】使用javaEE对数据库进行增删查改

发布于 2022-11-14  101 次阅读


假设我们现在有一个数据库内的表叫student的表,现在需要我们使用javaEE来对数据库内的student表进行增删改查功能的实现。

数据库内的数据如下

数据库的属性如下

注:id有设置自动递增

要对数据库内的数据进行最基本的增删改查。

首先先创建一个新的项目

把web文件夹创建出来

注意:需要tomcat(如果没有需要去官网下载Tomcat的包)

然后在web的WEB-INF目录下新建一个lib包

在然后找到刚刚下载的tomcat包下有一个lib包

在包内找到一下两个jar包

将两个jar包导入web目录下的lib包内(就是我们刚刚新建的包)

同时还需要一个mysql-connector-java-5.1.6-bin包

将三个包导入lib包内

然后右击添加

然后接下来看看Tomcat是否已经配置好了

点击此处

找到tomcat service(不是TomEE,图标一样,别搞错了)

然后找到tomcat的路径选择

再点一下右下角fix

然后右上角变成Tomcat就可以了

然后再次在src目录下新建目录Com包

再在Com目录下分别创建conn和servlet两个包

(名字无所谓,可以随意更改,但是最好见名知意)

在conn目录下新建一个Conn的class类

package Com.conn;

import java.sql.*;

public class Conn {
    //这个类提供两个函数,一个用于查询,一个用于增删改
    String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; //数据库名需要改成自己的
    String username="username"; //你的数据库用户名
    String password="123456"; //数据库密码
    Connection conn=null;
    Statement stmt=null;



    public Conn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection(url,username,pwd);
            stmt=conn.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    public ResultSet executeQuery(String sql){
        try {
            return stmt.executeQuery(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
    public int executeUpdate(String sql){
        try {
            return stmt.executeUpdate(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return 0;
    }


}

conn类负责连接数据库。

然后就可以去web文档下的index.jsp开始写前端了。

可以看得出,结构就html

直接像写网页一样,在body中写一个table表格来展示数据

接下来就该获取数据库中的数据并展示

(jsp中可以使用<%%>中写java代码)

这个时候就可以开始获取数据并展示出来了

此时代码如下

 <body>
    <%
      request.setCharacterEncoding("utf-8"); //设置编码
      Conn conn = new Conn(); //建立连接
      String sql ="select * from novel"; //查询所有的数据
      ResultSet rs =conn.executeQuery(sql);
    %>

      <table>
          <tr>
            <td>序号</td><td>书名</td><td>作者</td><td>价格</td>
          </tr>
        <%
          while(rs.next()){ //遍历出查询结果
        %>
        <tr>
          <td><%=rs.getString(1)%></td>
          <td><%=rs.getString(2)%></td>
          <td><%=rs.getString(3)%></td>
          <td><%=rs.getString(4)%></td>
        </tr>
        <%
          }
        %>

      </table>
  </body>

运行看看

成功把结果展示出来了

然后想增加数据怎么办呢?其实也很简单

只要知道操作的逻辑,就知道该怎么写了。

首先。添加是通过index界面的添加按钮,然后跳转到添加界面的jsp,jsp页面负责将需要用到的数据提交servlet,然后再通过servlet来获取我们输入的内容,再使用sql语句来对数据库进行更改。

index页面用于展示基本功能和信息,然后通过点击相关事件,然后跳转到相应的jsp然后再把数据提交到servlet处,servlet又通过sql语句来达到操作数据库的目的。

那么,我们现在index页面写一个按钮,然后新建一个新的jsp页面取名为AddNovel并把这个按钮指向这个新建的jsp页面

新建一个jsp(AddNovel)

然后吧index界面添加按钮也用form表单提交至改界面

然后在servlet包下新建一个servlet

然后再

WebServlet(name = "AddNovelServlet"后面添加urlPatterns,
如下

然后回到AddNovelS.jsp处用form表单提交数据

method后可以选择提交方式。可以选post也可以选get

但是记得要相应的位置进行下一步操作

如果form表单内用post方式提交那么servlet内也应该在dopost内,同理如果提交方式为get。那servlet内也有应该在doget内进行操作。

我们提交的方式是post,那么在servlet内也也在post中

<body>
    <form method="post" action="Add">
        书名<input type="text" name="name"><br>
        作者<input type="text" name="author"><br>
        价格<input type="text" name="price"><br>
        <input type="submit" value="提交">
    </form>
</body>

然后servlet的代码是

@WebServlet(name = "AddNovelServlet",urlPatterns = "/Add")
public class AddNovelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Conn conn=new Conn();
        request.setCharacterEncoding("UTF-8");

        //定义变量,接jsp传过来的值
        String name=request.getParameter("name");
        String author=request.getParameter("author");
        String price=request.getParameter("price");

        String sql="insert into novel(name,author,price) values('"+name+"','"+author+"','"+price+"')";
        conn.executeUpdate(sql);
        System.out.println(sql);
        response.sendRedirect("index.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

运行看看是否有问题

可以看出没有什么问题,输入的内容成功添加到了数据库内

那么添加功能就可以了。

接下来就是删除

依旧是之前那套逻辑。

先在index页面做出相应的点击事件

在价格后面多加一行操作行,用于专门的操作

然后再展示后面加一行删除

这里的a标签的delete?did之后再说

这里再新建一个servlet,命名为DeleteNovel

在DeleteNovelservlet页面的同样也在开头处写上urlurlPatterns="/delete"(这里写的名字要跟跳转那边名字像相同)

(这里的delete的servlet我命名错了,但是不影响)

然后再doget内写删除的逻辑,至于为什么是在doget,可以在doget和dopost分别写输出语句,然后运行看看。

在doget内写的的代码逻辑跟添加是时相同,servlet内其实就是考sql语句来进行对数据库操作

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //删除
        String did=request.getParameter("did");
        Conn conn=new Conn();
        conn.executeUpdate("delete from novel where id="+did);
        response.sendRedirect("index.jsp");
    }

依旧是定义一个变量did,然后获取did,这did就是之前上面说的,delete?之后传过来的值。这里定义的did也是为了来接这个传过来的值。

然后就是删除的sql语句。用拼接的方式来选择删哪一条。

然后就完成了。

去测试一下。

没有报错,所以删除功能也完成了。

这里之所以没有新建一个dele的jsp是因为删除不需要输入数值,直接获取id然后的通过sql语句删除即可。

接下来就到修改功能

逻辑也基本上跟添加相似,所以直接上index快速过(创建一个update.jsp和servlet)(所有相关代码在页尾

上面说了修改和添加很相似,那么就有不太一样的地方,不太一样的地方就中间的jsp页面

我们添加的界面是只有三个文本框让让我们输入,我们只需要把文本框内的内容跟sql语句拼接一下

而修改则是我们需要先原本的数据获取出来,然后再把原本的数据修改

所以我们需要先在jsp页面查找,就跟之前删除的时候利用id定位哪条数据一样,我们先在index页面获取到第几页数据的id然后再jsp搜索相关数据,最后再把数据展示出来,原本的数据被修改再把修改后的传到servlet。

所以修改update的jsp代码如下

<body>
<%
    Conn conn =new Conn();
    String mid=request.getParameter("mid");
    ResultSet resultSet=conn.executeQuery("select * from novel where id='"+mid+"'");
    resultSet.next();
%>
<form method="post" action="modify">

    书名<input type="text" name="name" value="<%=resultSet.getString(2)%>"><br>
    作者<input type="text" name="author" value="<%=resultSet.getString(3)%>"><br>
    价格<input type="text" name="price" value="<%=resultSet.getString(4)%>"><br>
    <input type="hidden" name="mid" value=<%=resultSet.getString(1)%> >
    <input type="submit" value="修改">
</form>
</body>

Updateservlet代码如下:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //写修改逻辑
        request.setCharacterEncoding("UTF-8");
        String mid=request.getParameter("mid");
        String name=request.getParameter("name");
        String author=request.getParameter("author");
        String price=request.getParameter("price");
        String sql="update novel set name='"+name+"',author='"+author+"',price='"+price+"' where id="+mid;
        System.out.printf(sql);
        Conn conn=new Conn();
        conn.executeUpdate(sql);
        response.sendRedirect("index.jsp");
    }

老规矩,试运行一下

没问题。

其实到这里增删改查已经完成了。

但是呢按条件查询呢?

其实也是有的。但是不打算说了,基本原理都差不读,接下来放完整代码

----------------------------------------------------分割线---------------------------------------------------------

Conn类

package Com.conn;

import java.sql.*;

public class Conn {
    //这个类提供两个函数,一个用于查询,一个用于增删改
    String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; //数据库名需要改成自己的
    String username="username"; //你的数据库用户名
    String password="123456"; //数据库密码
    Connection conn=null;
    Statement stmt=null;



    public Conn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection(url,username,pwd);
            stmt=conn.createStatement();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    public ResultSet executeQuery(String sql){
        try {
            return stmt.executeQuery(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
    public int executeUpdate(String sql){
        try {
            return stmt.executeUpdate(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return 0;
    }


}

index.jsp


<%@ page import="java.sql.*" %>
<%@ page import="com.util.Conn" %><%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2022/9/22
  Time: 14:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>小说列表</title>
    <script>
        //批量删除
        function DeleteIds(){

            var idinfo="";
            var ids =document.getElementsByName('id');
            for (var i =0;i<ids.length;i++){
                if (ids[i].checked){
                    idinfo+=ids[i].value+",";
                }
            }
            window.location="batchDel?id="+idinfo;

        }
    </script>
    <style>
        .css1{
            margin: auto;
            text-align: center;
            border: solid black 1px;


        }
        td{
            border: solid black 1px;
        }
    </style>
</head>
<body>





    <%
        //查询
        request.setCharacterEncoding("utf-8");
        Conn conn=new Conn();
        String sql ="select * from novel";
        String searchInfo =request.getParameter("searchInfo");
        //定义模糊查询
        String islike =request.getParameter("islike");
        String option =request.getParameter("option");

    //模糊查询
        if ("search".equals(request.getParameter("action"))&&!searchInfo.isEmpty()){
            if (islike==null){
                sql += " where "+option+" ='"+searchInfo+"'";
            }else{
                sql+= " where "+option+" like '%"+searchInfo+"%'";
            }

        }
        ResultSet rs=conn.executeQuery(sql);

    %>

<table class="css1">
    <caption>热门小说推荐</caption>
    <tr>
        <td colspan="6">
                <form method="post" action="index.jsp?action=search">
                搜索<input type="text" name="searchInfo" value="">
                <select name="option">
                    <option value="name ">书名</option>
                    <option value="author">作者</option>
                    <option value="price">价格</option>
                </select>
                模糊查询<input type="checkbox" name="islike" value="islike">
                <input type="submit" name="" value="提交">
            </form>
        </td>
    </tr>
    <tr>
    <td>复选</td><td>序号</td><td>书名</td><td>作者</td><td>价格</td><td>操作</td>
    </tr>
    <%
        while(rs.next()){
    %>
    <tr>

        <td><input type="checkbox" name="id" value=<%=rs.getString(1)%> class="ids"> </td>
        <td><%=rs.getString(1)%></td>
        <td><%=rs.getString(2)%></td>
        <td><%=rs.getString(3)%></td>
        <td><%=rs.getString(4)%></td>
        <td><a href=<%="delete?did="+rs.getString(1)%>>删除</a>
            <a href=<%="UpdataNovel.jsp?mid="+rs.getString(1)%>>修改</a>
        </td>

    </tr>
    <%
        }
    %>
    <tr>
       <%-- <td colspan="3"><a href="AddNovel.jsp">添加新书</a> </td>--%>
        <td colspan="3">
            <form action="AddNovel.jsp">
            <input type="submit" value="添加新书">
            </form>
        </td>
        <td colspan="3"><input type="button" value="批量删除" onclick="DeleteIds()"></td>
    </tr>
</table>
</body>
</html>

AddNovel.jsp

<%--
  Created by IntelliJ IDEA.
  User: misaki
  Date: 2022/9/28
  Time: 16:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加新书</title>
</head>
<body>
<form method="post" action="add">
    书名<input type="text" name="name"><br>
    作者<input type="text" name="author"><br>
    价格<input type="text" name="price"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
AddNovelServlet
package com.servlet;

import com.util.Conn;

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 java.io.IOException;

@WebServlet(name = "AddNovelServlet",urlPatterns = "/add")
public class AddNovelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //新增逻辑

        Conn conn=new Conn();
        request.setCharacterEncoding("UTF-8");

        String name=request.getParameter("name");
        String author=request.getParameter("author");
        String price=request.getParameter("price");

        String sql="insert into novel(name,author,price) values('"+name+"','"+author+"','"+price+"')";
        conn.executeUpdate(sql);
        System.out.println(sql);
        response.sendRedirect("index.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
DeleteNovelServlet
package com.servlet;

import com.util.Conn;

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 java.io.IOException;

@WebServlet(name = "DeleteNovelServlet",urlPatterns = "/delete")
public class DeleteNovelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //做删除操作
        String did=request.getParameter("did");
        Conn conn=new Conn();
        conn.executeUpdate("delete from novel where id="+did);
        response.sendRedirect("index.jsp");
    }
}

UpdataNovel.jsp

<%@ page import="com.util.Conn" %>
<%@ page import="java.sql.ResultSet" %><%--
  Created by IntelliJ IDEA.
  User: misaki
  Date: 2022/9/28
  Time: 16:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>更新书籍页</title>
</head>
<body>
    <%
        Conn conn =new Conn();
        String mid=request.getParameter("mid");
        ResultSet resultSet=conn.executeQuery("select * from novel where id='"+mid+"'");
        resultSet.next();
    %>
<form method="post" action="modify">

    书名<input type="text" name="name" value="<%=resultSet.getString(2)%>"><br>
    作者<input type="text" name="author" value="<%=resultSet.getString(3)%>"><br>
    价格<input type="text" name="price" value="<%=resultSet.getString(4)%>"><br>
    <input type="hidden" name="mid" value=<%=resultSet.getString(1)%> >
    <input type="submit" value="修改">
</form>
</body>
</html>
UpdateNovelServlet
package com.servlet;

import com.util.Conn;

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 java.io.IOException;

@WebServlet(name = "UpdateNovelServlet",urlPatterns = "/modify")
public class UpdateNovelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //写修改逻辑
        request.setCharacterEncoding("UTF-8");
        String mid=request.getParameter("mid");
        String name=request.getParameter("name");
        String author=request.getParameter("author");
        String price=request.getParameter("price");
        String sql="update novel set name='"+name+"',author='"+author+"',price='"+price+"' where id="+mid;
        System.out.printf(sql);
        Conn conn=new Conn();
        conn.executeUpdate(sql);
        response.sendRedirect("index.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
BatchDelServlet(批量删除)
package com.servlet;

import com.util.Conn;

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 java.io.IOException;

@WebServlet(name = "BatchDelServlet",urlPatterns = "/batchDel")
public class BatchDelServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        String ids =request.getParameter("id");
        String [] id =ids.split(",");
        Conn conn =new Conn();
        String sql ="delete from novel where id =-100";
        for (int i =0;i<id.length;i++){
            sql += " or id ="+id[i];
            System.out.println("4444444444444444");
        }
        conn.executeUpdate(sql);
        response.sendRedirect("index.jsp");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }
}

数据库

DROP TABLE IF EXISTS `novel`;
CREATE TABLE `novel` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(12) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `author` varchar(12) DEFAULT NULL,
  `price` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of novel
-- ----------------------------
INSERT INTO `novel` VALUES ('1', '《知音漫客》', '知音', '25');
INSERT INTO `novel` VALUES ('2', '《斗破苍穹》', '天蚕土豆', '30');
INSERT INTO `novel` VALUES ('3', '《操作系统》', '葛季栋', '26');
INSERT INTO `novel` VALUES ('4', '《当青春幻想具现化》', '转角吻猪', '30');
INSERT INTO `novel` VALUES ('5', '《自我本我超我》', '无名', '99');
INSERT INTO `novel` VALUES ('6', '《没头脑和不高兴》', '无名', '99');