繁体   English   中英

在执行SQL查询时尝试捕获忽略变量的分配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM