oracle jdbc驱动版本疯狂
为什么 Oracle 为每个(!)数据库版本提供不同(!)版本的 JDBC 驱动程序,例如 ojdbc14.jar?
这些文件都有不同的大小,因此可能有不同的内容。
背景:
保存数据时,我们收到一个随机且看似不可重现的错误,提示“无效数字”(我们猜测是时间戳)。 但这并不是什么特别的声明。 大多数时候,它保存得很好。 每月一次,看似无害的声明就会失败。
因此,我仔细查看了 Oracle 的下载站点,发现尽管文件共享相同的名称,但没有一个文件大小匹配。
我们的产品在客户维护的数据库上运行,即客户运行的任何版本和补丁都是如此。
那么我们使用什么驱动程序呢? 最新的(Oracle 11g) - 尽管它通常是 9i 和 10g 数据库?
他们为什么不将所有版本链接到同一个“一个驱动程序适合所有”文件?
或者是否存在微小的差异导致像我们的随机误差这样的影响?
编辑:我对 9i 数据库的看法是错误的。
Why the heck does Oracle offer a different(!) version of the JDBC driver, e.g. ojdbc14.jar, for every(!) database version?
The files all have different sizes and thus probably different content.
background:
We get a random and seemingly irreproducible error saying "invalid number" when saving data (we guess it's the Timestamp). But it's not any particular statement. Most of the time, it saves just fine. Just once a month a harmless looking statement will fail.
So i had a closer look at Oracle's download site and noticed that none of the filesizes match despite files sharing the same name.
Our product is run on databases maintained by our clients, i.e. whatever version and patch the clients have running is what it is.
So what driver do we use? The latest (Oracle 11g) - despite the fact that it's usually 9i and 10g databases?
Why don't they just link all versions to the same "one driver suits all" file?
Or are there minute differences leading to effects like our random errors?
EDIT: i was mistaken about the 9i databases.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请参阅兼容性矩阵
https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-getting-started.html#GUID-926E5324-D89A-4A00-B1AE-975C1089F0EA< /a>
另请记住,时间戳数据类型仅自 Oracle 10 起可用。
please see the compatibility matrix at
https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-getting-started.html#GUID-926E5324-D89A-4A00-B1AE-975C1089F0EA
Also take in mind that the timestamp datatype is only available since Oracle 10.
ojdbc14.jar、ojdbc5.jar、ojdbc6.jar、ojdbc7.jar 和 ojdbc8.jar 中的数字指的是所使用的 Java 编译器的版本。 Java 的每个版本都会出现新的 JDBC API,因此这些数字对于了解预期结果很有用。 例如,在 Java 8 中,
java.sql.PreparedStatement
中有一个新方法executeLargeUpdate
。 该方法将在ojdbc8.jar中实现,但在ojdbc7.jar中不会实现。 另外,如果您的运行时使用 Java 7,那么您就知道不能使用 ojdbc8.jar,否则您将遇到java.lang.UnsupportedClassVersionError
错误。 这就是 Oracle 在 jar 名称中包含这些数字的原因。 另请注意,如果您想知道该 jar 来自哪个 Oracle 数据库版本,可以运行 java -jar ojdbc8.jar。 数据库和驱动程序都是向后兼容的(最多 1 个主要版本),因此,即使建议这样做,您也不必在两层上使用相同版本的产品。The numbers in ojdbc14.jar, ojdbc5.jar, ojdbc6.jar, ojdbc7.jar and ojdbc8.jar refer to the version of the Java compiler that was used. With every version of Java come new JDBC APIs so these numbers are useful to know what to expect. For example in Java 8, there is a new method
executeLargeUpdate
injava.sql.PreparedStatement
. This method will be implemented in ojdbc8.jar but not in ojdbc7.jar. Also if your runtime uses Java 7 then you know you can't use ojdbc8.jar otherwise you'll run into ajava.lang.UnsupportedClassVersionError
error. These are the reasons why Oracle includes these numbers in the jar's name. Also note that if you want to know from which Oracle Database release the jar comes from you can runjava -jar ojdbc8.jar
. Both the Database and the driver are backward compatible (up to 1 major release) so, even though it's recommended, you don't have to use the same version of the product on both tiers.当我们将 Oracle 数据库从 8.1.7 升级到 10.2.0 时,我能够使用相同的 Oracle jdbc 驱动程序 (ojdbc14.jar)。 所以他们的jdbc驱动同时支持相当多的版本。 当然,某些驱动程序可能存在错误,但计划是同时支持更多版本。
When we upgraded our Oracle database from 8.1.7 to 10.2.0, I was able to use the same Oracle jdbc driver (ojdbc14.jar). So their jdbc driver supports quite a few versions at the same time. Of course it's possible that some of the drivers are buggy, but the plan is to support more versions at the same time.