2012-01-02 8 views
0

私はデータキューブとその操作をシミュレートするアプリケーションを開発しています。このアプリケーションでは、PostgreSQL、MySQLなどのさまざまなデータベースエンジンのサポートを提供する必要があります。 ユーザーがエンジンを選択してその詳細を指定できるインターフェイスを提供する予定でした。jdbc4を使用してデータベースエンジンに接続する一般化されたコードですか?

利用可能なJDBC4ドライバを使用してPostgreSQLに接続できました。この接続では、コンパイル時にクラスパスに.jarドライバを含めてプログラムコードをコンパイルする必要がありました。 しかし、製品としてのアプリケーションはJRE上で動作する必要があり、コードを再コンパイルする必要はありません。これは可能ですか?

アプリケーションは、データベースで使用可能な新しいバージョンのドライバとエンジンに合わせてカスタマイズする必要があります。これはどうすればできますか?

答えて

1

を:ここでは、それはあなたがインスピレーションのためにそれを見てみることができます...

St-Toolkit

私は数年前に開始している素朴なフレームワークであり、コンパイル時にクラスパスに.jarドライバを含めることによってプログラムコードをコンパイルする必要がありました。

これは不要です。それは実際にはJDBCの全ポイントです。ドライバのクラス名(および接続URL、ユーザー名、パスワード)は、いくつかの外部構成(プロパティ?)ファイルから取得できる文字列として提供する必要があります。例えば。

String driverClassName = getItFromConfigurationFileSomehow(); 
Class.forName(driverClassName); 
// ... 

さらに、JDBC4のため、Class#forName()は一切必要ありません。 JDBCドライバをランタイムクラスパスに入れて、ServiceLoader APIにドライバのロードの自動ジョブをさせてください。

あなただけがコンパイル時にJDBCドライバを必要としないように、代わりにorg.postgresqlインタフェース/クラスのようにのみ使用java.sqlインターフェース/ java.sql.Connectionのようなクラスとにあなたのコードを書き直す必要があります。言い換えれば、JDBCドライバ固有のインタフェース/クラスをインポート/参照する単一のコード行を持つべきではありません。

+0

それはデータベースエンジンのドライバを使用せずに単独でjava.sqlを使用して行うことができますか?どうやって ? – PVB

+1

JDBC APIの要点は、特定のJDBCドライバに対してコンパイルする必要がないことです。実行時のクラスパスに入れ、何らかの方法でドライバクラス名を指定するか、新しいClass4のserviceloader APIを使用するだけです(Class#forName()は必要ありません)。 JDBCドライバ固有のクラスを誤ってインポート/使用しているのは自分のコードだけです。すべての 'org.postgresql'インポート/参照を' java.sql'で置き換えてください。 – BalusC

+0

私は理解していると思う..ヘルプのおかげで詳細を調べるだろう.. – PVB

0

私は、DBフレームワークについてより多くの洞察を必要とするかもしれないと思います。この接続iに対する

Javadoc

+0

また、このOpenSourceソリューションを検討することもできます:Mondrian - http://mondrian.pentaho.com/データウェアハウジングのためのクロスリレーショナルdbソリューション – simonecampora

+0

アプリケーションは実際のデータウェアハウスではなくシミュレーションを提供することになっています複雑な能力.. – PVB

1

BalusCで述べたようにリフレクションでドライバクラスを読み込むことができます。その後、DriverManagerを使用して接続できます。次に、java.sqlまたはjavax.sqlインターフェースに固執します。

このコードをどのような種類のWebアプリケーションでも使用する場合は、この方法が有効ですが、重大な欠点があります。このアプローチはアプリケーションの再読み込みを妨げ、開発中のの痛みはです。

これをWebアプリケーションで使用する場合は、データベース接続をデータソースから取得するオプションにする必要があります。この方法では、Webコンテナは実際にドライバをロードするものであり、アプリケーションはドライバクラスをロードしたものとしてペナルティを支払うことはありません。

データベースライブラリコードでは、データソースAPIを使用して接続を取得し、データベースを操作するjava [x] .sqlインターフェイスを使用するだけで済みます。したがって、データベース接続が取得される方法の違いのみです。

+0

有用な..助けてくれてありがとう – PVB

関連する問題