views:

643

answers:

2

I am trying to get the name of the database I am connected to in SQL Server. I tried doing:

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

However, I got the following error:

[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'

How can I get the name of the database I am connected to?

+1  A: 

AFAIK you cannot call NAtive database functions that way. Try using a Native Query instead of a simple query : http://www.roseindia.net/hibernate/hibernate-native-sql.shtml

Nuno Furtado
+3  A: 

You can either:

  1. Create a native SQL query, with session.createSQLQuery(...). You can extract a single row of results with uniqueResult().

  2. Obtain a JDBC Connection from the Session, and extract the connection string from the database meta-data. For SQL Server, I believe you'll need to parse connection.getMetaData().getURL() in order to extract the actual database name.

Note that Session.connection() is considered deprecated, and you're supposed to use Session.doWork().

javashlook
Thank you! I didn't even think about using the Connection from the Session object.
Ascalonian