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