我发现一篇 2008 年的文章讨论了如何从 MySQL 调用 Java 代码。有很多警告和免责声明,因为该过程涉及使用 MySQL 的实验分支。
对于我想到的一个项目,能够访问 MySQL 中的 Java 库将非常有用,类似于 Oracle 的Java 存储过程。这个功能现在是否作为 MySQL 的标准功能存在?如果没有,哪些开源 RDBMS 支持类似于 Oracle 的 Java 存储过程的东西?
我发现一篇 2008 年的文章讨论了如何从 MySQL 调用 Java 代码。有很多警告和免责声明,因为该过程涉及使用 MySQL 的实验分支。
对于我想到的一个项目,能够访问 MySQL 中的 Java 库将非常有用,类似于 Oracle 的Java 存储过程。这个功能现在是否作为 MySQL 的标准功能存在?如果没有,哪些开源 RDBMS 支持类似于 Oracle 的 Java 存储过程的东西?
PostgreSQL 支持可插入的过程语言,并且存在一个项目以使用PL/Java作为语言来扩展 PostgreSQL 。
我不建议在 RDBMS 中放置太多代码。在应用层开发、测试和调试代码的工具比 RDBMS 中的代码工具要好。
此外,许多开发人员不了解 RDBMS 中的代码应该遵守事务隔离。他们尝试从触发器等发送电子邮件。我认为具有副作用的代码应该在应用程序层中,因此您不会创建幻像效果(例如,电子邮件可能会通知数据库更改,即使更改已回滚)。
如果您可以使用 HSQLDB,那么您可以直接从 SQL 调用 java 方法:http: //hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#N1240C
我完全同意 Bill 的观点,但我可以想象将业务规则存储(未处理)在数据库中。我在这里想流口水。引擎将在应用程序中,但规则可以在具有管理前端的数据库中。
对于不仅参数发生变化,而且公式也可能发生变化的场景,这样的野兽会很有趣。
根据您迄今为止提供的有限信息,很难给出好的建议。然而:
...该示例涉及基于图形的数据类型(化学结构),无法与使用内置 MySQL 函数的查询匹配。Java 库会将文本字段的查询和内容转换为可以匹配的内存对象。例如,将这个逻辑保留在 DB 层中会在数据库中保留连接,这似乎是它们所属的地方。至少是这样的想法。
我认为我不会为此在 MySQL 中使用数据库端 Java。相反,我想我会考虑以下选项:
使用诸如 JDO 或 JPA(例如使用 Hibernate)之类的对象关系映射来处理基于图形的数据模型与数据库提供的内容之间的映射。您不一定必须使用 RDBMS 作为后端,但这可能是最好的起点……除非您已经发现这是一个性能问题。
再看看您的数据模型和数据访问模式。看看您是否可以找出一些转换,允许您的应用程序的主要查询被实现为(有效的)表连接,而无需求助于服务器端应用程序逻辑。
如果您确实需要使用服务器端应用程序逻辑(出于性能原因!),请坚持使用您的 RDBMS 支持的机制。例如,在 Oracle 中,您将使用 PL/SQL 和 PostgreSQL,您有很多选择。准备好切换到更适合您的应用程序需求的不同 RDBMS。
我(个人)会避免依赖某些数据库的实验分支:
考虑如果实验分支没有合并回主分支会发生什么。根据不受支持的分支,您将被困在代码库中,并且可能会停止维护并失败。
使用(当前)不受支持的 RDBMS 分支将成为其他可能想要使用您的软件的人的障碍。
现在很明显,如果您的软件的长期生存能力不是主要问题,您可以选择忽略此建议。但这可能对某人很重要;例如你的研究主管。
我意识到这是一篇相当老的文章,但它值得更新。从数据库触发器调用 java 的能力是“Java 编程语言的 SQL 例程和类型”(SQL/JRT) 标准的一部分。
在https://en.wikipedia.org/wiki/SQL/JRT上的 Wikipedia 上阅读有关此内容的更多信息。
在兼容的数据库引擎中有..
HyperSQL: http: //hsqldb.org/ Oracle:https ://www.oracle.com/database/