3

Java アプリケーションを MySql に接続しました。PreparedStatement ps = null ; と書いたとき。次に、パッケージをインポートするための2つのオプションが表示されました.2つの推奨パッケージは:com.mysql.jdbc.PreparedStatement; そして、私がcom.mysql.jdbc.PreparedStatementパッケージをインポートすると、以下に示すようにキャストすると言われました。

ps = (PreparedStatement) con.prepareStatement("INSERT INTO Authors(Name) VALUES(?)");

そして、私が java.sql.PreparedStatement を使用した場合、上記の文でキャストする必要はありません。

だから、私の質問は、なぜ2つの異なるインポートパッケージが表示されているのですか? なぜ com.mysql.jdbc.PreparedStatement パッケージにキャストが必要なのですか?

4

1 に答える 1

14

2 つの異なるインポート パッケージが表示されるのはなぜですか?

両方のクラスがコンパイル時のクラスパスに存在し、IDE が役立つようにしようとしていたためです。


なぜ com.mysql.jdbc.PreparedStatement パッケージにキャストが必要なのですか?

返却するようprepareStatement()指定されているためjava.sql.PreparedStatement、 ではありませんcom.mysql.jdbc.PreparedStatement


インターフェイスjava.sql.PreparedStatementであり、常にこれを使用する必要があります。MySQL は具体的な実装であり、JDBC コードを MySQL 固有の実装に密結合するべきではありません。そうしないと、DB サーバー (および JDBC ドライバー) を PostgreSQL などの別のベンダーに切り替えたい場合に、コードに多くの変更を加える必要があります。パッケージの標準 JDBC インターフェースを常に使用している場合、変更する必要があるのは JDBC URL だけで、場合によってはユーザー名とパスワード、および DB 固有の SQL ステートメントもいくつか変更する必要があります。java.sql

以下も参照してください。

于 2012-08-22T02:09:34.583 に答える