当前位置: 首页 > 面试题库 >

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

晏富
2023-03-14
问题内容

我正在尝试获取在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'

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


问题答案:

您可以:

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

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

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



 类似资料:
  • 我刚来spring,有以下问题。 我正在处理一个应用程序,运行在JBoss服务器上,它必须使用JDBCTemplate在DB上执行查询。 在JBoss中,我设置了标识数据库连接的JNDI名称。 我尝试实现了这个JdbcTemplate的简单示例,对我来说,JdbcTemplate是如何工作的非常清楚。在本例中,为了创建到数据库的连接,它定义了一个dataSource bean,然后将其注入到使用J

  • 问题内容: 有没有一种方法可以通过Hibernate 3.2 API获得一些基础数据库版本的信息?我在这里和javadoc中都找不到相关的位。 问题答案: 获取数据库引擎的版本是特定于实现的。这意味着没有获取版本的共享方法,因此Hibernate不能真正提供API,因为它没有绑定到任何特定的RDBMS。例如,以下是通过一些著名的RDBMS使用SELECT语句获取版本的几种不同方法: Oracle

  • 本文向大家介绍JDBC如何获取数据库连接,包括了JDBC如何获取数据库连接的使用技巧和注意事项,需要的朋友参考一下 JDBC(Java Database Connectivity),即Java数据库连接。通过JDBC编程,可以使Java应用程序和数据库进行交互。 JDBC驱动的方式有很多种,我们常用的驱动方式为:本地协议的纯Java驱动程序。 JDBC编程的第一步,就是要获取数据库连接。所谓的 “

  • 用Python来编写网站,必须要能够通过python操作数据库,所谓操作数据库,就是通过python实现对数据的连接,以及对记录、字段的各种操作。上一讲提到的那种操作方式,是看官直接通过交互模式来操作数据库。 安装python-MySQLdb 要想通过python来操作数据库,还需要在已经安装了mysql的基础上安装一个称之为mysqldb的库,它是一个接口程序,python通过它对mysql数据

  • 问题内容: 想要连接到通过LAN连接的另一台PC上的数据库。我可以使用带有C:\ Users …这样的字符串的sql server db,但是我无法使用(\\ Server \ c \ user …)这样的字符串进行连接,但我尝试将db文件移动到“我的文档”中我得到这个错误。 我收到以下错误消息:尝试为文件(\\ SERVER \ Users \ Jeswills \ Documents \ TB

  • 以下实体: JPQL查询: Hibernate生成正确的sql查询,但当它尝试收集数据时,它会进行额外的调用,例如: 我检查了查询返回null。如何避免此类数据库查询? 我的调查:据我所知,Hibernate创建key by(AA1.a_number和AA1.category)并尝试从上下文中检索实体。对于特定的行“left join”,查询返回空值,Hibernate按键询问上下文,而上下文返回