【问题标题】:Get MYSQL database size in Java在 Java 中获取 MYSQL 数据库大小
【发布时间】:2015-02-24 09:48:45
【问题描述】:

我的 MYSQL-Table 有 3 个表。

我无法让given examples 工作。

Java中,使用java.sql.*,我想知道我的整个数据库还剩下多少空间,因为空间非常有限。

这是我的方法:

// this.conn = DriverManager.getConnection("jdbc:mysql://......");

public long remainingSpace() {
    String sql = "SELECT table_schema AS \"Database\", "
        + "ROUND(SUM(data_length + index_length) / 1024, 2) AS \"Size (KB)\" "
        + "FROM information_schema.TABLES GROUP BY table_schema;";
    ResultSet rs;
    PreparedStatement prpSttm = this.conn.prepareStatement(sql);
    rs = prpSttm.executeQuery();
    rs.next();
    long remainingSpace = rs.getInt("Size (KB)");
    return remainingSpace;
}

这将返回 9 (KB)。

phpMyAdmin 反而告诉我在我的一张表中有64 KiB 的数据:

如何在 Java 中获得正确的尺寸?

【问题讨论】:

    标签: java mysql database


    【解决方案1】:

    您只是显示 ResultSet 返回的第一个数据库的大小,您的 DBMS 中可能有更多数据库(有一些默认系统 DB)。您应该使用 while 循环。

    while (rs.next()) {
        System.out.println(rs.getString("Database") " | " + rs.getString("Size (KB)"));
    }
    

    *根据我的经验,~9KB 通常是默认 information_schema 数据库的大小。

    **由于此查询按字母顺序返回数据库,我猜您的数据库名称以字母开头 >=i;因此,令人惊讶的是,如果您使用以“a”开头的名称重命名数据库,您的代码将起作用:) :)

    【讨论】:

    • 这行得通!给定的代码为我打印出以下内容:information_schema | 9.00 sql560710 | 96.00 谢谢!
    【解决方案2】:

    您只从 Java 程序中的 ResultSet 中读取一行。但是您的查询会为服务器上的每个不同数据库(模式)生成一行。您可能正在报告某些数据库的信息,而不是您的数据库。您最好阅读该 ResultSet 的所有行。

    注意: MySQL 的磁盘空间耗尽可能是灾难性的。您真的不想完全耗尽磁盘空间。如果你够聪明,你会留下至少几个 GiB 的余量。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 2021-04-05
      • 2020-09-10
      • 2012-08-16
      • 2013-01-20
      • 2021-02-01
      相关资源
      最近更新 更多