5

私は、いくつかのクエリを実行するために、Oracle 8.1.7 データベースに接続する必要があるソフトウェアや、Oracle 10g データベースに接続する必要があるソフトウェアに取り組んでいます。

8.1.7 データベースに接続するときは、ojdbc14.jar ドライバーと、10g データベース用の ojdbc6.jar ドライバーを使用する必要があります。

これらのドライバーの両方がクラスパスにある場合、ドライバーの自動選択は適切なドライバーを選択するほどスマートではないようです。コードでどちらが優先されるかを指定する方法はありますか?

現在、接続プールや同様の抽象化を使用していませんが、必要に応じてそのようなものを導入しても問題ありません。

4

3 に答える 3

4

dbcp を使用していない場合は、次のように実行できます。

class Test 
        static Driver driver5;
        static Driver driver6;

        static void init() throws Exception {
            ClassLoader cl5 = new URLClassLoader(new URL[] { new URL("file:lib/ojdbc15.jar") });
            driver5 = (Driver) cl5.loadClass("oracle.jdbc.driver.OracleDriver").newInstance();
            ClassLoader cl6 = new URLClassLoader(new URL[] { new URL("file:lib/ojdbc6.jar") });
            driver6 = (Driver) cl6.loadClass("oracle.jdbc.driver.OracleDriver").newInstance();
        }

        public static void main(String[] args) throws Exception {
            Properties props = new Properties();
            props.put("user", "user");
            props.put("password", "pwd");
            String url = "jdbc:oracle:thin:@host:1529:sid";
            Connection conn5 = driver5.connect(url, props);
            Connection conn6 = driver6.connect(url, props);
        }

ojdbc15.jar および ojdbc6.jar は Java クラスパス上に配置しないでください。アプリケーションのクラスローダーからは見えないようにする必要があります。

于 2013-01-16T13:41:34.917 に答える
1

接続プールを使用して実行時にどのドライバーを使用するかを決定することはできませんが、接続プール(xml形式で定義されている)を使用すると、ドライバーを変更した後にコードを何度もコンパイルする必要はありません。

ただし、ランタイムドライバー選択の実装では、すべてのSQL構成とSQL関連の操作が実行される独自のSQLヘルパークラスを作成できます。openConnection(String driver、String username、String password)というメソッドを作成する場合、ここで、実行時に使用するドライバーsholdを決定できます。

于 2013-01-16T13:07:59.123 に答える
0

使用するドライバーのバージョンを抽象化するドライバー ファクトリ クラスを作成できます。

ランタイムから、必要なドライバーのタイプとして入力を提供し、Factory はその特定のタイプを返す必要があります

于 2013-01-16T13:18:26.463 に答える