3

我已经将 JAVA 应用程序与 MySql 连接起来。当我写 PreparedStatement ps = null ; 然后显示导入包的两个选项。两个建议的包是:com.mysql.jdbc.PreparedStatement; 和 java.sql.PreparedStatement 。而且,当我导入 com.mysql.jdbc.PreparedStatement 包时,他们说要进行强制转换,如下所示。

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

当我使用 java.sql.PreparedStatement 时不需要在上面的句子中进行强制转换。

所以,我的问题是:为什么显示两个不同的导入包?为什么 com.mysql.jdbc.PreparedStatement 包需要强制转换?

4

1 回答 1

14

为什么显示两个不同的导入包?

因为这两个类都存在于您的编译时类路径中,并且您的 IDE 试图提供帮助。


为什么 com.mysql.jdbc.PreparedStatement 包需要强制转换?

因为prepareStatement()指定返回java.sql.PreparedStatement,不是com.mysql.jdbc.PreparedStatement


java.sql.PreparedStatement是一个界面,您应该一直使用它。MySQL 是一个具体的实现,您不应该将 JDBC 代码与 MySQL 特定的实现紧密耦合。否则,如果您想将 DB 服务器(以及 JDBC 驱动程序)切换到不同的供应商,如 PostgreSQL,则必须对代码进行大量更改。如果您一直使用java.sql包中的标准 JDBC 接口,那么您只需要更改 JDBC URL,可能还需要更改用户名和密码以及一些特定于 DB 的 SQL 语句。

也可以看看:

于 2012-08-22T02:09:34.583 回答