使用实体管理器执行查询

时间:2016-03-16 13:20:52

标签: java jpa entitymanager

我有一个查询来获取我拥有的数据库的大小。 我写了以下内容:

    @SuppressWarnings("unchecked")
    List<Long> results = (List<Long>)em.createQuery("SELECT sum( data_length + index_length ) / 1024 / 1024 \"DataBaseSizeinMB\" FROM information_schema.TABLES GROUP BY table_schema ").getResultList();

其中emEntityManager。查询本身在phpadmin中成功运行。但是当我在我的java代码中运行它时,我会得到exception

修改 答案是:

List<Object> list =(List<Object>)em.createNativeQuery("SELECT sum( data_length + index_length ) / 1024 / 1024 FROM information_schema.TABLES GROUP BY table_schema ").getResultList();


        for (Object record : list) {
            double sum = (double)Double.parseDouble(record.toString());
            System.out.println(sum);
        }

2 个答案:

答案 0 :(得分:2)

它适用于phpmyadmin,因为它是本机查询。尝试使用em.createNativeQuery()。该方法应该用于纯SQL查询。 em.createQuery()接受用JPQL(Java持久性查询语言)编写的查询。

createNativeQuery(String sqlString)的文档:

  

@param sqlString一个本机SQL查询字符串

createQuery(String qlString)的文档:

  

@param qlString Java Persistence查询字符串

答案 1 :(得分:0)

可能是“DataBaseSizeinMB”

尝试删除此内容。

此外,您应该始终在此处发布堆栈跟踪