JDBCを使用する場合、次のステートメントを自然に使用します。
コードコピーは次のとおりです。
class.forname( "com.mysql.jdbc.driver");
string url = "jdbc:mysql://127.0.0.1/test?useunicode = true&charatereCoding = utf-8";
文字列ユーザー= "";
文字列psw = "";
接続con = drivermanager.getConnection(url、user、psw);
なぜそれは自然なのですか?
これは必要ですか?いいえ、この文で置き換えることができます。
コードコピーは次のとおりです。
com.mysql.jdbc.driver driver = new com.mysql.jdbc.driver();
//または:
// new com.mysql.jdbc.driver();
string url = "jdbc:mysql://127.0.0.1/test?useunicode = true&charatereCoding = utf-8";
文字列ユーザー= "";
文字列psw = "";
接続con = drivermanager.getConnection(url、user、psw);
DriverManagerのGetConnectionメソッドを呼び出して、この機能を実装する方法を完了する前に、対応するドライバークラスがJVMにロードされていることを確認する必要があります。上記の方法の両方がこの関数を実装できるため、プログラムは正常に実行できます。次の操作を実行した場合、プログラムは正常に実行されません。これにより、ドライバークラスがJVMにロードされるだけでなく、対応する初期化作業を実行しないためです。
コードコピーは次のとおりです。
com.mysql.jdbc.driver driver = null;
//または:
classloader cl = new ClassLoader();
cl.LoadClass( "com.mysql.jdbc.driver");
JDBCはブリッジモードを使用して設計されています。前のドライバーはインターフェイスであり、後者は以前のドライバーインターフェイスを実装するクラスであることに注意してください。
ブリッジモードでは、抽象(Drivermanager)が実装者(ドライバー)に参照する必要がありますが、使用中はドライバーオブジェクトをドリバーマナジャーに登録しませんでした。 JDKドキュメントのドライバーの説明には文があります。
ドライバークラスがロードされたら、それ自体のインスタンスを作成し、DriverManagerに登録する必要があります
ああ、com.mysql.jdbc.driverは、読み込み後にこのステップを自動的に完了したことがわかります。ソースコードは次のようなものです。
コードコピーは次のとおりです。
パッケージcom.mysql.jdbc
パブリッククラスのドライバーは、registeringdriverを拡張しますjava.sql.driver {
//〜静的フィールド/初期化
// drivermanagerに登録します
//
static {
試す {
java.sql.drivermanager.registerdriver(new Driver());
} catch(sqlexception e){
新しいruntimeexception( "ドライバーを登録できません!");
}
}
// 〜constructors
/**
*新しいドライバーを作成し、Drivermanagerに登録します
*
* @Throws sqlexception
*データベースエラーが発生した場合。
*/
public driver()はsqlexceptionをスローします{
// class.forname()。newinstance()に必要
}
}
PS:JDBCドライバーの負荷を修正します
コードコピーは次のとおりです。
classloader cl = thread.currentthread()。getContextClassLoader();
クラスclazz = cl.loadclass( "com.mysql.jdbc.driver");
clazz.newinstance();
接続conn = drivermanager.getConnection( "jdbcurl");
実行することもできます。しかし、このようにして、com.mysql.jdbc.driverの追加インスタンスを作成します。 class.fornameと同じ( "com.mysql.jdbc.driver")。
今すぐ:
コードコピーは次のとおりです。
class.forname( "com.mysql.jdbc.driver")== cl.loadclass( "com.mysql.jdbc.driver")。newInstance();
class.forname and classloader.loadclassは2つの異なるものです。1つはインスタンス化されたクラスともう1つのロードクラス