Viky Asked: 2009-10-06 07:20:19 +0800 CST2009-10-06 07:20:19 +0800 CST 2009-10-06 07:20:19 +0800 CST odbc 驱动程序是如何工作的? 772 我有一个托管在 jboss 上的应用程序。使用 oracle 的 jdbc 驱动连接到 oracle 10.2g 数据库。任何人都可以指导建立会话时会发生什么。 只是想了解 JDBC/ODBC 的内部工作。 任何帮助表示赞赏。 oracle 2 个回答 Voted Satanicpuppy 2009-10-06T07:48:50+08:002009-10-06T07:48:50+08:00 首先,JDBC 和 ODBC 不兼容。JDBC 是 Java 对 ODBC 的回应,它们填补了相同的领域,但是您不能使用 JDBC 连接到 ODBC 数据源,反之亦然。现在在 Java 中有一个 jdbc-odbc 桥,但这是一个兼容性黑客,而不是本机连接器(翻译将转到 JDBC->ODBC->(Target Database) 而不是 JDBC->(Target Database)) ODBC 只是用于访问来自不同数据库的数据的标准化接口。您在您的机器上安装 ODBC 到(无论数据库)驱动程序,然后创建一个 ODBC 数据源,然后您可以通过 odbc 连接到该数据源,而不必为原始数据库配置本机驱动程序。或者,如果数据库支持 ODBC,您可以通过导入驱动程序直接连接到它。 好处是您可以编写所有与 odbc 兼容的代码,并且无论真正的数据库类型是什么,只需进行少量修改即可工作。 负面影响是性能下降,并且偶尔会出现奇怪的行为,因为 odbc 无法以完全正确的方式翻译某些特定于数据库的操作。支持因人而异。如果您使用 ODBC 连接到一些遗留数据库,您可能需要做很多工作,但如果您使用它连接到 access 数据库,那么它将完美无缺。 连接上发生的过程相对简单。您发送“标准化”查询,JDBC 或 ODBC 驱动程序将其转换为您尝试访问的本机框架,然后提交查询。如果数据库返回任何内容,则过程相反。 如果您遇到问题,我会检查您正在使用的驱动程序。如果你用 java 导入一个坏的驱动程序,什么都不会正常工作。您需要做的第一件事是记录错误。如果您使用的是 ODBC 数据源,您只需在属性中打开日志记录(查看驱动程序文档以找出正确的设置;它们会有所不同)。 如果您使用 JDBC,您可能必须自己捕获并记录 SQLException。 sleske 2009-10-06T07:47:44+08:002009-10-06T07:47:44+08:00 首先,ODBC 和 JDBC 是完全不同的 API(尽管目的相同,即与数据库交互)。 至于JDBC的内部工作: 粗略地说,JDBC 驱动程序将打开与您要使用的数据库的连接,并将您的查询传递给执行,然后发回任何结果。具体如何执行取决于您使用的特定 JDBC 驱动程序(驱动程序特定于每个 DBMS)。一些将使用 JNI 调用非 Java 库(例如 Oracle 的“OCI 驱动程序”),另一些将实现与 Java 中的 DBMS 对话的完整协议(例如 Oracle 的“瘦驱动程序”,MySQL 的驱动程序)。 如果您需要更具体的信息,请澄清您的问题。 关于 JDBC 和 ODBC 的 Wikipedia 页面也很好地概述了该主题。
首先,JDBC 和 ODBC 不兼容。JDBC 是 Java 对 ODBC 的回应,它们填补了相同的领域,但是您不能使用 JDBC 连接到 ODBC 数据源,反之亦然。现在在 Java 中有一个 jdbc-odbc 桥,但这是一个兼容性黑客,而不是本机连接器(翻译将转到 JDBC->ODBC->(Target Database) 而不是 JDBC->(Target Database))
ODBC 只是用于访问来自不同数据库的数据的标准化接口。您在您的机器上安装 ODBC 到(无论数据库)驱动程序,然后创建一个 ODBC 数据源,然后您可以通过 odbc 连接到该数据源,而不必为原始数据库配置本机驱动程序。或者,如果数据库支持 ODBC,您可以通过导入驱动程序直接连接到它。
好处是您可以编写所有与 odbc 兼容的代码,并且无论真正的数据库类型是什么,只需进行少量修改即可工作。
负面影响是性能下降,并且偶尔会出现奇怪的行为,因为 odbc 无法以完全正确的方式翻译某些特定于数据库的操作。支持因人而异。如果您使用 ODBC 连接到一些遗留数据库,您可能需要做很多工作,但如果您使用它连接到 access 数据库,那么它将完美无缺。
连接上发生的过程相对简单。您发送“标准化”查询,JDBC 或 ODBC 驱动程序将其转换为您尝试访问的本机框架,然后提交查询。如果数据库返回任何内容,则过程相反。
如果您遇到问题,我会检查您正在使用的驱动程序。如果你用 java 导入一个坏的驱动程序,什么都不会正常工作。您需要做的第一件事是记录错误。如果您使用的是 ODBC 数据源,您只需在属性中打开日志记录(查看驱动程序文档以找出正确的设置;它们会有所不同)。
如果您使用 JDBC,您可能必须自己捕获并记录 SQLException。
首先,ODBC 和 JDBC 是完全不同的 API(尽管目的相同,即与数据库交互)。
至于JDBC的内部工作:
粗略地说,JDBC 驱动程序将打开与您要使用的数据库的连接,并将您的查询传递给执行,然后发回任何结果。具体如何执行取决于您使用的特定 JDBC 驱动程序(驱动程序特定于每个 DBMS)。一些将使用 JNI 调用非 Java 库(例如 Oracle 的“OCI 驱动程序”),另一些将实现与 Java 中的 DBMS 对话的完整协议(例如 Oracle 的“瘦驱动程序”,MySQL 的驱动程序)。
如果您需要更具体的信息,请澄清您的问题。
关于 JDBC 和 ODBC 的 Wikipedia 页面也很好地概述了该主题。