2

JDBC 在其文档中指出它有 4 个实现来连接到数据库。我不太明白这 4 个实现是什么意思,我想知道 JDBC 是否真的与数据库无关。也就是说,对于每种类型的数据库,我是否需要“驱动程序”,例如 MYSQL (jConnector)?

我正在编写一个应用程序来支持 Oracle、MySQL 和 MSSQL。

参考: http ://docs.oracle.com/javase/tutorial/jdbc/basics/gettingstarted.html

谢谢

4

5 回答 5

5

不幸的是,您将需要所有数据库类型的驱动程序。

如果你想成为真正的数据库不可知论者,你需要使用 JPA:

http://en.wikipedia.org/wiki/Java_Persistence_API

使用它的一种实现。最受欢迎的一种是 Hibernate:

http://en.wikipedia.org/wiki/Hibernate_%28Java%29

于 2012-09-28T10:33:39.703 回答
2

使用 JDBC 时,您使用的是与数据库无关的 API。此 API 的接口(Connection、Statement 等)由目标数据库的 JDBC 驱动程序实现。因此,如果您使用 Oracle,则需要一个 oracle 驱动程序。

于 2012-09-28T10:35:14.557 回答
0

是的,JDBC API 与数据库无关——您只需要提供适当的驱动程序。当然,你发送的 SQL 不会是,除非你使用JPA

于 2012-09-28T10:34:05.460 回答
0

JDBC 在它的文档中指出它有 4 个实现来连接到数据库

不,它没有。它可能表明(当前)有 4 个实现级别。然而,实现的数量取决于(至少)目标数据库的数量每个数据库的实现的迭代次数,这两者都远大于 4。

于 2012-09-28T11:18:20.723 回答
0

我已经在这个答案中解释了单独使用 JDBC 真正与供应商无关是多么困难。这有两层:

  • JDBC 是用于连接数据库的网络协议的一个非常好的抽象。尽管您在这里和那里都需要一些特定于供应商的怪癖。如果您绑定到单个 RDBMS 供应商,这些怪癖很好,但如果您需要支持多个产品,它会变得非常麻烦
  • SQL 是一种非常好的查询语言标准。不过,同样,您在这里和那里都需要很多特定于供应商的怪癖。同上,支持 1 个 RDBMS 及其怪癖是可以的,但很难支持多个。

正如其他人所提到的,JPA/Hibernate帮助您抽象出一些差异,主要是通过删除对更“高级”SQL 功能的访问(包括派生表、联合等,至少从版本 5 开始)。对于方言的更以 SQL 为中心的抽象,jOOQ是一个流行的选择。

免责声明:我在 jOOQ 背后的公司工作。

于 2021-08-20T07:55:14.777 回答