我的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
个数据:
如何在Java中获得正确的大小?
答案 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的余量。