在 ORMlite 中获取磁盘上的 PostgreSql 表大小字节

问题描述

我在 Java 应用程序中使用 Ormlite,以便处理 Postgresql 数据库。 我想获取一张DataBase表使用的磁盘空间。 Ormlite好像没有具体的获取方法,所以我试了一下,没有成功:

final String TABLE_NAME = "a_table_name_of_db";

//1)
String sql = "SELECT pg_relation_size('" + TABLE_NAME + "');"  ;
int result = OGGETTO_DAO.executeraw(sql); 

//2)
String sql = "SELECT pg_table_size('" + TABLE_NAME + "');"  ;
int result = OGGETTO_DAO.executeraw(sql); 

//3 - it was just a try...)
sql = "SELECT pg_table_size('" + TABLE_NAME + "');"  ;
GenericRawResults<String> ARRAY = OGGETTO_DAO.queryRaw(sql);
String result= ARRAY.getFirstResult();

对于 1) 和 2) 我总是得到 -1,对于 3) 我得到一个强制转换异常;

我通过命令行(linux - 通过 psql 提示符)使用命令“pg_relation_size”或“pg_table_size”,它工作正常。

我怎么了? 谢谢

更新 - 工作解决方案:

现在可以了!根据下面接受的答案,解决方案是:

final String TABLE_NAME = "a_table_name_of_db";
String sql = "SELECT pg_table_size('" + TABLE_NAME  + "');"  
final long RESULT = OGGETTO_DAO.queryRawValue(sql); //in bytes

解决方法

int result = OGGETTO_DAO.executeRaw(SQL);

是的,这不对。查看 javadocs for executeRaw(...) 他们说它返回影响的行数不是结果。

SQL = "SELECT pg_table_size('" + TABLE_NAME + "');" ; GenericRawResults ARRAY = OGGETTO_DAO.queryRaw(SQL); 字符串结果= ARRAY.getFirstResult();

查看 javadocs for queryRaw(...),这里的问题是它返回的是 GenericRawResults<String[]> 而不是 <String>。它返回原始结果的集合,每一行都由一个字符串数组表示。我真的很惊讶你的代码甚至可以编译。

应该是:

GenericRawResults<String[]> ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult()[0];

可能最好的方法是使用 queryRawValue(...) 执行原始查询并返回单个值。

// throws an exception if there are no results or if the first one isn't a number
long size = OGGETTO_DAO.queryRawValue(SQL);