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

时间:2009-05-04 19:07:54

标签: java sql-server hibernate

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

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

但是,我收到以下错误:

[ERROR PARSER:35] *** ERROR: <AST>: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'

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

2 个答案:

答案 0 :(得分:6)

你可以:

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

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

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

答案 1 :(得分:1)

AFAIK你无法以这种方式调用NAtive数据库功能。尝试使用原生查询而不是简单查询:http://www.roseindia.net/hibernate/hibernate-native-sql.shtml