在 Java 中获取 MYSQL 数据库大小

phi*_*294 6 java mysql database

我的 MYSQL-Table 有 3 个表。

我无法让给定的示例工作。

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;
}
Run Code Online (Sandbox Code Playgroud)

这将返回9(KB)。

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

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

Kos*_*ias 4

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

while (rs.next()) {
    System.out.println(rs.getString("Database") " | " + rs.getString("Size (KB)"));
}
Run Code Online (Sandbox Code Playgroud)

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

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