我正在使用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. 如何获取Android设备的CPU供应商名称。
- 2. 以winforms获取ISP提供商名称?
- 3. 如何按名称获取数据库?
- 4. 如何改变供应商的名称
- 5. 如何从Java中的数据源名称获取sqlserver数据库名称
- 6. 在windows和linux上获取GPU供应商名称
- 7. 通过手动提供服务器名称从数据库获取数据
- 8. 如何获取服务提供商,而不是网络名称
- 9. 无论数据库供应商如何通过JDBC从数据库服务器获取当前日期/时间?
- 10. 如何从config.php获取数据库名称
- 11. 如何从postgres/mysql光标对象获取数据库名称
- 12. 如何从ConstraintViolationException获取数据库字段名称 - Hibernamte
- 13. 如何从数据库中获取登录用户的名称?
- 14. 如何从Perl MySQL DBI句柄获取数据库名称?
- 15. 如何从sqlite获取所有数据库名称和表名称
- 16. 如何从crosstool-ng工具链名称中删除供应商名称
- 17. 获取在SQL Server中提供的数据库名称2014
- 18. PHP - 获取数据库名称列表
- 19. 获取Oracle数据库名称
- 20. 如何从vbscript中的供应商网站提取数据?
- 21. DB获取当前数据库名称
- 22. Kubernetes - 无法启动与云供应商OpenStack的kubelet(错误从云提供商获取当前节点名称)
- 23. Gigya Socialize ShareBar API在点击提供商处获取提供商名称
- 24. 数据结构库供应商
- 25. 无法获取供应商
- 26. Stormpath(python) - 获取提供商数据
- 27. 如何从Spring JdbcTemplate实例获取DBUnit DatabaseConnection实例
- 28. Spring AOP。从JoinPoint获取bean名称
- 29. 如何从argparse获取参数名称?
- 30. 如何从进程名称获取应用程序名称?
这实际上是危险的,因为你打开一个不受管理的连接。相反,您应该使用“ConnectionCallback”或再次关闭连接。 –
那么,这是一个如何找到他想要的信息的例子。当然,连接必须妥善管理,但这不是问题。问题是在哪里可以找到这一点,我不认为你可以在没有使用连接的情况下得到这些信息。 – Daniel
我不是那么说。但根据我的经验,人们从这里复制/粘贴代码,然后在x次调用此代码后由于池耗尽而遇到问题。因此,mu建议使用“ConnectionCallback”,你不需要关闭它(或想想关闭它)。 –