用Java获取MYSQL数据库大小

时间:2014-12-27 14:10:59

标签: java mysql database

我的MYSQL表有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个数据: Table size according to phpMyAdmin

如何在Java中获得正确的大小?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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