如何通过Hibernate获取我连接的数据库名称?

我试图获取我在SQL Server中连接的数据库的名称。 我尝试过:

Query query = session.createQuery("SELECT db_name()"); List dbNames = query.list(); 

但是,我收到以下错误:

 [ERROR PARSER:35] *** ERROR: :0:0: unexpected end of subtree Exception in thread "main" java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.MethodNode \-[METHOD_CALL] MethodNode: '(' +-[METHOD_NAME] IdentNode: 'db_name' {originalText=db_name} \-[EXPR_LIST] SqlNode: 'exprList' 

如何获取我连接的数据库的名称?

你可以:

  1. 使用session.createSQLQuery(...)创建本机SQL查询。 您可以使用uniqueResult()提取单行结果。

  2. Session获取JDBC Connection ,并从数据库元数据中提取连接字符串。 对于SQL Server,我相信您需要解析connection.getMetaData().getURL()以提取实际的数据库名称。

请注意, Session.connection()被认为已弃用,您应该使用Session.doWork()

AFAIK你不能用那种方式调用NAtive数据库函数。 尝试使用Native Query而不是简单的查询: http : //www.roseindia.net/hibernate/hibernate-native-sql.shtml