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にはありません。どこにありますか?
Class
クラスはJava.langパッケージにあるため、Javaとともに配布され、すべてのクラスに自動的にインポートされます。
forName()
メソッドは、クラスローダーによってロードされたパラメーターのClass
オブジェクトを返すだけです。 newInstance()
メソッドは、クラスの新しいインスタンスを返します。
そのため、Class.forName(...)
を呼び出すと、com.mysql.jdbc.Driver.classが返されます。次に、そのクラスでnewInstance()
を呼び出します。これはパラメーターなしでクラスのインスタンスを返すため、基本的にはnew com.mysql.jdbc.Driver();
を呼び出しています。
クラスパスで見つかった場合、クラス_"com.mysql.jdbc.Driver"
_を初期化します。これは、登録プロセスがドライバークラスの静的初期化子内にあるため、ドライバーがJDBCドライバーマネージャーに登録されていることを意味します。
ドライバーを登録するために使用できる別のアプローチがあります:静的DriverManager.registerDriver()
メソッドを使用することです。
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サービスプロバイダーメカニズムをサポートするように拡張されています。JDBC4.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ドライバーを明示的にロードする必要がなくなりました。
com.mysql.jdbc.Driver
クラスの新しいインスタンスを作成するため、静的初期化を呼び出して、ドライバーをDriverManager
に登録するので、2行目で使用するURLに基づいてmysql接続を作成できます。
ただし、クラスはmysql.jar
にある必要があります。