什么时候应该将Java存储过程与Oracle数据库一起使用...缺点是什么?
PL / SQL不是我的母语。 Oracle支持使用Java编写存储过程。与用PL / SQL编写存储过程相比,这样做有什么好处?
解决方案
回答
我已经使用Oracle嵌入式Java解决了两个问题:
1)执行一个PLSQL过程,该过程将查询结果批量存储在一个文本文件中,并通过FTP发送。该文件非常大,我使用Java对其进行压缩。
2)在与数据库直接连接的客户机/服务器应用程序中,比较用MD5散列的用户发送的密码与应用程序的密码(不是数据库的用户密码),以使密码不会通过网络以纯文本格式传输。我不确定这是否是解决此问题的更好解决方案,我现在要问它。 :)
回答
好处:
- 可以在客户端和数据库中共享相同的应用程序逻辑
- 访问Java API。注意每个数据库支持哪种Java版本-我相信10g仅支持1.4(这意味着在我的工作中,我们必须非常小心,因为我们的主要代码库最近已移至1.5)。
缺点:
- Java存储过程执行大量数据库访问可能会非常慢
- 难以部署代码
回答
在Oracle世界中,一般的开发顺序应为:
只要有可能,就完全使用SQL来完成。
如果我们需要的不只是SQL,请使用PL / SQL。
如果我们需要PL / SQL无法执行的操作,请使用Java。
如果所有其他方法均失败,请使用C。
如果我们无法使用C执行此操作,请慢慢退出该问题....
PL / SQL存储过程是将业务逻辑转移到任何集成技术都可以访问的层的绝佳方法。包中的业务逻辑(不要编写独立的函数和过程,它们会随着时间的推移以无法管理的方式增长)可以由Java,C#,PL / SQL,ODBC等执行。
PL / SQL是在纯SQL之外处理大量数据的最快方法。 "批量绑定"功能意味着它可以与SQL引擎一起很好地工作。
Java存储过程最适合创建与网络或者操作系统交互的功能。例如,发送电子邮件,FTP'ing数据,输出到文本文件并将其压缩,通常执行主机命令行。
使用Oracle时,我从来不需要编写任何C语言,但是大概可以将其用于与遗留应用程序集成。
回答
Java使编写与数据库无关的代码成为可能。它使我们可以重用现有代码并大大提高生产率。
我发现对Java存储过程有用的一件事是文件IO。与Oracle的UTL_FILE软件包相比,Java具有丰富得多的文件IO功能集,允许开发人员删除文件,添加目录等。
回答
仅当我们无法在PL / SQL中做到这一点时(或者PL / SQL证明速度太慢,我相信这种情况很少见)。
作为一个案例研究...我们在生产环境中运行着一个Java存储过程(Oracle 9i),它最初是用Java编写的,因为当时我们认为Java很酷,这是我早已改变主意的事情。反正。有一天,重新启动Java SP后,数据库崩溃了。经过oracle支持的反复交流之后,他们真的不知道问题出在哪里,唯一的建议就是停机。某些事情是不可行的。 30分钟后,我用PL / SQL重写了Java SP。
现在,它运行速度更快,是oracle" native",与其他对象共享相同的部署过程,并且更易于调试。
PL / SQL是一种非常强大的语言。如果我们正在编写存储过程,请花一些时间来学习它,而不仅仅是在Java中做事,因为这就是我们所知道的。
回答
主要优点是可以访问PL / SQL中未提供的API和语言功能。例如,我将它们用于正则表达式处理,文件/目录操作和XML解析。
有许多缺点:
不良的工具支持缺乏对JVM DBA的控制,这通常不是用Java进行的。为了支持生产代码,我们或者需要对DBA进行更多培训,或者请受过Java培训的支持人员
将Java移至应用程序服务器通常是一种更好的方法,因为这可以抵消这些缺点。出色的工具支持,对JVM的强大控制以及在流行的应用服务器中接受过大量培训的人员,因此轻松找到支持人员。从数据库移开性能命中有机会成本,但是将Java保持在数据库附近并不会给我们带来巨大的性能提升。
我们绝对需要一个理由通过a)PL / SQL存储过程或者b)数据库外部的Java在数据库中使用Java。
回答
答案永远不会。如果我们需要编写程序来加载或者处理数据,则需要从网络上的另一台计算机在数据层之外进行。
当本机查询语言更适合手头工作时,直接在数据层上运行外部应用程序或者禁止在数据层中进行进程内使用或者外部语言的错误应用是很好的,并且对于小规模的内部定制应用程序完全可以接受应用。他们根本不在那个领域之外。