我可以在没有 Oracle JDBC 驱动程序的情况下连接到 Oracle 数据库吗?
Posted
技术标签:
【中文标题】我可以在没有 Oracle JDBC 驱动程序的情况下连接到 Oracle 数据库吗?【英文标题】:Can I connect to Oracle database without Oracle JDBC driver? 【发布时间】:2019-10-03 20:10:16 【问题描述】:TL;DR:
有没有办法在没有 Oracle JDBC 驱动程序的情况下通过 JDBC 连接到 Oracle DB?或者任何其他方式(例如休眠)?
全文:
我们有一个现有的 Spring Boot 应用程序,它使用 OJDBC 驱动程序连接到一个 Oracle 11c 数据库实例。 Spring Boot 内部使用 JdbcTemplate 来执行一些插入和选择,基本上是 5 或 6 种语句。从技术上讲,它工作正常。
但是我们处于一个有趣的情况,我们构建的代码必须通过一系列检查(我们作为一家大型国际公司的分包商工作),其中一部分检查是许可证检查。 BlackDuck (https://www.blackducksoftware.com) 用于报告解决方案中链接的每个库(在我们的例子中大约 280 个),我们必须手动为每个库添加版权声明(例如:“Copyright © 2005-2019 The Apache软件基金会。保留所有权利。")。我们在 Oracle 驱动程序中添加了 Oracle 技术网许可,但被国际公司的法律团队拒绝:
“除非我们确实获得了使用 Oracle 数据库的许可(您没有),否则我们不能允许使用和分发 Oracle JDBC 驱动程序。这些驱动程序是根据 Oracle 技术网络许可许可的,它有义务XXX [公司名称] 将 Oracle 指定为第 3 方受益人,这是我们的法律部门不允许的。因此,您必须找到一个兼容的替代品,该替代品在开源下获得许可。”
现在,我们显然正在尝试解决这个问题(看到接收解决方案的最终客户端安装了许可的 Oracle DB,我们可以在公司的 Nexus 存储库中看到早期版本的 OJDBC 驱动程序),但是我想问一下,有没有办法在没有 Oracle JDBC 驱动程序的情况下通过 JDBC 连接到 Oracle DB?或任何其他方式(例如休眠)?据我所知,Oracle DB 通信协议不是完全标准的,这就是您需要 Oracle 驱动程序的原因。有没有我不知道的开源替代方案?
【问题讨论】:
【参考方案1】:Oracle DB 通信协议不仅“不完全标准”,对于 SQL 数据库的任何在线通信协议,根本没有 SQL 或 JDBC 标准,它们都是专有的。
据我所知,没有开源替代方案,而且没有甲骨文的帮助是不可能的,因为据我所知,该协议并未公开指定。我们通过让拥有 Oracle 许可证的客户将驱动程序添加到他们的应用程序部署中来解决了类似的问题,这样我们就不会重新分发它,而他们才是使用它的人。
【讨论】:
感谢您确认我的想法。我将尝试找到一些有关此主题的文章,并将其提交给法律团队。我们在考虑类似的解决方案,基本上我们将 pom.xml 中的 OJDBC 驱动程序标记为“已提供”,这样它就不会随应用程序分发。 Oracle JDBC 驱动程序在 Central Maven (medium.com/@kuassimensah) 上可用。 pom 文件确实包含所需的 FUTC 许可证。因此,您可以使用 19.3 JDBC 驱动程序。【参考方案2】:是的,使用别人的驱动程序。以Progress 为例。
我并不是代表 Oracle 就本驱动程序的质量或有关您决定不使用我们的驱动程序的法律条款发表意见。但是,我们的 Java 应用程序驱动程序还有其他替代方案,这就是其中之一。
【讨论】:
以上是关于我可以在没有 Oracle JDBC 驱动程序的情况下连接到 Oracle 数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring JDBC 无法加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver]
如何通过 JDBC 驱动列出服务器上的 PostgreSQL 数据库?