【发布时间】:2018-09-02 11:21:45
【问题描述】:
这段代码使用 SQL 查询返回某个表中有多少条目。
public int countAmountOfEntries() {
int amount;
try (Connection conn = DriverManager.getConnection(Connection.JDBC_URL);
PreparedStatement query = conn.prepareStatement("SELECT COUNT(*) FROM Table")) {
try (ResultSet rs = query.executeQuery();) {
if (rs.next()) {
amount = rs.getInt("COUNT(*)");
}
}
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
return amount;
}
这应该返回除0 之外的任何int。将变量初始化为0 将导致NullPointerException 被抛出,因为我使用它的返回值来设置数组的长度。在另一个类中使用相同的代码会返回它应该返回的 int。我试过为COUNT(*) 使用别名,但无济于事。
直接在 MySQL 中运行查询也会返回 int。我已经尝试删除嵌套尝试(它已经过时了,因为我知道如果没有人弄乱我的数据库,它不会引发异常)。
【问题讨论】:
-
“过时了,因为我知道它不会抛出异常”——你不会,这就是为什么它永远不会“过时”。
-
我的措辞很糟糕。程序中的任何内容都不会改变该表,它只是被读取的。我向其他 3 个有权访问该数据库的人给出了具体指示,不要更改该表中的任何内容,并且我会定期检查它。不过,我明白你的意思,如果有人要改变它,就会出现问题。我这样做主要是为了看看它是否会做任何事情,但它没有。