我正在使用spring Jdbc,如何从jdbc模板中检索数据库供应商名称而不通过Connection接口。是否有一个由Spring提供的API,它可以提供一个包含DB名称的枚举,以便我可以将我的代码与硬编码字符串值分离
答案 0 :(得分: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();
}
});
}
答案 1 :(得分:0)
您可以使用类似的东西来获取基础连接,然后在从数据库元数据中获取所需信息后再将其发布。
DataSource dataSource = jdbcTemplate.getDataSource();
Connection connection = DataSourceUtils.getConnection(dataSource);
String dbProductName = connection.getMetaData().getDatabaseProductName();
DataSourceUtils.releaseConnection(connection, dataSource);
希望这会对你有所帮助。 !
答案 2 :(得分: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-