本文旨在指导用户如何使用Java编写一个数据库统计工具,该工具可以展示数据库的大小、压缩大小、压缩比等统计信息。代码易于修改,适用于Infobright和MySQL数据库。目标是提供简单、易读的代码,展示如何使用Java、JDBC驱动程序、Infobright和MySQL。
要运行此项目,需要以下软件:
源代码中包含了一个可运行的JAR文件。可以通过以下命令从终端运行它:
java -jar ice_tools.jar [OPTIONS]
其中,OPTIONS选项如下:
例如:
java -jar ice_tools.jar -u admin -P 3306 -h 192.168.1.10 -p
注意:如果未指定选项,则将使用默认值。
使用选择的IDE创建一个新项目,并导入提供的文件。为了使代码成功运行,必须下载MySQL的JDBC驱动程序,并添加对包含的JAR文件的引用。在Eclipse中,可以按照以下步骤配置构建路径并添加外部JAR:
接下来,让看看一些代码。
UserInterface类是命令行界面的主类。代码本身并不复杂,它请求用户输入,遍历数据结构,并打印出格式化的文本。
MySqlConnection类也相当直接。它包含所有连接信息以及用于连接和断开数据库的函数。
当程序首次运行时,会构建一个统计数据结构。想花点时间描述这个结构。它有三层:总体统计、数据库统计和表统计(可以添加第四层列统计)。总体统计存储在Statistic类中。它有压缩大小、原始大小、压缩比和一个映射数据库名称到DatabaseStatistic对象的哈希映射。DatabaseStatistic类保存特定数据库的统计信息:压缩大小、原始大小、压缩比和一个映射表名到TableStatistic对象的哈希映射。TableStatistic类保存特定表的统计信息:压缩大小、原始大小和压缩比。注意,这些类非常相似,可能可以减少为一个类。之所以将它们分开,是为了更好地可视化数据。
Statistic类包含最有趣的代码。这个类中的函数用于构建数据结构。下面列出的函数用于收集特定数据库的表统计信息。它返回结果的哈希映射。注意,runQuery是一个辅助函数。
private Map<String, TableStatistic> getTables(
String databaseName)
throws SQLException {
ResultSet results = runQuery(
"USE " + databaseName);
String query =
"SHOW TABLE STATUS WHERE ENGINE='BRIGHTHOUSE'";
Map<String, TableStatistic> tables =
new HashMap<String, TableStatistic>();
results = runQuery(query);
while (results.next()) {
double compressedSize = Double.parseDouble(results.getString(
"Data_length")) / 1048576.0;
double compression = Double.parseDouble(results.getString(
"Comment").split(": ")[1].split(",")[0]);
double rawSize = compressedSize * compression;
tables.put(results.getString("Name"),
new TableStatistic(rawSize, compressedSize, compression));
}
results.close();
return tables;
}
注意:上面的查询是针对Infobright数据库的。如果想获取InnoDB或MyISAM数据库的统计信息,请从查询中删除“where Engine='BRIGHTHOUSE'”。同时请注意,压缩比不会存储在“Comment”字段中。这是Infobright特有的。
在处理这个项目时,遇到了一些问题。这里是发现的一些有用的MySQL查询。
这个列出了每个数据库的大小(以MB为单位):
SELECT table_schema, SUM(data_length + index_length) / 1024 / 1024 AS 'Data Base Size in MB', TABLE_COMMENT
FROM information_schema.TABLES
GROUP BY table_schema;
这个显示了当前安装的DBMS的版本:
SHOW VARIABLES LIKE 'version_comment';