2009-05-04 13 views
2

SQL Serverに接続しているデータベースの名前を取得しようとしています。私がやってみました:Hibernateを介して接続しているデータベース名はどのようにして取得できますか?

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' 

は、どのように私は私がに接続されていたデータベースの名前を得ることができますか?

答えて

6

次のいずれかを実行できます

  1. session.createSQLQuery(...)で、ネイティブSQLクエリを作成します。 uniqueResult()で1行の結果を抽出することができます。

  2. SessionからJDBC Connectionを取得し、データベースメタデータから接続文字列を抽出します。 SQL Serverの場合、実際のデータベース名を抽出するには、connection.getMetaData().getURL()を解析する必要があると思います。 Session.connection()は非推奨とみなされ、そしてあなたがSession.doWork()を使うことになっていることを

は注意してください。

+0

ありがとうございました!セッションオブジェクトからのConnectionの使用については考えていませんでした。 – Ascalonian

関連する問題