Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包com.mysql.jdbc.PreparedStatement之间的区别是什么;和java.sql.PreparedStatement?_Java_Mysql_Jdbc - Fatal编程技术网

包com.mysql.jdbc.PreparedStatement之间的区别是什么;和java.sql.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(?)");

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

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所做的。