2014-12-27 30 views
1

我的MYSQL表有3個表。在Java中獲取MYSQL數據庫大小

我無法獲得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 KiBTable size according to phpMyAdmin

我怎樣才能在Java中正確的大小?

回答

2

您只是顯示了ResultSet返回的第一個數據庫的大小,您的DBMS中可能有更多的數據庫(有一些默認系統DB)。你應該使用一個while循環。

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

*從我的經驗來看,〜9KB通常是默認information_schema數據庫的大小。

**由於此查詢按字母順序返回數據庫,我猜數據庫的名稱以字母> = i開頭;因此,令人驚訝的是,如果您將數據庫的名稱從「a」開始,則您的代碼將起作用:) :)

+0

This works!給出的代碼被剪下來爲我打印出以下內容:'information_schema | 9.00 sql560710 | 96.00 '謝謝! – Blauhirn 2014-12-27 15:21:57

1

您只在Java程序的ResultSet中讀取一行。但是您的查詢爲您的服務器上的每個不同數據庫(模式)生成一行。您可能會報告某些數據庫的信息,而不是您的數據庫。您最好閱讀該ResultSet的所有行。

要注意: MySQL的磁盤空間耗盡可能是災難性的。你真的不想完全用完磁盤空間。如果你明智,你會留下至少幾個GiB的餘量。