为了处理postgresql数据库,我在java应用程序中使用了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)我得到一个强制转换异常;
我使用命令行命令'pg\u relation\u size'或'pg\u table\u size'(linux-by psql提示符),它可以正常工作。
我怎么了?谢谢您
更新-工作解决方案:
现在成功了!根据以下公认答案,解决方案是:
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
1条答案
按热度按时间laik7k3q1#
int result = OGGETTO_DAO.executeRaw(SQL);
是的,那不对。查看executeraw的javadocs(…),他们说它返回受影响的行数,而不是结果。sql=“选择pg_table_size('”+table_name+“');”;genericrawresults数组=oggetto_dao.queryraw(sql);string result=array.getfirstresult();
查看javadocs
queryRaw(...)
,这里的问题是它返回一个GenericRawResults<String[]>
而不是<String>
. 它返回原始结果的集合,每一行由一个字符串数组表示。我真的很惊讶你的代码竟然能编译。应该是:
也许最好的方法就是使用
queryRawValue(...)
它执行原始查询并返回单个值。