JDBC では、DB 内のステートメントを接続して実行するために、主にインターフェースである Connection、Statement、および ResultSet を使用します。しかし、それらに対応するオブジェクトは後で createStatement()、executeQuery()、next() などのメソッドを実行するために使用されます。これらのメソッドを実装するクラスはどれですか? 実装されたクラスオブジェクトではなく、接続オブジェクトとして呼び出されるのはなぜですか?
5 に答える
あなたは実際にはしません
Connection conn = new Connection();
あなたは次のようなことをします
Connection conn = DriverManager.getConnection(
DB_PATH + "?user=" + USER_NAME + "&password=" + USER_PASS);
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(query);
しかし、質問に直接答えるには、インスタンス化することはできません。または、プロキシを使用するInterface
クラスを使用する必要があります。implements
Interface
JDBC では、最初に呼び出してドライバーを登録します。
Class.forName('classname')
データベースクラスをロードし、そのクラスを登録しますDriverManager
と言ったらDriverManager.getConnection(
) - 返してくれますjava.sql.Connection
(仕様通りの契約)
これらのメソッドを実装するクラスはどれですか?
実際の実装は、Oracle、MySQL などのデータベース ベンダーによって提供されます。
実装されたクラスオブジェクトではなく、接続オブジェクトとして呼び出されるのはなぜですか?
実装ではなくインターフェイスにコーディングするためです(優れたコーディング プラクティス)。
必要に応じて、ベンダー jar を調べて、どのクラスが Connection を実装しているかを見つけることができます。
Connection connection = DriverManager.getConnection()
あなたは書ける
VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection()
上記は機能しますが、その特定の実装にバインドされます。
vendor1 から vendor2 に移動したい場合、それはできません。最初に vendor2 API に従って上記のコードを変更する必要があります。
これらの人はあなたの質問に答えていますが、コメントからそれを得ているとは思いません.
独自のクラスを作成して、実際にインターフェイスを実装する必要があります。したがって、インターフェイスを実装するクラスを作成し、正しい抽象メソッドを含めてから、新しいクラスの機能に必要なものを追加します。次に、そのクラスをインスタンス化して関数を使用します。
インターフェースは、プログラミングの「契約」のようなもので、インターフェースを拡張するために使用されるクラスが特定の機能を満たしていることを確認するために存在しますが、インターフェース自体をインスタンス化してそのメソッドを使用することはできません。新しいクラス。新しいクラスで抽象メソッドをオーバーライドした後、特定のインターフェイス拡張クラスに実行させたい他のことをプログラミングできます。
http://www.javabeginner.com/learn-java/java-abstract-class-and-interface および http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract. htmlを使用 すると、これらのトピックについて読むことができます。
インターフェイス クラスをインスタンス化することはできません。そのインターフェイスを自分で実装するか、Proxyを使用して、提供されたInvocationHandlerへのすべての呼び出しを委任する上記インターフェイスのインスタンスを作成する必要があります。