【问题标题】:ResultSet in while loop cannot find column namewhile 循环中的 ResultSet 找不到列名
【发布时间】:2021-05-01 20:41:21
【问题描述】:

我试图从 DBeaver 中的用户表中打印出一个数据列表,但是每当我运行 Java 程序以返回一个列表时,我都会收到一条错误消息,提示找不到“userid”列名。我是否需要在我的 while 循环中更改某些内容?这是我的代码:

@Override
public List<User> findAll() {
    try(Connection conn = ConnectionUtil.getConnection()) {
    
        String sql = "SELECT * FROM user;";
        
        Statement statement = conn.createStatement();
        
        ResultSet result = statement.executeQuery(sql);
        
        List<User> list = new ArrayList<>();
        
        while (result.next()) {
            User user = new User();
            user.setUserId(result.getInt("userid"));
            user.setUsername(result.getString("username"));
            user.setPassword(result.getString("password"));
            user.setFirstName(result.getString("firstname"));
            user.setLastName(result.getString("lastname"));
            user.setEmail(result.getString("email"));
            
            list.add(user);
        }
        
        return list;

Here is my DBeaver table

【问题讨论】:

  • 您确定列名吗?你能分享一下表的架构吗?
  • Unrelated: "我需要改变什么吗...?" 是的,你需要同时使用 statementresult 的 try-with-resources,与您对 conn 所做的相同。

标签: java while-loop resultset dbeaver


【解决方案1】:

user 是 PostgreSQL 中的一个特殊关键字。 该查询返回登录到数据库的用户的用户名。这就是列不匹配的原因。

您需要转义表名才能使查询按预期工作:

String sql = "SELECT * FROM \"user\";";

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2021-03-02
  • 2019-10-26
  • 2018-09-23
  • 2021-01-18
  • 2016-01-27
  • 2015-08-04
相关资源
最近更新 更多