2017-05-09 425 views

回答

1

您可以在DatabaseMetaData documentation找到需要的信息。

String vendor = jdbcTemplate.getDataSource().getConnection().getMetaData().getDatabaseProductName(); 

已更新!

按照M. Deinum的建议,您可以使用ConnectionCallback,因此您不需要关闭连接或处理它。

例如:

private String getProduct() { 
    return this.jdbcTemplate.execute(new ConnectionCallback<String>() { 
     @Override 
     public String doInConnection(Connection connection) throws SQLException, 
      DataAccessException { 

      return connection.getMetaData().getDatabaseProductName(); 
     } 
    }); 
} 
+0

这实际上是危险的,因为你打开一个不受管理的连接。相反,您应该使用“ConnectionCallback”或再次关闭连接。 –

+0

那么,这是一个如何找到他想要的信息的例子。当然,连接必须妥善管理,但这不是问题。问题是在哪里可以找到这一点,我不认为你可以在没有使用连接的情况下得到这些信息。 – Daniel

+0

我不是那么说。但根据我的经验,人们从这里复制/粘贴代码,然后在x次调用此代码后由于池耗尽而遇到问题。因此,mu建议使用“ConnectionCallback”,你不需要关闭它(或想想关闭它)。 –

0

你可以使用这样的事情,以获得基本的连接,然后再释放,一旦你让你从数据库元数据所需的信息。

DataSource dataSource = jdbcTemplate.getDataSource(); 
Connection connection = DataSourceUtils.getConnection(dataSource); 
String dbProductName = connection.getMetaData().getDatabaseProductName(); 
DataSourceUtils.releaseConnection(connection, dataSource); 

希望这可以帮助你。 !

+0

谢谢,我已经在使用这个。问题是我需要知道给定数据库的供应商名称,而不使用上面的代码来找到它。无论如何,我可以得到一个DB的枚举,像这样的http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/jpa/vendor/Database.html,所以我不依赖于字符串值 – redeemed

0

最简单的方法是使用JdbcUtils#extractDatabaseMetaData方法 - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/support/JdbcUtils.html#extractDatabaseMetaData-javax.sql.DataSource-java.lang.String-

像:

JdbcUtils.extractDatabaseMetaData(jdbcTemplate.getDataSource(), "getDatabaseProductName");

还有试图将数据库规范化产品名称的JdbcUtils#commonDatabaseName方法 - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/support/JdbcUtils.html#commonDatabaseName-java.lang.String-

+0

所以用法应该如下所示? JdbcUtils.commonDatabaseName(JdbcUtils.extractDatabaseMetaData(jdbcTemplate.getDataSource(),“getDatabaseProductName”)) – redeemed

+0

当然,如果你想合并它们,那看起来不错,尽管你需要将参数强制转换为'commonDatabaseName'作为'String '。 –

相关问题