Java &引用;“显示数据库”;在HQL Hibernate中

Java &引用;“显示数据库”;在HQL Hibernate中,java,hibernate,hql,Java,Hibernate,Hql,我正在尝试使用Hibernate列出MySQL中的所有数据库。但我的错误率越来越低 Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError ERROR: line 1:1: unexpected token: show Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError ERROR:

我正在尝试使用Hibernate列出MySQL中的所有数据库。但我的错误率越来越低

Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:1: unexpected token: show
Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:1: unexpected token: show
line 1:1: unexpected token: show
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:191)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
    at TestHibernate.main(TestHibernate.java:40)
2016年11月24日上午11:50:27 org.hibernate.hql.internal.ast.ErrorCounter reportError
错误:行1:1:意外标记:显示
2016年11月24日上午11:50:27 org.hibernate.hql.internal.ast.ErrorCounter reportError
错误:行1:1:意外标记:显示
行1:1:意外标记:显示
位于org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:191)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:203)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)
位于org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
位于org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
位于org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
位于org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
位于TestHibernate.main(TestHibernate.java:40)
下面是我的代码
Configuration cfgObj=新配置();
configure(“MySQLhibernate.cfg.xml”);
servcRegObj=(ServiceRegistry)新标准ServiceRegistryBuilder().applySettings(cfgObj.getProperties()).build();
SessionFactory sfObj=cfgObj.buildSessionFactory(servcRegObj);
Session Session=sfObj.openSession();
BSCTable bscTblObj=新的BSCTable();
Query qry=session.createQuery(“显示数据库”);
List databaseList=qry.List();
用于(对象:数据库列表)
{
System.out.println(对象);
}
session.close();
sfObj.close();

显示数据库
不是有效的JPQL语句,取决于您正在使用的数据库。您可以使用本机查询
session.createSQLQuery(…)

直接与数据库对话,但在这种情况下,您将失去独立于数据库实现的Hibernate优势。

show databases
不是有效的HQL。只需直接针对jdbc对象运行一个特定于供应商的查询。Hibernate并不是以各种可能的方式与数据库交互的灵丹妙药。
    Configuration cfgObj = new Configuration();
    cfgObj.configure("MySQLhibernate.cfg.xml");
    servcRegObj = (ServiceRegistry) new StandardServiceRegistryBuilder().applySettings(cfgObj.getProperties()).build();
    SessionFactory sfObj = cfgObj.buildSessionFactory(servcRegObj);

    Session session = sfObj.openSession();
    BSCTable bscTblObj = new BSCTable();

    Query qry = session.createQuery("show databases");
    List<Object> databaseList = qry.list();
    for(Object object : databaseList)
    {
        System.out.println(object);
    }
    session.close();
    sfObj.close();