包com.mysql.jdbc.PreparedStatement之间的区别是什么;和java.sql.PreparedStatement?
我已经将JAVA应用程序与MySql连接起来了,当我编写PreparedStatement时ps=null; 然后显示了导入包的两个选项,建议的两个包是:com.mysql.jdbc.PreparedStatement;当我导入com.mysql.jdbc.PreparedStatement包时,他们说要强制转换,如下所示包com.mysql.jdbc.PreparedStatement之间的区别是什么;和java.sql.PreparedStatement?,java,mysql,jdbc,Java,Mysql,Jdbc,我已经将JAVA应用程序与MySql连接起来了,当我编写PreparedStatement时ps=null; 然后显示了导入包的两个选项,建议的两个包是:com.mysql.jdbc.PreparedStatement;当我导入com.mysql.jdbc.PreparedStatement包时,他们说要强制转换,如下所示 ps = (PreparedStatement) con.prepareStatement("INSERT INTO Authors(Name) VALUES(?)");
ps = (PreparedStatement) con.prepareStatement("INSERT INTO Authors(Name) VALUES(?)");
当我使用java.sql.PreparedStatement时,不需要在上面的句子中强制转换
所以,我的问题是:为什么会出现两种不同的进口包装?为什么com.mysql.jdbc.PreparedStatement包需要强制转换
为什么会出现两种不同的进口包装
因为这两个类都存在于您的compiletime类路径中,并且您的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语句
另见:
com.mysql.jdbc.PreparedStatement
更改了名称/包(mysql开发人员可以自由更改名称/包),您的代码也会(不必要地)崩溃。请您在@Bohemian上提供帮助,这是非常有先见之明的,因为这正是mysql/Oracle使用mysql Connector/J 8所做的。