查询返回的行数,包括已删除的行数,

时间:2014-04-21 14:43:39

标签: java mysql jdbc

所以我试图使用JDBC获取mysql表中存在的行数,但是使用第一列作为参考,因为这是存在的行数,但此列已打开AUTO_INCREMENT但是,让我们说n rows从表中删除,然后一些新的inserted,新的行号将按照相同的顺序保持计数,当然,当我想要计算表所具有的行数,并且我的getTableInfo方法返回包含已删除行的行数。如何解决此问题?这可以用不同的方式完成:

public int getTableInfo(String tableName, String db, Boolean columnCount,
        Boolean rowCount) {

    TABLE = tableName;

    Connection getTableInfoConn = this.getConnect_to_DB(db);

    try {
        PreparedStatement prepStatement = getTableInfoConn
                .prepareStatement("SELECT * FROM `" + tableName + "`");

        ResultSet res = prepStatement.executeQuery();

        if ((columnCount == false) && (rowCount == false)
                || (columnCount == null) && (rowCount == false)
                || (columnCount == false) && (rowCount == null)
                || (columnCount == null) && (rowCount == null)) {

            JOptionPane.showMessageDialog(null,
                    "uno de los booleanos debe ser TRUE", null,
                    JOptionPane.ERROR_MESSAGE, null);

        } else {

            if (columnCount == false && rowCount == true
                    || columnCount == null) {

                while (res.next()) {

                    resultMetaData = res.getInt(1);
                }
            } else if (columnCount == true && rowCount == false
                    || rowCount == null) {

                metaData = res.getMetaData();

                resultMetaData = metaData.getColumnCount();

            }

        }

    } catch (SQLException e) {

        JOptionPane.showMessageDialog(null, "Error in getTableInfo():" + e);
    }

    return resultMetaData;

}

2 个答案:

答案 0 :(得分:1)

如果您只想计算表格中的行数,可以使用以下方法完成:

SELECT COUNT(*) FROM MyTable

然后res.getInt(1)应该是表格中的行数。

如果您还要计算已删除的行,并且您在ID上自动增加,那么您需要以下内容:

SELECT MAX(ID) FROM MyTable

然后res.getInt(1)应该是表格中的行数+已删除的行。

这取决于自动增量的正确性。为了数据库优化,一些自动增量实际上会跳过数字。这通常不是自动递增的目的,因此通常不能保证它们中的任何一个。话虽如此,如果通过某种配置,你可以保证它是正确的,那么这将有效。

或者,您可以拥有MyTableDeleted表。您可以在MyTable上设置删除触发器,将行填充到MyTableDeleted。然后获取删除的数量很容易。

答案 1 :(得分:0)

存储在AUTO_INCREMENT列中的值与表中的行数相同。

要获取表格中的行数,您可以在SELECT列表中运行带有聚合函数的查询(例如 COUNT(1) SUM(1) < / strong>即可。)

或者,如果你想使用低效的方法(比如检索整个表,通过痛苦的行来获取每一行),你可以简单地在循环之前初始化一个简单的计数器变量,并将计数器变量递增1每行取出。