AJAX请求返回信息,一直为“查询失败”

首先,在测试queryStudent()方法的 过程中,我发现前端ajaxdata的信息一直是为null值。返回数据SerciceImpl类中,排查发现,我的查询方法并没有写返回值,所以导致,我输入姓名,只返回小明,但是小明的其他信息,一直查询不到。

StudentServiceImpl类
    /**
     * @Description //查询学生信息
     * @date 2024/4/6
     * @param student
     * @return List<StudentDto>
     */
    @Override
    public List<StudentDto> queryStudent(StudentDto student) {

        List<StudentDto> lists = new ArrayList<StudentDto>();
        try {
            lists = studentDao.queryStudent(student);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

AJAX返回一直失败

需要一个标准的JSON字符串格式化,才能进行正常的显示,不然ajax会一直进入error

writer.write(JSONObject.toJSONString(resultSet));

StudentController方法

package com.xk.controller;

import com.alibaba.fastjson.JSONObject;
import com.xk.common.ResultSet;
import com.xk.dto.StudentDto;
import com.xk.service.IStudentSerivce;
import com.xk.service.impl.StudentServiceImpl;
import com.xk.util.InvokeUtil;
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;
import java.io.PrintWriter;
import java.util.List;

/**
 * @create:2024-04-02 18:35
 * @Author: IHG
 * @Touser: Be happy every day!
 * ---------------------------------------
 * @note:
 */
@WebServlet("/student")
public class StudentController extends HttpServlet {

    IStudentSerivce studentSerivce = new StudentServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InvokeUtil.getMethod(req, resp, StudentController.class);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InvokeUtil.getMethod(req, resp, StudentController.class);
    }

    /**
     * @Description //通过此方法进行跳转页面
     * @date 2024/4/6
     * @param req
     * @param resp
     */
    public void toIndex(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(req, resp);
    }


    /**
     * @Description //查询学生信息
     * @date 2024/4/6
     * @param req  请求对象,包含客户端发送的请求信息
     * @param resp 响应对象,用于向客户端发送响应信息
     
     */
    public void queryStudent(HttpServletRequest req, HttpServletResponse resp){

        // 从请求中获取age和name
        String name = req.getParameter("name");

        Integer age = null;
        if (req.getParameter("age") != null && !"".equals(req.getParameter("age"))) {
            age = Integer.parseInt(req.getParameter("age"));
        }

        // 创建学生数据传输对象,并设置姓名和年龄属性
        StudentDto student = new StudentDto();
        student.setName(name);
        student.setAge(age);

        // 调用学生服务的查询方法,获取查询结果
        List<StudentDto> list = studentSerivce.queryStudent(student);

        ResultSet<List<StudentDto>> resultSet = new ResultSet<List<StudentDto>>("200", "查询成功", list);

        PrintWriter writer = null;
        try {
            // 设置响应内容的字符编码和类型
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html; charset=UTF-8");
            // 禁用缓存,确保及时更新响应内容
            resp.setHeader("Cache-Control", "no-cache");
            // 获取响应对象的输出流
            writer = resp.getWriter();
            // 将返回结果对象转换为 JSON 字符串,并写入响应体
            writer.write(JSONObject.toJSONString(resultSet));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                writer.flush();
                writer.close(); // 关闭输出流
            }
        }

    }


}

IStudentSerivce

package com.xk.service;

import com.xk.dto.StudentDto;import java.util.List;

/**
 * @note: 学生,业务层接口
 */
public interface IStudentSerivce {

    //查询学生信息
    public List<StudentDto> queryStudent(StudentDto student);

}

StudentServiceImpl 

package com.xk.service.impl;

import com.xk.dao.StudentDao;
import com.xk.dao.impl.StudentDaoImpl;
import com.xk.dto.StudentDto;
import com.xk.service.IStudentSerivce;
import java.util.ArrayList;
import java.util.List;


public class StudentServiceImpl implements IStudentSerivce {

    StudentDao studentDao = new StudentDaoImpl();

    /**
     * @Description //查询学生信息
     * @date 2024/4/6
     * @param student
     * @return List<StudentDto>
     */
    @Override
    public List<StudentDto> queryStudent(StudentDto student) {

        List<StudentDto> lists = new ArrayList<StudentDto>();
        try {
            lists = studentDao.queryStudent(student);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return lists;
    }
}

StudentDao

public List<StudentDto> queryStudent(StudentDto student);

StudentDaoImpl

public class StudentDaoImpl implements StudentDao {

    /**
     * @Description //查询学生信息。 采用 Statement 静态sql语句。会导致 sql 注入风险
     * @date 2024/4/2
     * @param student
     * @return List<StudentDto>  改造成使用 List集合方式
     */
    public List<StudentDto> queryStudent(StudentDto student){

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<StudentDto> lists = new ArrayList<>();

        try {
            // 获取数据库连接
            connection = JdbcUtils.getDateSource();

            // 构建 SQL 查询字符串
            StringBuilder sql = new StringBuilder("select * from xk_student where 1=1");
            if (student.getAge() != null) {
                sql.append(" and age = " + student.getAge());
            }
            if (student.getName() != null) {
                sql.append(" and name like '%" + student.getName() + "%'");
            }
            statement = connection.prepareStatement(sql.toString());
            // 执行查询操作
            resultSet = statement.executeQuery();

            // 遍历查询结果集,创建 StudentDto 对象并添加到列表中
            while (resultSet.next()) {
                StudentDto result = new StudentDto(
                        resultSet.getInt("id"), resultSet.getString("student_code"),
                        resultSet.getString("name"), resultSet.getInt("age"),
                        resultSet.getInt("sex"), resultSet.getString("address"),
                        resultSet.getString("phone"), resultSet.getString("email"),
                        resultSet.getInt("school_id"));
                lists.add(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                JdbcUtils.closeSource(connection, statement, resultSet);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return lists;// 返回查询到的学生信息列表
    }
}

前端jsp页面

<%--
  Created by IntelliJ IDEA.
  User: IHG
  Date: 2024/3/21
  Time: 16:47
  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" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <%-- 通过ajax提交 --%>
    姓名:<input type="text" id="name" name="name" value="" placeholder="请输入姓名"/><br/>
    年龄:<input type="number" id="age" name="age" value="" placeholder="请输入年龄"/><br/>
    <button id="search">查询</button>
    <table>
        <tr>
            <td>学号</td>
            <td>姓名</td>
            <td>地址</td>
            <td>年龄</td>
            <td>性别</td>
        </tr>
    </table>
</body>
<%-- 通过方法去跳转页面,src这样子写--%>
<script src="../../lib/jquery.js"></script>
<script src="../../static/js/index.js"></script>
</html>

js内容

ajax内容

// 查询按钮的点击事件处理函数
$("#search").click(function(){
    // 获取输入框中的姓名和年龄信息
    var name = $("#name").val();
    var age = $("#age").val();

    // 发起 AJAX 请求
    $.ajax({
        url : "/student", // 请求的 URL
        type : "post",    // 请求类型为 POST
        data : {           // 请求参数
            name : name,   // 学生姓名
            age : age,     // 学生年龄
            method : "queryStudent" // 方法名,用于后端路由选择处理方法
        },
        dataType : "json", // 返回数据的类型为 JSON
        async : false,     // 是否异步,默认为 true,此处设置为 false,表示同步请求
        // 请求成功的回调函数
        success : function(data){
            if (data.code == "200") {
                alert(data.message);// 弹出返回消息
                console.log(data.data);// 在控制台打印返回的数据
            } else {
                // 如果返回的状态码不是 200,弹出返回消息
                alert(data.message);
            }
        },
        // 请求失败的回调函数
        error : function(data){
            // debugger;
            alert("查询失败");// 弹出查询失败的提示
        }
    })
})

mybatis

今天,帮别人查看mybatis项目的时候,发现一个问题。报错显示

Unknown database 'school_myabatis'


我查看jdbc里面数据库名称与密码是否与数据库相同。检查发现数据中确实存在这个名称。接下来排查出是因为他使用的是mysql8.30版本,版本过高且jdbc的url内容是5.0版本的内容。所以导致连接不上数据库

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值