1

JDK1.6.0_16 を使用して、ビーンシェル 2.0b4 を取得して .jar を動的にロードしようとしているこの単純なプログラムがあります (ドキュメントが示唆しているように)。ドキュメントには、beanshells の getClass() メソッドを使用すると、以前に「addClassPath()」メソッドによってロードされた jar がロードされると記載されています。機能していません。これについて助けが必要です...

//debug();
addClassPath("mysql-connector-java-5.1.15.jar"); 
import com.mysql.jdbc.Driver; 
import java.sql.Connection;  
import java.sql.DriverManager; 
import java.util.Arrays;

System.out.println("MySQL Connect Example.");
System.out.println("Classpath: " + Arrays.toString( getClassPath() ) + "\n");

Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "test";
String driver = "com.mysql.jdbc.Driver";
String userName = "root"; 
String password = "password";
try {
  Class driverClass = getClass( driver );
  if(driverClass != null) {
    Driver driver = driverClass.newInstance();
    if(driver != null) {
      DriverManager.registerDriver(driver);
    }
  }
  conn = DriverManager.getConnection(url+dbName,userName,password);
  System.out.println("Connected to the database");
  conn.close();
  System.out.println("Disconnected from database");
} catch (Exception e) {
  e.printStackTrace();
}

私が抱えているこの問題は、(beanshell の) getClass() メソッドが動的に変更された独自のクラスパスを認識できないことを強く示唆しています。

注: このコードは、mysql.jar ファイルを jre/lib/ext ディレクトリ (従来の jre クラスローダーがロードできる場所であり、beanshell クラスローダーではない) に配置した場合にのみ機能します。

4

1 に答える 1

1

これはおそらく beanshell の問題ではありません。jdbc には、クラスローダー間でドライバーをロードする際の問題があります ( ClassLoaderのクラス javadoc を確認し、このようなハックを参照してください)。

于 2011-08-19T03:05:11.667 に答える