我已将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包的转换?
答案 0 :(得分:12)
为什么要显示两个不同的导入包?
因为这两个类都存在于您的编译时类路径中,并且您的IDE试图提供帮助。
以及为什么需要为com.mysql.jdbc.PreparedStatement包进行转换?
由于prepareStatement()
specified要java.sql.PreparedStatement
,而不是com.mysql.jdbc.PreparedStatement
。
java.sql.PreparedStatement
是界面,您应该始终使用此功能。 MySQL是一个具体的实现,你不应该将你的JDBC代码紧密耦合到MySQL特定的实现。否则,如果您想将数据库服务器(以及JDBC驱动程序)切换到不同的供应商(如PostgreSQL),则必须对代码进行大量更改。如果您一直在使用java.sql
包中的标准JDBC接口,那么您需要更改的只是JDBC URL,也可能是用户名和密码以及一些特定于DB的SQL语句。