java驱动pl sql优点_用PL/SQL和Java开发Oracle8i应用程序
用PL/SQL和Java开发Oracle8 i应用程序
随着Oracle8i的发布,Oracle 在数据库里支持了二种主要的编程语言??PL/SQL和Java。今天,Oracle的许多客户既使用PL/SQL建立数据库应用程序,也使用Java建立数据库应用程序。既然存在二种数据库编程语言,那么就有一个很自然的问题:建立Oracle8i应用程序时,PL/SQL和Java 哪一个更好?
我们来快速地回顾一下,PL/SQL给Oracle数据库开发人员提供了强大的功能,包括:高性能、易使用、无缝地与SQL结合,以及强壮性。现在,PL/SQL依旧是一个成熟的开发数据库应用程序的过程性语言,而且是建立SQL密集型和数据密集型应用程序的理想语言。随着Oracle8i的推出,Oracle 在数据库里引入了Java,给这种十分流行的通用语言提供了强壮的、大规模的平台。
利用企业JavaBean和CORBA,可以用Java开发多层、面向组件的应用程序;也可以用Java开发传统的数据库存储过程。Oracle8i 提供了多种特性,可以简化用PL/SQL和Java建立应用程序的过程,而且可以容易地把二种语言编写的应用程序组合起来。
这份白皮书,提供了有关Oracle8i中PL/SQL和Java特性的技术概述,并就如何利用它们建立应用程序提供了实际可行的指导。白皮书分成四个部分:由于许多Oracle 客户都有现存的PL/SQL应用程序,所以,我们开始时,先描述如何现有的PL/SQL程序与Java组合,扩展现有PL/SQL程序;然后,我们描述二种语言里共有的应用程序编程特性,解释如何把PL/SQL和Java共同使用;在第三部分,描述怎样利用PL/SQL和Java 建立应用程序才算(例如:什么时候用PL/SQL最合适,什么时候用Java最合适);最后,我们讨论一些真实的例子,实际演示Oracle的客户们目前在Oracle8i里是如何使用PL/SQL和Java的。
用PL/SQL和JAVA建立应用程序
开始,我们首先看一下拥有PL/SQL应用程序的客户的场景:客户们想在服务器里增加新的Java代码,从而扩充原有的PL/SQL应用程序。有三个特别的问题需要考虑:第一,Oracle8i里支持的主要存储过程类型是什么,可以用什么途径调用它们;第二,Java在Oracle8i里如何工作,Java如何同PL/SQL互操作;第三,Oracle8i 服务器如何处理PL/SQL和Java之间的名称解析。在整个白皮书里, “Java”这个单词,既指标准的Java,也指SQLJ (Java里的嵌入SQL),只有在明确地表明讨论不同概念时,才表示不同的意思。
Oracle8i中存储过程的类型
Oracle8i支持的存储过程类型有几种?Oracle8i 支持四种不同类型的存储过程??用PL/SQL或Java,都可以实现全部四种类型的存储过程。这四种存储过程类型是:
存储过程??存储过程允许客户用任意商业逻辑扩展SQL。客户用名称调用存储过程,可以在SQL、PL/SQL包、以及“”位置上调用存储过程。
存储函数??存储函数实质上与存储过程相同,不同之处在于存储函数向调用者返回值。可以用名称调用存储函数,也可以在SQL、PL/SQL包、以及“”位置上调用存储函数。
数据库触发器??触发器是与特定的表和视图关联的商业规则,修改对表或视图时,SQL自动调用触发器。Oracle8i 提供了几种类型的触发器:在SQLDML语句执行之前或之后激发的触发器;在每一行更新之前或之后激发的触发器;事件触发器(例如:登录、退出、DDL语句、数据库启动或关闭等的触发器);替代(instead-of)触发器。所有这些触发器类型,都可以用PL/SQL或Java编写。
对象类型方法?? Oracle8 ™ 发行版8.0和Oracle8i提供了用SQL定义复合数据类型的能力。这些对象类型的方法,可以用Java实现,也可用PL/SQL实现。例如,可以用SQL定义一个订单对象类型purchase_order_t,如下所示:
CREATE TYPE purchase_order_t AS OBJECT (
pono NUMBER,
custref REF customer_info_t,
orderdate DATE,
shipdate DATE,
line_item_list line_item_list_t,
shiptoaddr address_t,
MEMBER FUNCTION
total_value RETURN NUMBER,
) ;
然后实现这个对象类型的方法 …
CREATE OR REPLACE TYPE BODY purchase_order_t AS
MEMBER FUNCTION total_value RETURN NUMBER IS
i INTEGER;
stock stock_info_t;
line_item line_item_t;
total NUMBER := 0;
cost NUMBER;
BEGIN
// 在这里插入具体的PL/SQL代码或者译Java存储过程的调用。
END;
在Oracle 8i 里,这四种存储程序类型的每一种,都可以从不同的调用环境调用,这些调用环境是:
SQL语句??可以在任何SQL语句内部调用函数。
CALL语法??使用CALL语句,可以在调用过程和函数。CALL是随Oracle8i新引进的语法。
PL/SQL块、子程序、包??可以在PL/SQL子程序、包或匿名块里调用它们。请注意:Java存储程序自己可以在匿名的BEGIN … END 块内被调用。
触发器的隐式调用??最后,PL/SQL或Java存储过程可以在触发器执行的时候,隐式地被调用。
把JAVA与现存的PL/SQL程序结合
要想理解如何才能把Java 应用程序和现有的PL/SQL存储过程结合起来,我们首先要理解开发Java存储过程的三个步骤:
第一步:编写Java 存储过程:第一步是编写要做成存储过程的Java程序。可以用标准的Java编写,也可以用SQLJ编写?因为存储过程通常都是SQL密集型的,所以用SQLJ编写存储过程,是一个效率较高的方法。
public class Foo {
public static String prependHello(String tail) {
return "Hello " + tail;}}
第二步:步署、发布存储过程:用Java开发工具编写完Java程序后,要把它装载进Oracle8i。要用Oracle提供的loadjava命令行工具,以源文件、二进制文件、.class类文件、Java .jar归档文件的形式,把Java程序装载进Oracle8i中的目标数据库大纲。Loadjava是一个Java程序,它用Oracle的JDBC驱动程序连接服务器,自动把一组Java程序装载进服务器。(还可以使用CREATE JAVA这个工具,它是SQL*Plus的SQLDDL命令)
>loadjava -user scott/tiger@oudelsrv-1:5521:ORCL Foo.class
命令执行之后,会把类foo的方法装入scott的大纲(请参阅第后面有关Java、SQL和PL/SQL名称的内容,了解命名空间解析的问题)。下一步是,把方法登记到SQL上。这一步为什么是必不可少的呢?如果只用PL/SQL,就没有必要显式地把PL/SQL过程登记到SQL上?对SQL来说,每个PL/SQL过程自动就是可见的。反之,在使用Java的时候,所有的Java方法对SQL来说都是不可见的?要让一个Java方法能够作为存储过程,在SQL里调用它,就必须显式地把它“发布”到SQL当中。Java 类和方法不会自动地发布到数据字典、SQL和PL/SQL里,原因有二:
Java应用程序里的大多数方法,通常是由其它Java程序调用;而且Java到Java的调用,发生在Java虚拟机环境里,没有必要暴露给SQL。
SQL编译器需要有关SQL数据类型到Java数据类型如何映射参数的指导,还需要正确重载调用的信息,以便给出与原始实际参数值对应的SQL数据类型。这需要开发人员的干预,所以只有某些Java方法需要在SQL和PL/SQL里调用。
用PL/SQL和Java开发Oracle8i应用程序.doc
下载Word文档到电脑,方便收藏和打印[全文共2945字]
编辑推荐:
下载Word文档
java驱动pl sql优点_用PL/SQL和Java开发Oracle8i应用程序相关推荐
- pl/sql 测试函数_如何在SQL单元测试中使用伪函数?
pl/sql 测试函数 In this article series, we are exploring SQL unit testing, in general, and also we are r ...
- java存储过程与sql语句_存储过程与SQL语句怎么选择
应用存储过程的优点: 1.具有更好的性能 存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译, 而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速 ...
- java项目添加功能失败_学生信息的添加 Java web简单项目初试(失败)
题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示"• "或"*"表示输入位数,密码要求八位以上字 ...
- java中execution的作用_一文初步了解Java虚拟机
大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...
- java webservice报文过长_工作1-5年的Java程序猿到底需要怎样的一个技术栈?
工作1-5年的Java程序猿到底需要怎样的一个技术栈? 前言: 具有1-5年开发经验的程序员 需要学习的内容其实还有很多很多. 今天跟大家交流一下希望分享出来的对大家能够有帮助,这是我这些年总结出的一 ...
- java导出数据透视表_使用数据库中的Java流制作数据透视表
java导出数据透视表 来自数据库行和表的原始数据不能为人类读者提供太多了解. 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式 在向我们展示之前. 数据透视表是聚合的一种特定形式,我们可 ...
- java使用初始化输入参数_使用初始化参数配置java web应用程序
在编写java web应用程序的时候,我们难免会遇到需要使用参数来初始化应用程序的问题.在这里介绍最简单的三种方式:使用上下文参数进行配置.使用Servlet初始化参数以及使用注释来初始化参数. 这些 ...
- java教务管理系统数据库设计_诚梦计算机毕业设计最新选题题目及程序
计算机专业学位的有:本科专业主要包含有计算机软件工程,信息工程,计算机技术,数字媒体技术.智能科学与技术.空间信息与数字技术.电子信息与计算机工程等分类. 计算机系包含了很多开发程序语言: 如:比较流 ...
- java注释还能运行_老师,你确定Java注释不会被执行吗?
之前在博客上分享过一篇文章,涉及到 Java 中的注释,就信誓旦旦地写了一句话:"注释是不会被执行的!"结果,有小伙伴留言说,"老师,你确定吗?" 我这个人一直 ...
最新文章
- Flex与ASP.NET通过Remoting方式进行通讯
- 谁偷走了程序员的时间??
- 我的创业分享 之 不要轻易选择创业
- 科大星云诗社动态20210420
- 隐藏的东西? 您需要HiddenSidesPane
- python 多线程并发_寻找python大神!!!python如何多线程并发?
- 2 计算机网络性能指标
- 天正双击墙体不能编辑_今日设计分享:CAD常用快捷键、Ps快捷键大全、天正快捷键总结!...
- java中super关键字的用法
- 无线传感器网络 | 名词解释
- ubuntu14.04 在自带python2.7上安装python3.3.5 可以用但是有问题
- encode_chunked=req.has_header(‘Transfer-encoding‘))问题解决方法
- mysql phpmyadmin 安装_phpMyAdmin 安装
- 回给collapsar的信
- 微信开发之小程序分享设置图片标题
- 基于mindwave脑电波进行疲劳检测算法的设计(3)
- 罗振宇“时间的朋友”跨年演讲:为做事的人服务 准确抓住小趋势
- postgresql 锁_PostgreSQL中的锁:3.其他锁
- 微信支付一直抱签名错误,但是校验通过。
- Internal error: Oops: 37 [#1] PREEMPT SMP ARM。处理方法果然touchscreens被编译了,但是我的触摸屏没有接,取消此编译选项,重新编译,开发成功启动
热门文章
- 前端学习(169):无语义元素
- 玩转oracle 11g(22):ora-01691和修改密码过期时间
- linux下源码安装nginx
- and or not 优先级_快速划分测试用例优先级
- 邮箱无权访问 上的 jira是怎么回事_蚂蚁庄园答案2020年11月6日汇总 小鸡宝宝考考你每日答案为你呈上|蚂蚁|庄园-360GAME...
- php与数据库的连接用法 (签到一)
- 转:在csv中维护变量参数
- cocos2d-lua ARPG手机游戏《烈焰遮天》(客户端+服务端+数据库)发布说明
- 怎样办理软件著作权登记
- oracle数据库纵表设计,oracle 数据库设计-数据库表设计