34

3つのデータベース(Oracle、sybase、MS-Server)のストアドプロシージャ/関数を返す結果セットを処理する必要があります。手順/機能は一般的に同じですが、Oracleでは呼び出しが少し異なります。

statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
...
statement.execute(); 
ResultSet rs = (ResultSet)statement.getObject(1);

JDBCはこれを処理する一般的な方法を提供していないため、コード内のさまざまなタイプのDBを区別する必要があります。接続が与えられましたが、DBがオラクルであるかどうかを判断するための最良の方法がわかりません。ドライバー名を使用することもできますが、よりクリーンな方法を見つけたいと思います。

4

2 に答える 2

55

DatabaseMetaDataクラスを使用したいと思います。ほとんどの場合、 DatabaseMetaData.getDatabaseProductNameで十分ですが、使用している特定のデータベースの特定のバージョンに依存するコードがある場合は、getDatabaseProductVersionメソッドを使用することもできます。

于 2008-10-31T17:01:47.510 に答える
3

org.apache.ddlutils、クラスPlatformutilsを使用できます。

databaseName = new PlatformUtils().determineDatabaseType(dataSource)
于 2012-01-30T13:42:41.567 に答える