由一场乌龙引起的一列问题
首先是错误代码: 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);
之前传入的是字符而不是变量
所以大家再写代码时一定的多注意,我是在这里遭老罪了;!!
谢谢看完