[英]Try-catch ignoring the assignment of a variable when executing an SQL query
这段代码使用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
。 将变量初始化为0
会导致抛出NullPointerException
,因为我正在使用this的返回值来设置数组的长度。 在另一个类中使用相同的代码将返回它应返回的int。 我试过为COUNT(*)
使用别名,但无济于事。
直接在MySQL中运行查询也会返回int。 我尝试过删除嵌套的try(这已经过时了,因为我知道如果没有人干扰我的数据库,它不会抛出异常)。
在使用之前,您是否已注册JDBC驱动程序?
Class.forName("com.mysql.jdbc.Driver");
连接时是否需要提供用户名/密码?
DriverManager.getConnection(url, user, pass);
您是否自己创建了一个Connection
类,它会覆盖打开Connection
返回的Connection
类。 我问这的原因是因为您检索到使用Connection.JDBC_URL
进行连接的URL,据我所知, Connection
不在Connection
类中。
是否已经打开一个连接,并且您的数据库仅允许1个打开的连接?
注意:不要忘记在返回之前关闭结果集,语句和连接:
rs.close();
query.close();
conn.close();
除此之外,由于没有捕获的尝试根本没有帮助,因此重组了函数。
这看起来真的很奇怪:
amount = rs.getInt("COUNT(*)");
试试这个
amount = rs.getInt(1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.