Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们应该放弃存储过程并从java程序运行数据库调用吗_Java_Database_Db2_Ibm Midrange_Db2 400 - Fatal编程技术网

我们应该放弃存储过程并从java程序运行数据库调用吗

我们应该放弃存储过程并从java程序运行数据库调用吗,java,database,db2,ibm-midrange,db2-400,Java,Database,Db2,Ibm Midrange,Db2 400,我正在努力保持存储过程在我们公司的使用。有一些人说它们不好,我们不应该使用它们。我们在i系列上使用DB2 请在我的论点中帮助我,让存储过程在我的公司保持活力。你不会喜欢这样的,我可能会被彻底遗忘,但我支持你公司的其他人 存储过程用于提供许多好处(安全性、性能等),但通过参数化查询和更好的查询优化,存储过程实际上只是为应用程序增加了另一层开销,并为您提供了更新/修改代码所需的另一个位置 我更喜欢把所有东西都放在一个地方,这样当我需要编辑代码时,我就可以到一个地方进行修改 如果您想了解有关从存储的P

我正在努力保持存储过程在我们公司的使用。有一些人说它们不好,我们不应该使用它们。我们在i系列上使用DB2


请在我的论点中帮助我,让存储过程在我的公司保持活力。

你不会喜欢这样的,我可能会被彻底遗忘,但我支持你公司的其他人

存储过程用于提供许多好处(安全性、性能等),但通过参数化查询和更好的查询优化,存储过程实际上只是为应用程序增加了另一层开销,并为您提供了更新/修改代码所需的另一个位置

我更喜欢把所有东西都放在一个地方,这样当我需要编辑代码时,我就可以到一个地方进行修改

如果您想了解有关从存储的Prcoedures移出的参数的更多详细信息,请参阅这篇CodingHorror文章:


…我刚刚注意到这篇文章是2004年的。我不得不相信,从那时起,数据库已经变得更好了,这意味着今天的情况会比那时更加真实。

通过JDBC做任何事情基本上意味着在您和数据库之间插入了一个网络层。总而言之,这意味着数据更“遥远”,到达您的速度更慢。存储过程可以直接处理数据库中的数据,由此产生的速度差异可能会让您大吃一惊

请注意,您可以用任何IBMi语言(包括Java)编写存储过程,以防这是编程技能的问题。此外,您还可以访问整个计算机,而不仅仅是一些数据库内部。在这里,AS/400与任何其他数据库产品都有很大的不同,我认为,其他数据库的经验根本不适用


我推荐中端邮件列表,因为它们是我所知的as/400编程技能最集中的地方。

当你有一套分层的应用程序时,它们很有用。例如,一个具有提供原子操作(碰巧是存储过程)的web服务的单核心DB和一个ESB或一组使用这些WSs的应用程序。 在单个应用程序/单个数据库的情况下,我们的想法是按照其他人的建议将代码保存在一个地方


但是,这就是我。

我是一名长期的Java开发人员,最近遇到了几个大量使用存储过程的项目,这些项目使存储过程的使用对我来说非常糟糕

话虽如此,我还是不愿意笼统地说存储过程作为一种系统设计选项是不好的,因为它实际上取决于所讨论的项目以及特定存储过程试图实现的目标

我的偏好是避免对简单的CRUD操作使用任何类型的存储过程(让存储过程处理这些操作听起来可能很可笑,但我遇到过几个这样做的系统)——这最终导致大量代码必须编写(以及测试和维护)在Java方面,根据我观察到的情况来管理这些过程调用。最好只使用Hibernate(或其他一些ORM库)来处理这些类型的操作……如果没有其他原因,只会减少需要维护的代码量。在尝试重构或对系统进行任何重大更改时,它也会导致问题,因为您不仅需要关注类/表的更改,还需要关注处理CRUD操作的存储过程。如果开发人员无法自己更改数据库,或者存在某种正式的过程来协调系统两部分之间的更改,那么这种情况可能会进一步恶化

另一方面,拥有需要与Java代码进行有限交互的存储过程(基本上,只需使用几个参数调用一个存储过程),并以半自治方式运行也不是一件可怕的事情。我遇到过一些情况(特别是在我们将数据迁移或导入到系统中的情况),其中使用存储过程比编写一堆Java代码来处理功能要好得多


我想这里真正的答案是,您应该检查系统中的每个存储过程当前正在做什么,并根据具体情况对它们进行评估,以确定在Java或数据库中处理操作是否更容易。有些可能在Java中工作得更好(通过ORM库或实际的手写代码),有些可能不行。在任何一种情况下,目标都应该是确保每个人都能理解系统并易于维护,而不仅仅是存储过程本身的好坏。

好的,我会支持存储过程

首先,如果您专门使用它们,它们会使重构数据库变得更简单,因为您可以使用存储在数据库中的依赖项来找出更改会影响哪些内容(无论如何,在SQL Server中,不能用其他数据库来表示)

其次,如果您只需要更改查询,那么部署它们要简单得多

它们也更容易进行性能调整,因为它们可以在不启动应用程序的情况下轻松调用

如果您有复杂的逻辑,那么不必通过网络将所有数据发送到数据库服务器,从而可以节省一些性能。这似乎不是一个很大的收获,但是如果复杂的查询一天运行数千次,它就可以累积起来

安全也极其重要。如果不使用存储过程,则必须在表或视图级别设置权限。这将打开数据库进行内部欺诈。是的,参数化查询降低了sql注入的风险,但这不是您需要防范的唯一威胁。如果您有个人或财务数据,以及