【发布时间】: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);获取结果集