如何通过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'
如何获取我连接的数据库的名称?
你可以:
-
使用
session.createSQLQuery(...)
创建本机SQL查询。 您可以使用uniqueResult()
提取单行结果。 -
从
Session
获取JDBCConnection
,并从数据库元数据中提取连接字符串。 对于SQL Server,我相信您需要解析connection.getMetaData().getURL()
以提取实际的数据库名称。
请注意, Session.connection()
被认为已弃用,您应该使用Session.doWork()
。
AFAIK你不能用那种方式调用NAtive数据库函数。 尝试使用Native Query而不是简单的查询: http : //www.roseindia.net/hibernate/hibernate-native-sql.shtml