在 ORMlite 中获取磁盘上的 PostgreSql table 大小(字节)
Get PostgreSql table size on disk (byte) in ORMlite
我在 Java 应用程序中使用 ORMLite,以便处理 PostgreSql 数据库。
我想获取 table 数据库使用的光盘上的 space。
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(...) 他们说 returns 影响的行数 而不是 结果。
SQL = "SELECT pg_table_size('" + TABLE_NAME + "');" ;
GenericRawResults ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult();
查看 javadocs for queryRaw(...)
,这里的问题是 returns 一个 GenericRawResults<String[]>
而不是 <String>
。它 returns 原始结果的集合,每一行都由一个字符串数组表示。我真的很惊讶你的代码甚至可以编译。
应该是:
GenericRawResults<String[]> ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult()[0];
可能最好的方法是使用 queryRawValue(...)
执行原始查询和 returns 单个值。
// throws an exception if there are no results or if the first one isn't a number
long size = OGGETTO_DAO.queryRawValue(SQL);
我在 Java 应用程序中使用 ORMLite,以便处理 PostgreSql 数据库。 我想获取 table 数据库使用的光盘上的 space。 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(...) 他们说 returns 影响的行数 而不是 结果。
SQL = "SELECT pg_table_size('" + TABLE_NAME + "');" ; GenericRawResults ARRAY = OGGETTO_DAO.queryRaw(SQL); String result= ARRAY.getFirstResult();
查看 javadocs for queryRaw(...)
,这里的问题是 returns 一个 GenericRawResults<String[]>
而不是 <String>
。它 returns 原始结果的集合,每一行都由一个字符串数组表示。我真的很惊讶你的代码甚至可以编译。
应该是:
GenericRawResults<String[]> ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult()[0];
可能最好的方法是使用 queryRawValue(...)
执行原始查询和 returns 单个值。
// throws an exception if there are no results or if the first one isn't a number
long size = OGGETTO_DAO.queryRawValue(SQL);