如何从MySQL调用Java代码?

11

我找到了一篇2008年的文章,讨论如何从MySQL中调用Java代码。由于该过程涉及与MySQL的实验性分支一起工作,因此有很多警告和免责声明。

对于我想做的项目来说,能够在MySQL中访问Java库将非常有用,类似于Oracle的Java存储过程。现在这种功能是否作为MySQL的标准功能存在?如果没有,哪些开源RDBMS支持类似于Oracle的Java存储过程?


3
+1 有意思。我一直把数据存储在数据库中,并在业务层面实现任何逻辑。事实上,我对这个方法非常信奉。我很想看到一个调用Java代码的项目,证明这是一个好的设计决策。你有相关的链接吗? - D.C.
1
自定义函数可以超越DB的能力,比如说。然而,我也非常质疑能够这样做的价值。数据库存在的目的是存储/管理数据,而不是进行一些业务操作。 - BalusC
1
@darren,这个例子涉及到一种基于图形的数据类型(化学结构),无法使用内置的MySQL函数与查询匹配。Java库将把查询和文本字段的内容转换为一个可以匹配的内存对象。将这个逻辑保留在数据库层中,例如,可以使连接保持在数据库内部,这似乎是它们应该存在的地方。至少这就是想法。 - Rich Apodaca
5个回答

6
PostgreSQL支持可插拔过程语言,并存在一个项目将PL/Java作为语言扩展到PostgreSQL中。
我不建议在RDBMS中放置太多代码。在应用层开发、测试和调试代码的工具比RDBMS中的工具更好。
此外,许多开发人员不明白在RDBMS中的代码应该遵守事务隔离。他们尝试从触发器等发送电子邮件。我认为具有副作用的代码应该在应用程序层中,以便您不会创建虚幻效果(例如,即使回滚更改,电子邮件也可能通知数据库更改)。

1
当然,理智的人不会直接从RDBMS发送电子邮件(例如邮件服务器可能已关闭)。正确的方法是将电子邮件添加到电子邮件队列表中,并有一个单独的进程检查此电子邮件队列表并实际发送电子邮件。这解决了事务问题,因为回滚会回滚对队列表中电子邮件的添加。 - Tony BenBrahim

2

1

我完全同意Bill的观点,但我可以想象业务规则被存储(而不是处理)在数据库中。我在这里考虑的是drools。引擎将在应用程序中,但规则可以在数据库中具有管理前端。

这样的东西对于不仅参数变化,而且公式也可能会变化的情况非常有趣。


1

根据您目前提供的有限信息,很难给出好的建议。然而:

... 这个例子涉及基于图形的数据类型(化学结构),无法使用内置的MySQL函数匹配查询。Java库将把查询和文本字段的内容转换为可匹配的内存对象。将此逻辑保留在数据库层中,例如,可以使连接保持在数据库中,这似乎是它们所属的地方。至少这是想法。

我不认为我会在MySQL中使用数据库端的Java来解决这个问题。相反,我会考虑以下选项:

  • 使用对象关系映射(例如使用Hibernate)如JDO或JPA来处理基于图形的数据模型与数据库提供的映射。您不一定要使用RDBMS作为后端,但这可能是开始的最佳地点...除非您已经发现这是性能问题。

  • 再次查看数据模型和数据访问模式。查看是否可以找到某些转换,允许您的应用程序的主要查询作为(有效的)表连接实现,而无需诉诸服务器端应用程序逻辑。

  • 如果您确实需要使用服务器端应用程序逻辑(出于性能原因!),请使用RDBMS支持的机制。例如,在Oracle中,您将使用PL / SQL,在PostgreSQL中,您有多种选择。准备好切换到更适合您的应用程序要求的不同RDBMS。

我(个人)会避免依赖于某些数据库的试验分支:

  • 考虑一下如果实验分支没有合并回主分支会发生什么。你将被困在依赖于不受支持并可能停止维护的分支的代码库中。

  • 使用目前不受支持的RDBMS分支将妨碍其他想使用您软件的人。

现在显然,如果您软件的长期可行性不是首要问题,您可以选择忽略这些建议。但这可能对某些人很重要;例如,您的研究导师。


使用ORM并不能解决任何问题,它只是掩盖了问题:http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx - Gili

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接