我正在使用spring Jdbc,如何從jdbc模板中檢索數據庫供應商名稱而無需通過Connection接口。是否有Spring提供的API可以給出一個枚舉數據庫名稱的枚舉值,以便我可以將硬編碼的字符串值與我的代碼解耦如何從Spring JdbcTemplate獲取數據庫供應商名稱
回答
您可以在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();
}
});
}
你可以使用這樣的事情,以獲得基本的連接,然後再釋放,一旦你讓你從數據庫元數據所需的信息。
DataSource dataSource = jdbcTemplate.getDataSource();
Connection connection = DataSourceUtils.getConnection(dataSource);
String dbProductName = connection.getMetaData().getDatabaseProductName();
DataSourceUtils.releaseConnection(connection, dataSource);
希望這可以幫助你。 !
謝謝,我已經在使用這個。問題是我需要知道給定數據庫的供應商名稱,而不使用上面的代碼來找到它。無論如何,我可以得到一個DB的枚舉,像這樣的http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/jpa/vendor/Database.html,所以我不依賴於字符串值 – redeemed
最簡單的方法是使用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-
所以用法應該如下所示? JdbcUtils.commonDatabaseName(JdbcUtils.extractDatabaseMetaData(jdbcTemplate.getDataSource(),「getDatabaseProductName」)) – redeemed
當然,如果你想合併它們,那看起來不錯,儘管你需要將參數強制轉換爲'commonDatabaseName'作爲'String '。 –
- 1. 如何從數據庫獲取名稱?
- 2. 如何獲取Android設備的CPU供應商名稱。
- 3. 以winforms獲取ISP提供商名稱?
- 4. 如何按名稱獲取數據庫?
- 5. 如何改變供應商的名稱
- 6. 如何從Java中的數據源名稱獲取sqlserver數據庫名稱
- 7. 在windows和linux上獲取GPU供應商名稱
- 8. 通過手動提供服務器名稱從數據庫獲取數據
- 9. 從數據庫日誌文件頭獲取數據庫名稱
- 10. PHP/MYSQL從名稱數據庫獲取user_id使用名稱
- 11. 如何獲取服務提供商,而不是網絡名稱
- 12. 移動寬帶 - 如何獲取服務提供商名稱
- 13. 無論數據庫供應商如何通過JDBC從數據庫服務器獲取當前日期/時間?
- 14. 如何從postgres/mysql光標對象獲取數據庫名稱
- 15. 如何從數據庫中獲取登錄用戶的名稱?
- 16. 如何從config.php獲取數據庫名稱
- 17. 如何從ConstraintViolationException獲取數據庫字段名稱 - Hibernamte
- 18. Rails - 如何從數據庫中獲取類別名稱?
- 19. 如何從Perl MySQL DBI句柄獲取數據庫名稱?
- 20. 如何從sqlite獲取所有數據庫名稱和表名稱
- 21. 如何從RavenDB數據庫獲取所有實體名稱(集合名稱)?
- 22. 如何從PHP中的URL中獲取數據庫名稱和表名稱?
- 23. 對同一項目的多個供應商,供應商名稱
- 24. 如何從crosstool-ng工具鏈名稱中刪除供應商名稱
- 25. 獲取在SQL Server中提供的數據庫名稱2014
- 26. PHP - 獲取數據庫名稱列表
- 27. 獲取Oracle數據庫名稱
- 28. 從Spring JdbcTemplate中提取ResultSetMetaData
- 29. 如何從vbscript中的供應商網站提取數據?
- 30. DB獲取當前數據庫名稱
這實際上是危險的,因爲你打開一個不受管理的連接。相反,您應該使用「ConnectionCallback」或再次關閉連接。 –
那麼,這是一個如何找到他想要的信息的例子。當然,連接必須妥善管理,但這不是問題。問題是在哪裏可以找到這一點,我不認爲你可以在沒有使用連接的情況下得到這些信息。 – Daniel
我不是那麼說。但根據我的經驗,人們從這裏複製/粘貼代碼,然後在x次調用此代碼後由於池耗盡而遇到問題。因此,mu建議使用「ConnectionCallback」,你不需要關閉它(或想想關閉它)。 –