You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Postgres查询返回前两个值正确后出现Username: null问题

问题根因
  • 你编写的SELECT查询语句未包含username字段:仅在WHERE过滤条件中使用了username做查询,但返回字段列表只有first_name、last_name、password、user_id四个字段,ResultSet中没有username的值,无法为User对象的username属性赋值。
  • User类构造方法的参数顺序和你当前传入的参数不匹配:你当前给User构造方法传入的四个值分别对应名、姓、密码、用户ID,如果User类构造方法的第三个参数是username而非password,就会出现密码被赋值到其他属性、username属性未拿到有效值返回null的情况。
修复步骤
  1. 调整SQL语句,将username加入查询返回字段:
// 修改前
// String sql = "SELECT first_name, last_name, password, user_id from users where username = ?";
// 修改后
String sql = "SELECT first_name, last_name, username, password, user_id from users where username = ?";
  1. 按照你User类构造方法的参数定义,调整ResultSet的取值顺序。如果你的User类构造方法定义为User(String firstName, String lastName, String username, String password, Integer userId),则按如下方式传参:
while(rs.next()){
    credentials.add(
            new User(
                rs.getString("first_name"), 
                rs.getString("last_name"), 
                rs.getString("username"), 
                rs.getString("password"), 
                rs.getInt("user_id")
            )
    );
}

小提示:用字段名而非下标取值可以避免后续调整SELECT字段顺序时出现参数匹配错误的问题。

  1. 可选排查:如果修改后仍然出现null值,检查users表中对应username的行的目标字段是否本身存储的就是null值,以及User类的toString方法是否正确映射了属性字段。

内容的提问来源于stack exchange,提问作者j_falcon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:27:02