【问题标题】:Java class in DB数据库中的 Java 类
【发布时间】:2010-05-10 11:14:47
【问题描述】:

谁能解释为什么在 Db 中存储 Java 类的想法?它有什么好处?以及如何用Java类创建存储过程?

最好的问候!

【问题讨论】:

  • 您能否编辑您的条目以告诉我们您正在使用哪个数据库?
  • 您也可以接受之前问题的一些答案吗?
  • 我认为他在谈论“创建或替换过程 foobar 作为语言 java”?

标签: java database stored-procedures java-stored-procedures


【解决方案1】:

Oracle 在 8i 版中将存储过程引入其数据库。 i 代表“internet”,就像“internet-ready”一样,基本上是一种营销。但是 Java 存储过程允许 Oracle 通过利用大量可用的 Java 库来极大地扩展数据库中可用的功能范围。 Oracle 8i 中的许多新数据库功能是 Java 库的 PL/SQL 包装器,尤其是 XML 的东西。

很明显,Oracle 在 Oracle 9 中将很多功能重写到原生 C 中,因为它的运行速度比封装的 Java 快得多。我知道,喜欢。

对我们来说,什么时候使用 Java 存储过程才有意义?基本上,当 Java 中有可用的功能在本机数据库语言中不可用时。例如,我编写了 JSP 来包装 ICE Syslog java 类,因此我的 PL/SQL 日志记录例程可以写入 syslog 文件。这表明 Java 的一个非常常见的用例 - 将我们的数据库应用程序的范围扩展到操作系统。也许 JSP 最常见的用途是编写一个host 命令,它允许 PL/SQL 程序触发外部可执行文件。

我认识一些编写 JSP 的开发人员,因为他们了解 Java 并且不想学习 PL/SQL。这还不够好,原因有两个:

  1. 使用内置插件总是比重新发明轮子更好
  2. 正如我已经提到的,数据库中的 Java 性能不如本机代码。

当然,如果您正在开发一个必须针对多个不同数据库产品运行的产品,那么 Java 的跨平台适应性非常有吸引力。当涉及到它们的过程语言(T-SQL 与 PL/SQL 等)时,不同风格的 DBMS 差异最大,因为它与 SQL 不同,没有标准。

如果您想了解如何在 Oracle 中编写 JSP,the online documentation 是一个不错的起点。如果事实证明您使用的是不同的数据库而不是 Oracle,那么我确信该产品有自己的同样出色的手册。

【讨论】:

    【解决方案2】:

    不太确定问题是什么......这个想法只是在 Java 中执行类似存储过程的操作,而不是更神秘和不熟悉的存储过程脚本语言。以下是它的工作原理:http://www.oracle.com/technology/tech/java/jsp/index.html

    【讨论】:

      【解决方案3】:

      可能是为了here列出的好处。

      您可以在此处找到有关如何创建它们的示例Oracle and Java Stored Procedures

      【讨论】:

        【解决方案4】:

        我认为问题是关于对象关系映射。您可以以声明方式描述如何将 Java 对象映射到关系数据库表的规则。如果这样做,您可以节省大量的开发时间,编写 JDBC 代码、跟踪对象更改、实现加载策略等。

        http://en.wikipedia.org/wiki/Object-relational_mapping

        【讨论】:

          【解决方案5】:

          Sybase ASE 也支持 Java 存储过程,但 ASE 15、IIRC 中只有 Java 1.2。 有关好处 - 请参阅其他答案。

          【讨论】:

            【解决方案6】:

            调试器,

            正如其他一些发帖人也问的那样,您的问题非常模糊。

            你指的是:

            1. 数据库中基于 Java 的存储过程?
            2. 将 Java Object 映射到数据库表中?
            3. 将 Java 类的字节码存储在数据库表中?

            对于第 1 点,一些数据库提供了一个编程钩子,允许您使用 Java 编写存储过程和函数并将它们暴露给 SQL 引擎

            对于第 2 点,有对象关系框架将 Java 对象(实例)映射到关系表中以进行读写访问。 (示例:参见休眠)

            对于第 3 点,假设您可以编写一个 ClassLoader,它将从包含相关类的 BLOB 的数据库记录中加载类。

            希望对一些人有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-10-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-24
              相关资源
              最近更新 更多