我有一个应用程序托pipe在JBoss上。 使用oracle的jdbc驱动程序连接到一个oracle 10.2g数据库。 任何人都可以指导会议build立时会发生什么。
只是想了解JDBC / ODBC的内部工作。
任何帮助表示赞赏。
那么首先,JDBC和ODBC不兼容。 JDBC是Java对ODBC的回答,它们占据了相同的位置,但不能使用JDBC连接到ODBC数据源,反之亦然。 现在在Java中有一个jdbc-odbc桥接,但是这是一个兼容性破解,而不是一个本地连接器(翻译将进入JDBC-> ODBC – >(目标数据库),而不是JDBC – >(目标数据库))
ODBC只是一个访问不同数据库中数据的标准化接口。 您将ODBC安装到(无论数据库)驱动程序在您的机器上,然后创build一个ODBC数据源,然后您可以通过odbc连接到该数据源,而不必为原始数据库configuration本机驱动程序。 或者,如果数据库具有ODBC能力,则可以通过导入驱动程序直接连接到该数据库。
好处就是你可以把所有的代码写成odbc兼容的,而且只需要很小的修改,不pipe真正的数据库types是什么。
消极的是性能受到打击,偶尔奇怪的行为,因为odbc没有完全正确地翻译一些数据库的具体行动。 支持不同。 如果你使用ODBC来连接一些遗留的数据库,你可能有很多工作要做,但是如果你使用它来连接到一个访问数据库,那么它将工作得很完美。
连接发生的过程相对简单。 您发送“标准化”查询,JDBC或ODBC驱动程序将其转换为您尝试访问的本机框架,然后提交查询。 如果数据库返回任何内容,则该过程被颠倒过来。
如果你有问题,我会检查你使用的驱动程序。 如果你用java导入一个坏的驱动程序,没有什么可行的。 你需要做的第一件事是logging错误。 如果您正在使用ODBC数据源,则只需在属性中打开login(查看驱动程序文档以找出正确的设置;它们会有所不同)。
如果您使用JDBC,则可能需要自己捕获并loggingSQLException。
首先,ODBC和JDBC是完全不同的API(尽pipe具有相同的目的,即与数据库接口)。
对于JDBC的内部工作:
粗略地说,JDBC驱动程序将打开一个到要使用的数据库的连接,并将传递查询来执行,然后发回任何结果。 究竟如何取决于您使用的特定JDBC驱动程序(驱动程序是针对每个DBMS的)。 有些人会使用JNI来调用非Java库(例如Oracle的“OCI驱动程序”),其他人则会实现完整的协议来与Java中的DBMS(例如Oracle的“瘦驱动程序”,MySQL的驱动程序)交谈。
如果您需要更多具体信息,请澄清您的问题。
JDBC和ODBC上的维基百科页面也给出了这个主题的一个很好的概述。