DBMS特定的驱动程序生成什么?

时间:2018-01-04 17:07:40

标签: sql database jdbc relational-database driver

来自数据库管理系统,作者:Raghu Ramakrishnan,Johannes Gehrk

  

ODBC和JDBC在可执行文件级别实现可移植性   引入额外的间接层次。全部直接   与特定DBMS的交互通过a进行   DBMS特定的驱动程序。驱动程序是一个软件程序   将ODBC或JDBC调用转换为特定于DBMS   呼叫即可。驱动程序是按需动态加载的   应用程序将访问的DBMS仅在以下时才知道   运行。可用的驱动程序已在驱动程序中注册   经理。

     

值得注意的一点是一个驱动程序没有   必然需要与理解的DBMS交互   SQL 即可。 驱动程序转换SQL就足够了   命令从应用程序转换为等效命令   DBMS理解。因此,在本节的其余部分,我们   指驱动程序与之作为数据源进行交互的数据存储子系统。

  1. “DBMS特定的驱动程序将ODBC或JDBC调用转换为 DBMS特定的调用。“DBMS特定的调用”在这里意味着什么?是 他们的SQL语句?

  2. “驱动程序将应用程序中的SQL命令转换为DBMS理解的等效命令。”

    • “DBMS理解的等效命令”在这里意味着什么?它们是SQL语句吗?

    • 使用JDBC API的应用程序使用的SQL方言是什么?它是否与标准化SQL相同或非常接近,因为它不能是MySQL,PostgreSQL,SQL Server或Oracle数据库中使用的SQL方言?

  3. “驱动程序不一定需要与理解SQL的DBMS交互。”

    • JDBC驱动程序是否可以与理解与SQL不同的语言的关系数据库一起使用?
    • JDBC驱动程序可以与非关系数据库一起使用(因此使用与SQL不同的语言)吗?

2 个答案:

答案 0 :(得分:1)

这里的“调用”是“API调用”的简写,可以在其中传递SQL语句。 “SQL命令”与“SQL语句”同义。

JDBC驱动程序从Java应用程序接收JDBC API(通常是DBMS不可知)调用,并向DBMS发出特定于DBMS的API调用。 ODBC驱动程序从C应用程序接受ODBC API(通常是DBMS不可知)调用,并向DBMS发出特定于DBMS的API调用(通常但不总是向DBMS“本机”网络客户端库)。

在某些情况下,ODBC和JDBC标准为SQL提供了特殊的语法,这些语法在DBMS之间变化很大。该应用程序发出符合标准的特殊SQL语法,DBMS特定的驱动程序将该DBMS不可知的SQL方言转换为目标DBMS的DBMS特定方言。 (示例ODBC section,示例JDBC section

答案 1 :(得分:1)

DBMS特定的调用意味着驱动程序将您对JDBC API的调用转换为对数据库服务器上的API的调用(可能不同,甚至可能非常不同)。例如,调用Connection.createStatement()可能会转换为使用命令allocateStatement

调用服务器

等效命令在这里意味着,驱动程序可以解析您的SQL并将其转换为完全不同的查询语言,甚至可以转换为数据库理解的低级命令。例如,考虑允许您查询excelsheet的JDBC或ODBC驱动程序。 Excel本身不了解SQL。

另一个例子,Firebird的前身之一有自己的查询语言(这是在SQL标准化之前),它总是被编译成低级命令。当他们最初添加对(动态)SQL的支持时,这纯粹是在客户端驱动程序中实现的。此客户端驱动程序将SQL语句解析并编译为相同的低级命令,然后将这些命令发送到服务器。服务器不理解SQL,而是接收了等效命令'它确实理解。