【问题标题】:java.sql.SQLException - column not found [duplicate]java.sql.SQLException - 未找到列 [重复]
【发布时间】:2021-06-22 15:47:19
【问题描述】:

虽然我查看了其他类似的查询,但我找不到我的问题的答案。 我的练习是在 Mysql 中加入两个表(表 USERS 和 POSTS),当用户添加帖子时,检查至少发布两次的用户的实际数量是否发生变化。

当它到达打印posts_number、firstname 和lastname 的行时,测试停止,表示找不到该列。 (我尝试切换顺序,但弹出相同的错误)。有人有更正的想法吗?

这是我的java代码:

@Test
public void testSelectUsersAndPosts () throws SQLException {

    //given
    DbManager dbManager = DbManager.getInstance();
    String countQuery = "SELECT COUNT(*) FROM POSTSBYNUMBER";
    Statement statement = dbManager.getConnection().createStatement();
    ResultSet rs = statement.executeQuery(countQuery);
    int count = 0;
    while (rs.next()) {
        count = rs.getInt("COUNT(*)");
    }

    String sql = "INSERT INTO POSTS(USER_ID, BODY) VALUES ('8', 'ha')";
    statement.executeUpdate(sql);
    sql = "INSERT INTO POSTS(USER_ID, BODY) VALUES ('8', 'yes')";
    statement.executeUpdate(sql);

    //when
    String sqlQuery = "SELECT COUNT(*) FROM POSTSBYNUMBER";
    statement = dbManager.getConnection().createStatement();
    rs = statement.executeQuery(sqlQuery);

    //then
    int counter = 0;
    while(rs.next()) {
        System.out.println(rs.getInt("POSTS_NUMBER") + ", " +   //HERE MY ERROR POPS UP 
                rs.getString("FIRSTNAME") + ", " +
                rs.getString("LASTNAME"));
        counter++;
    }


        int expected = count + 1 ;
        Assert.assertEquals(expected, counter);

        rs.close();
        statement.close();
    }

使用 CREATE VIEW 创建的表:

CREATE VIEW POSTSBYNUMBER AS
    SELECT u.FIRSTNAME, u.LASTNAME, COUNT(*) AS POSTS_NUMBER
    FROM USERS u JOIN
         POSTS p
         ON u.ID = p.USER_ID
    GROUP BY u.FIRSTNAME, u.LASTNAME
    HAVING COUNT(*) >= 2;

【问题讨论】:

  • 您在查询和获取结果集时出错。检查此链接stackoverflow.com/a/23370254/12224743。您需要将String countQuery = "SELECT COUNT(*) FROM POSTSBYNUMBER"; 更改为String countQuery = "SELECT COUNT(*) AS COUNT FROM POSTSBYNUMBER";
  • 并使用count = rs.getInt(COUNT);获取结果集

标签: java mysql jdbc


【解决方案1】:

将您的计数查询更改为 String countQuery = "SELECT COUNT(*) AS COUNT FROM POSTSBYNUMBER";

然后获取结果集为count = rs.getInt("COUNT");

您的代码 count = rs.getInt("COUNT(*)"); 错误解释并告诉 JDBC 查找名为 "COUNT(*)" 的列。 根据您的 view 的定义,您已经拥有 count 作为 POST_NUMBER 的别名。如果数据已经填充在其中,您也可以使用它。

【讨论】:

  • 好的,在我按照建议介绍了更改后,我仍然无法打印 firstname 和 secondname 列...为什么?
  • 那是因为您没有查询它们。如果您想要名字和姓氏,请将您的查询更改为String sqlQuery = "SELECT COUNT(*) AS COUNT,FIRSTNAME,LASTNAME FROM POSTSBYNUMBER";
猜你喜欢
  • 2019-08-22
  • 2019-11-11
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多