20

MySQLデータベースに接続している間、次の手順を実行します

Connection con = null;
Resultset rs = null;
Statement st = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","passwp");

Class.forName("com.mysql.jdbc.Driver").newInstance();実際、ステートメントが何をするのか知りたかったのです。

このクラスは mysql.jar にはありませんが。それはどこにありますか?

4

5 に答える 5

26

このClassクラスはjava.langパッケージに含まれているため、javaとともに配布され、すべてのクラスに自動的にインポートされます。

このメソッドが行うことは、クラスローダーによってロードされたパラメーターforName()のオブジェクトを返すことです。Class次に、newInstance()メソッドはクラスの新しいインスタンスを返します。

したがって、 Class.forName(...) com.mysql.jdbc.Driver.classを返すように呼び出すとどうなりますか。次にnewInstance()、パラメータを使用せずにクラスのインスタンスを返すクラスを呼び出すため、基本的にはを呼び出しnew com.mysql.jdbc.Driver();ます。

于 2013-02-23T10:10:45.907 に答える
7

クラスパスに見つかった場合はクラスを初期化します"com.mysql.jdbc.Driver"。これは、登録プロセスがドライバークラスの静的初期化子内にあるため、ドライバーが JDBC ドライバーマネージャーに登録されていることを意味します...

ドライバーを登録するために使用できる別の方法があります: 静的DriverManager.registerDriver()メソッドを使用することです。

于 2013-02-23T10:06:38.970 に答える
7

JDBC 仕様、第 9 章、セクション 2からの引用:

JDBC ドライバーは Driver インターフェースを実装する必要があり、その実装には、ドライバーのロード時に呼び出される静的初期化子が含まれている必要があります。この初期化子は、それ自体の新しいインスタンスを DriverManager に登録します。

また、サンプル コードは次のように提供さAcmeJdbcDriverれます。

public class AcmeJdbcDriver implements java.sql.Driver {
    static {
        java.sql.DriverManager.registerDriver(newAcmeJdbcDriver());
    }
}

また、API ドキュメントによると、Class.forName(String className)を呼び出すと、次のことが起こります。

forName("X") を呼び出すと、X という名前のクラスが初期化されます。

初期化には、実行される静的ブロック内のコードが含まれます。

基本的に、Driver クラスを初期化すると、クラスjava.sql.DriverManagerは JDBC 仕様に従って自身を登録します。

これはもう必要ありません。詳細はこちらをご覧ください

DriverManager メソッド getConnection および getDrivers が拡張され、Java Standard Edition Service Provider メカニズムがサポートされるようになりました。JDBC 4.0 ドライバーには、ファイル META-INF/services/java.sql.Driver が含まれている必要があります。このファイルには、java.sql.Driver の JDBC ドライバー実装の名前が含まれています。たとえば、my.sql.Driver クラスをロードするには、META-INF/services/java.sql.Driver ファイルに次のエントリを含めます。

my.sql.Driver

アプリケーションは、Class.forName() を使用して JDBC ドライバーを明示的にロードする必要がなくなりました。

于 2017-05-21T06:08:31.887 に答える
5

クラスの新しいインスタンスを作成しcom.mysql.jdbc.Driver、静的初期化を呼び出してドライバーを登録DriverManagerし、2 行目で使用する URL に基づいて mysql 接続を作成できるようにします。

ただし、クラスはmysql.jar.

于 2013-02-23T10:06:33.300 に答える