JDBC 在其文档中指出它有 4 个实现来连接到数据库。我不太明白这 4 个实现是什么意思,我想知道 JDBC 是否真的与数据库无关。也就是说,对于每种类型的数据库,我是否需要“驱动程序”,例如 MYSQL (jConnector)?
我正在编写一个应用程序来支持 Oracle、MySQL 和 MSSQL。
参考: http ://docs.oracle.com/javase/tutorial/jdbc/basics/gettingstarted.html
谢谢
JDBC 在其文档中指出它有 4 个实现来连接到数据库。我不太明白这 4 个实现是什么意思,我想知道 JDBC 是否真的与数据库无关。也就是说,对于每种类型的数据库,我是否需要“驱动程序”,例如 MYSQL (jConnector)?
我正在编写一个应用程序来支持 Oracle、MySQL 和 MSSQL。
参考: http ://docs.oracle.com/javase/tutorial/jdbc/basics/gettingstarted.html
谢谢
不幸的是,您将需要所有数据库类型的驱动程序。
如果你想成为真正的数据库不可知论者,你需要使用 JPA:
http://en.wikipedia.org/wiki/Java_Persistence_API
使用它的一种实现。最受欢迎的一种是 Hibernate:
使用 JDBC 时,您使用的是与数据库无关的 API。此 API 的接口(Connection、Statement 等)由目标数据库的 JDBC 驱动程序实现。因此,如果您使用 Oracle,则需要一个 oracle 驱动程序。
是的,JDBC API 与数据库无关——您只需要提供适当的驱动程序。当然,你发送的 SQL 不会是,除非你使用JPA
JDBC 在它的文档中指出它有 4 个实现来连接到数据库
不,它没有。它可能表明(当前)有 4 个实现级别。然而,实现的数量取决于(至少)目标数据库的数量和每个数据库的实现的迭代次数,这两者都远大于 4。
我已经在这个答案中解释了单独使用 JDBC 真正与供应商无关是多么困难。这有两层:
正如其他人所提到的,JPA/Hibernate帮助您抽象出一些差异,主要是通过删除对更“高级”SQL 功能的访问(包括派生表、联合等,至少从版本 5 开始)。对于方言的更以 SQL 为中心的抽象,jOOQ是一个流行的选择。
免责声明:我在 jOOQ 背后的公司工作。