首页 > 解决方案 > java.sql.SQLException - 未找到列

问题描述

尽管我查看了其他类似的查询,但我找不到我的问题的答案。我的练习是在 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;

标签: javamysqljdbc

解决方案


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

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

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


推荐阅读