1

jdbcを扱うアプリケーションがあります。JREが存在するすべてのPCで使用されることを想定していますが、-cpコマンドラインを使用したり、クラスパス変数を変更したりすることは想定されていません。したがって、ユーザーはファイルシステムのどこかに私のアプリケーション、JRE、およびjdbcドライバーを持っています。ここで、彼または彼女は、jdbcドライバーjarへのパスを含むデータベース接続情報を入力してから、SQL要求を行います。問題は、このアプリケーションでjdbcドライバークラスにアクセスできるようにする方法がわからないことです。ユーザーがクラスパスにドライバーを明示的に追加するのと同じ方法です。

4

3 に答える 3

2

他の投稿 のmiks 回答の一部を変更しました。

次のコードを実行すると成功しました。

import java.io.File;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;

public class URLClassLoaderSample {
  public static void main( String [] args ) throws Exception {
    File f = new File( "/home/ravinder/Desktop/mysql-connector-java-5.1.18-bin.jar" );
    URLClassLoader urlCl = new URLClassLoader( new URL[] { f.toURL() }, System.class.getClassLoader() );

    Class mySqlDriver = urlCl.loadClass( "com.mysql.jdbc.Driver" );
    System.out.println( mySqlDriver.newInstance() );
    System.out.println( "Is this interface? = " + mySqlDriver.isInterface() );

    Class interfaces[] = mySqlDriver.getInterfaces();
    int i = 1;
    for( Class _interface : interfaces ) {
        System.out.println( "Implemented Interface Name " + ( i++ ) + " = " + _interface.getName() );
    } // for(...)

    Constructor constructors[] = mySqlDriver.getConstructors();
    for( Constructor constructor : constructors ) {
        System.out.println( "Constructor Name = " + constructor.getName() );
        System.out.println( "Is Constructor Accessible? = " + constructor.isAccessible() );
    } // for(...)
  } // psvm(...)
} // class URLClassLoaderSample

表示される出力は次のとおりです。

com.mysql.jdbc.Driver@60aeb0
Is this interface? = false
Implemented Interface Name 1 = java.sql.Driver
Constructor Name = com.mysql.jdbc.Driver
Is Constructor Accessible? = false

And I don't understand what I should with log4jClass variable in my case *(com.mysql.jdbc.Driver)
あなたがそれを手に入れたことを願っています。

于 2012-05-17T02:23:08.503 に答える
1

この場合の最善の解決策は、必要なドライバーをアプリケーションと共に配布し、必要な変数を適切に設定する実行可能ラッパーまたはシェル スクリプトのいずれかを含めることです。これにより、ユーザーは複雑な構成をいじる必要なく、箱から出してすぐに使用でき、追加のファイルをダウンロードする必要もありません。

于 2012-05-16T21:02:48.663 に答える
0

まあ、jdbc はClass.forName("org.postgresql.Driver");ドライバーをロードするために使用します。jar ファイルを取得し、それをクラスパスに追加したら、この部分は簡単です。ドライバーの fqn クラス名のハッシュを jar ファイル名に保持するだけです。または、jar をスキャンして Driver クラスを見つけることができます。

jarファイルを見つけたらクラスパスに追加する方法に対する便利な答えを次に示します

于 2012-05-16T21:23:49.907 に答える