java - 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;
解决方案
将您的计数查询更改为
String countQuery = "SELECT COUNT(*) AS COUNT FROM POSTSBYNUMBER";
然后将结果集获取为count = rs.getInt("COUNT");
.
您的代码count = rs.getInt("COUNT(*)");
误解并告诉 JDBC 查找名为"COUNT(*)"
. 根据您的 view 的定义,您已经拥有 count 作为 POST_NUMBER 的别名。如果数据已经填充在其中,您也可以使用它。
推荐阅读
- sql - 无法插入数据,postgresql 上的外键错误
- nativescript - NativeScript 使用 Vue 获取当前的 android 上下文?
- java - 我正在尝试编写一个存储数组列表并具有多种方法的类
- sql-server - SQL Server:操作数应包含 1 列
- macos - 跳转到 PhpStorm 中上下文菜单的底部
- scala - spark在满足条件的列中获取最小值
- scikit-learn - 为什么sklearn中的cross_val_score会翻转指标的值?
- amazon-web-services - CloudFormation:属性 SsmAssociations 的值必须是 List 类型
- python - 如何将 Pandas 数据框值与列表进行比较,并将结果放入新列
- c++ - 如何从 C++ 中的文本文件中删除一行?