Spring Jdbcを使用していますが、Connectionインターフェイス経由でjdbcテンプレートからデータベースベンダー名を取得するにはどうすればよいですか。 Springが提供するAPIがあり、DB名を保持する列挙型を与えることができるので、文字列の値をハードコードから切り離すことができます。Spring JdbcTemplateからデータベースベンダー名を取得する方法
答えて
DatabaseMetaData documentationに必要な情報があります。
String vendor = jdbcTemplate.getDataSource().getConnection().getMetaData().getDatabaseProductName();
UPDATED!
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-
だから使用法は以下のようになりますか? – redeemed
あなたがそれらを結合したいなら、あなたは 'commonDatabaseName'への引数を' String(文字列)としてキャストする必要がありますが、 '。 –
- 1. Spring JdbcTemplateがMySQLからInsert IDを取得できない
- 2. Springでデータソースをモックする方法JdbcTemplate
- 3. JPA&Spring- Springから共有EntityManagerを取得する方法は?
- 4. Springバッチでリソース(itemReader)からファイル名を取得する方法は?
- 5. Javaからスプリングプロファイル名を取得する方法
- 6. Spring MVC:jspファイルの名前をハンドラメソッド内で取得する方法
- 7. SpringインターセプタpreHandleメソッドでコントローラメソッド名を取得する方法
- 8. Spring Security:accessDeniedPageのユーザー名を取得する方法は?
- 9. JdbcTemplateでクエリから返された行数を取得する
- 10. モジュール内からSpring XDモジュールのメタデータを取得する方法
- 11. spring-boot-actuatorからプログラムでメトリックを取得する方法は?
- 12. jersey.servlet.ServletContainerマネージドBeanからSpringマネージドBeanを取得する方法?
- 13. JPAとSpring JdbcTemplate
- 14. Spring JdbcTemplate alter session
- 15. Spring JDBCTemplate - Concurrent Calls
- 16. Spring jdbcTemplate Junit
- 17. Spring JdbcTemplate - SELECT(s)にクエリを制限する方法?
- 18. バッチ更新中にSpring JDBCTemplateのトランザクションタイムアウト値をオーバーライドする方法
- 19. spring jdbcTemplate例外をキャッチする方法は?
- 20. HikariCPとJdbcTemplateをSpringで使用する方法MVC 4
- 21. Spring AOP。 JoinPointからBean名を取得する
- 22. ファイル名から画像の寸法を取得する方法
- 23. Spring - ServletContextを@Serviceに取得する方法(+ WebAppsマニフェストを取得する方法)
- 24. JMockitを使ってspringのjdbcTemplateをモックする方法はありますか?
- 25. java Spring JDBCTemplate - where句
- 26. java.sql.Statement.EXECUTE_FAILED Spring JdbcTemplateのシナリオ
- 27. 署名付きファイルから署名者の名前を取得する方法
- 28. 名前から有名人のスクリーン名を取得する方法
- 29. springのSimpleJdbcTemplateからすべてのテーブル名のリストを取得
- 30. 署名入りapkからキーストアファイルを取得する方法
これを管理されていない接続を開くと、実際は危険です。代わりに 'ConnectionCallback'を使うか、接続をもう一度閉じてください。 –
これは彼が望む情報を見つける方法の例です。もちろん、接続はうまく管理しなければなりませんが、ここでは問題にはなりません。問題はこれを見つける場所であり、Connectionを使わずにこの情報を得ることはできないと思います。 – Daniel
私はそれを言っていません。しかし、私の経験では、ここからコードをコピー/ペーストしてからx回後にこのコードを呼び出すと、空きプールが原因で問題が発生します。したがって、あなたはそれを閉じる必要はありません(またはそれを閉じると思う) 'ConnectionCallback'を使用することをお勧めします。 –