是否可以使用JDBC作为RDBMS的抽象层?

时间:2011-02-09 19:53:51

标签: java sql jdbc relational-database abstraction

JDBC提供了一个API,可用于连接到不同的RDBMS或类似的数据存储。但是数据存储区的实现方式不同(例如SQL方言)。

是否可以以这种方式使用JDBC,我的查询和语句适用于大多数常见的RDBMS(例如:Oracle,PostgreSQL,SQL Server,MySQL)?

这个问题在两个方面对我来说很有意思: *通用SQL(INSERT,UPDATE,SELECT等) *访问元数据(获取有关表和列的信息)

我目前正在尝试使用自编写的持久性框架,并希望在其下插入JDBC数据存储区。因此,如果我编写一个JDBC数据存储区适配器,如果它可以在大多数常见的RDBMS上运行,那就太好了。

提前致谢

3 个答案:

答案 0 :(得分:5)

JDBC 是RDBMS的抽象层。

不幸的是,正如您在问题中已经认识到的那样,抽象漏洞

如果你坚持使用所有RDBMS共有的SQL和元数据的小部分,你会没事的。但实际上,你很可能快速超出这些限制。

答案 1 :(得分:2)

不,这是不可能的,因为它们有两个完全不同的用途。

JDBC是DBMS 通信协议的抽象,而SQL是一种查询语言。

使用该通信协议将用SQL编写的查询发送到服务器,然后通过该协议返回查询结果(以DBMS独立方式)。

通信协议与查询之间似乎存在模糊界限,因为JDBC API还指定了从服务器(或结果)检索元数据的调用。但实际上司机可以自由使用任何认为合适的交通工具。这不一定是SQL查询。

答案 2 :(得分:1)

JDBC充当RDBMS的抽象,大致与SQL相同:基本查询足够兼容,但您不断遇到只能使用特定于供应商的功能实现的需求:

  • 自动增量列
  • 寻呼
  • 国际化