Unknown column ‘XXXX‘ in ‘where clause‘,和后端读取不到前端输入的问题,rs.next()为何为空;

由一场乌龙引起的一列问题

首先是错误代码: 1054
Unknown column ‘XXXX’ in ‘where clause’

在这里插入图片描述
在这里插入图片描述
然后网上就说是字段中有空格的问题(你们可能确实可能存在这个问题,但我不是),就因为说是字段中有空格问题,我还傻不拉几的去新建一个库和表。千万别这么做这种逃避的方法不是好方法。正确做法是找出病因,所以我熬了10个小时才解决的。
1,最好是有一个实现在一些特殊字段前加入反引号(如:··)。
2,在值的后边加入单引号(如:‘’)
这可是一个好习惯,但有些不用加也可以,但是怕万一,一条数据读不来,后端就不是好后端。

所以上面这个错误要将SQL语句写成

SELECT uid,username,PASSWORD FROM user_manage.users WHERE `username` ='yangmei' AND `PASSWORD` = '1234';

这样就好了

在这里插入图片描述
或者这样也可以:

SELECT uid,username,PASSWORD FROM user_manage.users WHERE username ='yangmei' AND `PASSWORD` = '1234';

在这里插入图片描述
如果你有

错误代码: 1054
Unknown column 'yangmei' in 'where clause'

那么上面是种解决办法;

说回主题

我在读取前端输入的字符,一直读不到

select uid,username,password from user_manage.users where username = ? and password = ?";
@PostMapping("login.do")
    public String login(
            @RequestParam("username")String usernameInput,
            @RequestParam("password")String passwordInput,
            HttpServletRequest request) throws SQLException {
        System.out.println("用户名 :"+usernameInput+"    密码: "+passwordInput);

        //跳过验证阶段

        Integer uid=null;//使用Integer而不是Int,int中不能存放null值
        String username=null;
        String password=null;
        //要进行查询

        try(Connection connection=dataSource.getConnection("root","H@13984994357t")){
            String sql="select uid,username,password from user_manage.users where username = ? and password = ?";
            try(PreparedStatement ps=connection.prepareStatement(sql)){
                ps.setString(1,"usernameInput");
                ps.setString(2,"passwordInput");
                //查询是带结果的 一条结果要没有

                try(ResultSet rs=ps.executeQuery()){
                    if(rs.next()){
                       uid = rs.getInt("uid");//使用Integer而不是Int,int中不能存放null值
                       username=rs.getString("username");
                       password=rs.getString("password");
                       System.out.println(uid+username+password);
                    }else {
                        //没有其他结果
                    }
                }
            }
        }catch (SQLException e){
            System.out.println("登陆失败:查询没有此用户:请从新输入:");
            e.printStackTrace(System.out);
            return "redirect:/login.html";
        }
        //根据UID是否为空判断登陆成功
        //只要是 uid username password 中的一个不为空那么就登陆成功
        if(username!=null){
            System.out.println("登陆失败");
            return "redirect:/login.html";
        }
        //登陆成功
        //获取session对象
        HttpSession session=request.getSession();//默认为创建了session对像

        session.setAttribute("uid",uid);
        session.setAttribute("username",username);
        session.setAttribute("password",password);
        System.out.println("登陆成功");
        return "redirect:/";
    }

在我试了所有的可能后我才发现我的错;
光调试我就试了好几个小时,是不出错,但是,结果集的next()就是为空;
原来是这里出错了;
在这里插入图片描述
要将他改为

`  try(PreparedStatement ps=connection.prepareStatement(sql)){
                ps.setString(1,usernameInput);
                ps.setString(2,passwordInput);

之前传入的是字符而不是变量
所以大家再写代码时一定的多注意,我是在这里遭老罪了;!!

谢谢看完

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的"Unknown column"错误通常是由以下几个原因引起的: 1. 列名错误:请检查SQL语句中的列名是否正确,包括拼写和大小写。可能是因为在WHERE子句中指定了不存在的列名。 2. 表名错误:请检查SQL语句中的表名是否正确,包括拼写和大小写。可能是因为在FROM子句中指定了不存在的表名。 3. 表别名错误:如果在SQL语句中使用了表别名,请检查别名是否正确。可能是因为在WHERE子句中指定了错误的别名。 4. SQL语句语法错误:请检查SQL语句的语法是否正确,包括括号的使用、逗号的位置等。可能是因为在WHERE子句中使用了错误的语法。 要解决这个问题,可以按以下步骤进行: 1. 仔细检查SQL语句中的列名和表名是否正确。可以使用SHOW COLUMNS语句查看表的列名和表名的正确拼写。 2. 如果使用了表别名,请确保别名是正确的,并且在所有使用到的地方都是一致的。 3. 检查SQL语句的语法是否正确,特别是WHERE子句中的语法。可以使用SQL语法检查工具(如SQLFiddle)来验证语法的正确性。 4. 如果以上方法都无法解决问题,可以考虑重新创建表或者重建索引。有时候,表的结构可能发生了变化,导致某些列或者索引不存在。 总的来说,"Unknown column"错误通常是因为SQL语句中存在列或表名的错误引起的。正确地检查和拼写这些名称可以解决这个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值