为什么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的情况。
修复步骤
- 调整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 = ?";
- 按照你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字段顺序时出现参数匹配错误的问题。
- 可选排查:如果修改后仍然出现null值,检查users表中对应username的行的目标字段是否本身存储的就是null值,以及User类的toString方法是否正确映射了属性字段。
内容的提问来源于stack exchange,提问作者j_falcon
相关产品推荐
相关产品推荐

