2017-05-09 86 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 '。 –

相關問題