我正在尝试获取我在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'
如何获取我所连接的数据库的名称?
答案 0 :(得分:6)
你可以:
使用session.createSQLQuery(...)
创建本机SQL查询。您可以使用uniqueResult()
提取单行结果。
从Connection
获取JDBC Session
,并从数据库元数据中提取连接字符串。对于SQL Server,我相信您需要解析connection.getMetaData().getURL()
以提取实际的数据库名称。
请注意,Session.connection()
被视为已弃用,您应该使用Session.doWork()
。
答案 1 :(得分:1)
AFAIK你无法以这种方式调用NAtive数据库功能。尝试使用原生查询而不是简单查询:http://www.roseindia.net/hibernate/hibernate-native-sql.shtml