使用Servlet实现对数据库表格的增删改查和分页展示

一.准备工作

在做项目开始前,我们要配置好相关的Tomcat环境,各种依赖等等,然后如下图把要用到的文件创建好。

前端:(注意show在web文件夹下创建,不是WEB-INF)

后端:(一共5个文件)

数据库表格:

需要用到的工具类:

DBConnection:

public class DBConnection {

	public static void main(String[] args) {

	}

	String driver = "com.mysql.cj.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";
	String user = "root";//用户名
	String password = "2020";//密码

	public Connection conn;

	public DBConnection() {

		try {
			Class.forName(driver);
			conn = (Connection) DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void close() {
		try {
			this.conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

还有MysqlUtil的getJsonBySql方法,作用是根据传入的 SQL 查询语句和指定字段名,从数据库中查询数据,将查询结果封装成 ArrayList 后,再转换为 JSON 格式的字符串返回:

    public static String getJsonBySql( String sql,String[] colums){
       
        System.err.println("sql:" + sql);
        ArrayList<String[]>  result = new ArrayList<String[]>();
        DBConnection db = new DBConnection();
        try {
            Statement stmt = (Statement) db.conn.createStatement();
            ResultSet rs = (ResultSet) stmt.executeQuery(sql);
            while(rs.next()){
                String[] dataRow = new String[colums.length];
                for( int i = 0; i < dataRow.length; i++ ) {
                    dataRow[i] = rs.getString( colums[i] );
                }
                result.add(dataRow);
            }
            rs.close();
            db.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return listToJson(result,colums);
    }

写在MysqlUtil即可。

二.前端

前端部分的CSS代码可以自由发挥。

首先在head部分写上jQuery的依赖,必须要写:

<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

然后是主体部分:

<body onload="getPage()">
<button onclick="openInsertDiv()">添加</button>
<div id="inputDiv" class="OpenDiv">
    用户名:<input type="text" id="username" placeholder="请输入用户名:"/><br/>
    密码:<input type="text" id="password" placeholder="请输入密码:"/><br/>
    性别:<input type="text" id="sex" placeholder="请输入性别:"/><br/>
    年龄:<input type="text" id="age" placeholder="请输入年龄:"/><br/>
    手机:<input type="text" id="phone" placeholder="请输入手机:"/><br/>
    地址:<input type="text" id="address" placeholder="请输入地址:"/><br/>
    <button onclick="insert()">保存</button>
</div>
<div id="show">这是数据展示</div>
<div id="page">
    <button onclick="upPage()" style="float: left">上一页</button>
    <div id="pageIndex" style="float: left;width: 20px;border: 1px solid #000">1</div>
    <button onclick="downPage()" style="float: left">下一页</button>
    <div id="pageNum" style="float: left;width: 55px;border:1px solid #000">共0页</div>
</div>
<div id="updateDiv" class="OpenDiv">
    id:<input type="text" id="u_id" placeholder="请输入id:"/><br/>
    用户名:<input type="text" id="u_username" placeholder="请输入用户名:"/><br/>
    密码:<input type="text" id="u_password" placeholder="请输入密码:"/><br/>
    性别:<input type="text" id="u_sex" placeholder="请输入性别:"/><br/>
    年龄:<input type="text" id="u_age" placeholder="请输入年龄:"/><br/>
    手机:<input type="text" id="u_phone" placeholder="请输入手机:"/><br/>
    地址:<input type="text" id="u_address" placeholder="请输入地址:"/><br/>
    <button onclick="update()">保存</button>
</div>
</body>

接下来在<script></script>里面完成对各种方法的实现:

添加弹窗方法:

function openInsertDiv(){
        document.getElementById("inputDiv").style.display="block";
    }

修改弹窗方法:

    function openUpdateDiv(id,username,password,sex,age,phone,address){
        document.getElementById("updateDiv").style.display="block";
        $("#u_id").val(id);
        $("#u_username").val(username);
        $("#u_password").val(password);
        $("#u_sex").val(sex);
        $("#u_age").val(age);
        $("#u_phone").val(phone);
        $("#u_address").val(address);
    }

get方法:

    function get(){
        var pageIndex = $("#pageIndex").html();
        $.ajax({
            type:"get",
            url:"/1009Servlet/show",
            data:{"pageIndex":pageIndex,"pageSize":"5"},
            success:function (data){
                console.log(data);
                showData(data.data);
            }
        })
    }

获取页数方法:

    function getPage(){
        $.ajax({
            type:"get",
            url:"/1009Servlet/getPage",
            success:function (data){
                console.log(data);
                $("#pageNum").html("共"+data.page+"页");
                get();
            }
        })
    }

上一页方法:

    function upPage(){
        var pageIndex = $("#pageIndex").html();
        if(pageIndex == 1){
            alert("已经是第一页了");
            return;
        }
        pageIndex--;
        $("#pageIndex").html(pageIndex);
        getPage();
    }

下一页方法:

    function downPage(){
        var pageIndex = $("#pageIndex").html();
        var pageNum = $("#pageNum").html();
        pageNum = pageNum.substring(1,pageNum.length-1);
        if(pageIndex == pageNum){
            alert("已经是最后一页了");
            return;
        }
        pageIndex++;
        $("#pageIndex").html(pageIndex);
        getPage();
    }

添加方法:

    function insert(){
        document.getElementById("inputDiv").style.display="none";
        var username = $("#username").val();
        var password = $("#password").val();
        var sex = $("#sex").val();
        var age = $("#age").val();
        var phone = $("#phone").val();
        var address = $("#address").val();
        $.ajax({
            type:"post",
            url:"/1009Servlet/insert",
            data: {"username":username,"password":password,"sex":sex,"age":age,"phone":phone,"address":address},
            success:function (data){
                console.log(data);
                getPage();
            }
        })
    }

删除方法:

    function del(id){
        $.ajax({
            type: "post",
            url: "/1009Servlet/delete",
            data:{"id":id},
            success:function (data){
                console.log(data);
                getPage();
            }
        })
    }

修改方法:

    function update(){
        document.getElementById("updateDiv").style.display="none";
        var id = $("#u_id").val();
        var username = $("#u_username").val();
        var password = $("#u_password").val();
        var sex = $("#u_sex").val();
        var age = $("#u_age").val();
        var phone = $("#u_phone").val();
        var address = $("#u_address").val();
        $.ajax({
            type:"post",
            url:"/1009Servlet/update",
            data: {"id":id,"username":username,"password":password,"sex":sex,"age":age,"phone":phone,"address":address},
            success:function (data){
                console.log(data);
                getPage();
            }
        })
    }

展示方法:

    function showData(data){
        var html = "<table border='1'>";
        html +="<tr>";
        html +="<th>编号</th>";
        html +="<th>姓名</th>";
        html +="<th>密码</th>";
        html +="<th>性别</th>";
        html +="<th>年龄</th>";
        html +="<th>手机</th>";
        html +="<th>地址</th>";
        html +="<th>操作</th>";
        html +="</tr>";
        for (var i = 0;i < data.length;i++){
            html += "<tr>";
            html += "<td>" + data[i].id + "</td>";
            html += "<td>" + data[i].username + "</td>";
            html += "<td>" + data[i].password + "</td>";
            html += "<td>" + data[i].sex + "</td>";
            html += "<td>" + data[i].age + "</td>";
            html += "<td>" + data[i].phone + "</td>";
            html += "<td>" + data[i].address + "</td>";
            html += "<td>";
            html += "<button onclick='openUpdateDiv("+data[i].id+",\""+data[i].username+"\",\""+data[i].password+"\",\""+data[i].sex+"\",\""+data[i].age+"\",\""+data[i].phone+"\",\""+data[i].address+"\")'>修改</button>"
            html += "<button onclick='del("+data[i].id+")'>删除</button>";
            html += "</td>";
            html += "</tr>";
        }
        html += "</table>";
        $("#show").empty().html(html);
    }

三.后端

后端代码必写的三个要点

(1)继承HttpServlet

(2)写上WebServlet注解,且格式一定要正确

(3)一定实现doGet方法或doPost方法

WebServlet注解要写在类名上方,注意括号里要写“”和斜杠/

首先来看ShowServlet类:

@WebServlet("/show")
public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String pageIndex = req.getParameter("pageIndex");
        String pageSize = req.getParameter("pageSize");
        int IntPageSize = Integer.parseInt(pageSize);
        int IntPageIndex = Integer.parseInt(pageIndex);
        String sql = "select * from user order by id asc limit "+IntPageSize+" offset "+(IntPageIndex-1)*IntPageSize;
        String columns[] = {"id","username","password","sex","age","phone","address"};
        String data = MysqlUtil.getJsonBySql(sql,columns);
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        resp.getWriter().append(data);
    }
}

然后是GetCountServlet类:

@WebServlet("/getPage")
public class GetCountServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String sql = "select count(*) from user ";
        int count = MysqlUtil.getCount(sql);
        int pageCount =0;
        if(count % 5 ==0){
            pageCount = count/5;
        }else {
            pageCount = count/5+1;
        }
        String data = "{\"code\":200,\"msg\":\"success\",\"page\":"+pageCount+"}";
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("application/json");
        resp.getWriter().append(data);
    }
}

InsertServlet类:

@WebServlet("/insert")
public class InsertServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        String age = req.getParameter("age");
        String phone = req.getParameter("phone");
        String address = req.getParameter("address");
        System.out.println(username+" "+password+" "+sex+" "+" "+age+" "+phone+" "+address);
        String sql = "insert into user(Username,password,sex,age,phone,address) "
                +"values('"+username+"','"+password+"','"+sex+"',"+age+",'"+phone+"','"+address+"')";
        int count = MysqlUtil.add(sql);
        String data = "";
        if(count > 0){
            data = "{\"code\":200,\"msg\":\"success\"}";
        }else {
            data = "{\"code\":999,\"msg\":\"error\"}";
        }
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        resp.getWriter().append(data);
    }
}

DeleteServlet类:

@WebServlet("/delete")
public class DeleteServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        System.out.println("id="+id);
        String sql = "delete from user where id = "+id;
        int count = MysqlUtil.del(sql);
        String data = "";
        if(count > 0){
            data = "{\"code\":200,\"msg\":\"success\"}";
        }else {
            data = "{\"code\":999,\"msg\":\"error\"}";
        }
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        resp.getWriter().append(data);
    }
}

最后是UpdateServlet类:

@WebServlet("/update")
public class UpdateServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        String age = req.getParameter("age");
        String phone = req.getParameter("phone");
        String address = req.getParameter("address");
        System.out.println(id+" "+username+" "+password+" "+sex+" "+" "+age+" "+phone+" "+address);
        String sql = "update user set username = '"+username+"',password = '"+password+"',sex = '"+sex+"',age = "+age+
                " ,phone = '"+phone+"',address = '"+address+"' where id = "+id;
        int count = MysqlUtil.update(sql);
        String data = "";
        if(count > 0){
            data = "{\"code\":200,\"msg\":\"success\"}";
        }else {
            data = "{\"code\":999,\"msg\":\"error\"}";
        }
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json");
        resp.getWriter().append(data);
    }
}

四.效果

实现完所以代码之后的效果如下(这里没有写上address):

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值