odbc 驱动程序如何工作?

odbc 驱动程序如何工作?

我有一个托管在 jboss 上的应用程序。使用 oracle 的 jdbc 驱动程序连接到 oracle 10.2g 数据库。有人可以指导建立会话时会发生什么吗?

只是想了解 JDBC/ODBC 的内部工作原理。

任何帮助都将受到赞赏。

答案1

首先,JDBC 和 ODBC 不兼容。JDBC 是 Java 对 ODBC 的回应,它们填补了同样的空白,但您不能使用 JDBC 连接到 ODBC 数据源,反之亦然。现在 Java 中有一个 jdbc-odbc 桥,但那是一种兼容性黑客,而不是本机连接器(转换将是 JDBC->ODBC->(目标数据库)而不是 JDBC->(目标数据库))

ODBC 只是一种用于访问不同数据库数据的标准化接口。您可以在计算机上安装 ODBC 到(任何数据库)驱动程序,然后创建 ODBC 数据源,然后就可以连接到通过 odbc 连接数据源,而不必为原始数据库配置本机驱动程序。或者,如果数据库支持 ODBC,您可以通过导入驱动程序直接连接到数据库。

好处是,您可以编写所有代码以与 odbc 兼容,并且无论实际数据库类型是什么,只需进行少量修改即可工作。

缺点是性能下降,偶尔会出现奇怪的行为,因为 odbc 无法以正确的方式转换某些数据库特定的操作。支持各不相同。如果您使用 ODBC 连接到某些旧数据库,您可能需要做很多工作,但如果您使用它连接到访问数据库,那么它将完美无缺。

连接时发生的过程相对简单。您发送“标准化”查询,JDBC 或 ODBC 驱动程序将其转换为您尝试访问的本机框架,然后提交查询。如果数据库返回任何内容,则该过程将反转。

如果您遇到问题,我会检查您使用的驱动程序。如果您使用 Java 导入了错误的驱动程序,则一切都无法正常工作。您需要做的第一件事是记录错误。如果您使用的是 ODBC 数据源,则只需在属性中打开日志记录即可(查看驱动程序文档以找出正确的设置;它们会有所不同)。

如果您使用 JDBC,您可能必须自己捕获并记录 SQLException。

答案2

首先,ODBC 和 JDBC 是完全不同的 API(尽管具有相同的目的,即与数据库交互)。

JDBC的内部工作原理:

粗略地说,JDBC 驱动程序将打开与您要使用的数据库的连接,并传递要执行的查询,然后返回任何结果。具体如何执行取决于您使用的特定 JDBC 驱动程序(驱动程序特定于每个 DBMS)。有些驱动程序将使用 JNI 来调用非 Java 库(例如 Oracle 的“OCI 驱动程序”),其他驱动程序将实现完整的协议以使用 Java 与 DBMS 通信(例如 Oracle 的“thin 驱动程序”、MySQL 的驱动程序)。

如果您需要更具体的信息,请澄清您的问题。

维基百科上有关 JDBC 和 ODBC 的页面也对该主题进行了很好的概述。

相关内容