用SQLJ开发数据库(5)
发表于:2007-07-14来源:作者:点击数:
标签:
用SQLJ 开发 数据库 (5) SQLJ语言元素 SQLJ是正在发展的工业标准语言,允许你使用独立于数据库代码的Oracle存储过程,可以很容易地移植到其他的可使用 Java 的数据库平台。知道连接上下文,迭代程序,可执行语句和主表达式的情况,那么你就可以把一些实际
用SQLJ
开发数据库(5)
SQLJ语言元素
SQLJ是正在发展的工业标准语言,允许你使用独立于数据库代码的Oracle存储过程,可以很容易地移植到其他的可使用
Java的数据库平台。知道连接上下文,迭代程序,可执行语句和主表达式的情况,那么你就可以把一些实际的SQLJ语句用到现实的应用程序中。
在前文中,我描述了SQLJ是什么,比较了PL/SQL和JDBC,并且研究了SQLJ的好处。 在本文中,我将研究一下SQLJ编程语言的基础,这样你就可以在现实的应用程序中使用SQLJ了。SQLJ程序是一个使用
嵌入式结构化询问语言语句的规则的Java程序,以一个#_sql标记开始并以一分号结束。有二类SQLJ语句∶声明和可执行语句。声明语句声明了连接上下文和迭代程序。连接上下文用来建立数据库连接,而迭代程序被用来存储由SQL查询返回的结果集;可执行语句执行嵌入式结构化询问语句和PL/SQL程序块。因为SQLJ程序将要被翻译然后通过JDBC运行,任何JDBC驱动程序支持的SQLJ语句可能内嵌在一个SQLJ可执行语句中。可执行语句可能同时包含主表达式,在Java程序和数据库之间通过Java变量交换信息。
Oracle JDBC驱动程序
Oracle提供下列JDBC驱动程序∶
客户端瘦驱动程序是一个100%纯Java驱动程序,用于在没有安装Oracle的客户端。Oracle推荐使用小应用程序。当Java小应用程序运行的时候,它可以
下载到浏览器中。
OCI驱动程序( OCI8和OCI7)是用于安装了Oracle客户端程序的客户端。Oracle JDBC OCI驱动程序通过调用Oracle调用界面( OCI)直接从Java访问数据库,提供与不同版本的Oracle7,Oracle8和8i之间最大的
兼容性。这些驱动程序要求Oracle客户程序安装Net8。
服务器端瘦驱动程序提供了与客户端瘦驱动程序相同的函数,但是在一个Oracle数据库内运行并且访问一个远程数据库。这对于从一个担任中间层的Oracle服务器上访问远程Oracle服务器是很有用的,或者,更简单一些来说,从一个层内访问另一个Oracle服务器,例如从某一个Java存储过程或者EJB内访问Oracle服务器。
服务器端内部驱动程序,称为KPRB(Kernel Program Bundled),提供对任何在执行SQL操作的目的Oracle数据库内运行的Java代码的支持。服务器端内部驱动程序允许JServer JVM直接与SQL引擎通信。这是一个默认的用于在Oracle 8i/9i服务器上运行SQLJ代码的JDBC驱动程序,这些SQLJ代码用作存储过程,存储函数,触发器,EJB或CORBA对象。KPRB JDBC驱动程序非常轻便但是效率高,并且在Oracle JServer内运行特别地能够做到尽善尽美。这就是我们要来写SQLJ存储过程所用的驱动程序。让我们来研究一下描述的SQLJ元素,逐一介绍:连接上下文,迭代程序,可执行语句以及主表达式。
连接上下文用于单一连接,你可以使用DefaultContext类的一个实例并在构造DefaultContext对象时指定数据库URL,用户名和口令。这是使用Oracle公司提供的
oracle.sqlj.runtime.Oracle类的connect()方法的最容易的方法。在本例中,我们将要使用JDBC瘦驱动程序以及用户名"scott"和口令"tiger"来通过端口1521连接MYSERVER服务器上的数据库,在这个服务器里,数据库的SID是ORCL∶
Oracle.connect("jdbc:oracle:thin@MYSERVER:1521:ORCL", "scott", "tiger");它创建DefaultContext类的一个实例并且把它作为默认连接。并不一定需要直接使用DefaultContext的实例做任何事情。对于多重连接,你可以创建并通过使用Oracle.getConnection ()方法来使用DefaultContext类的辅助实例。在本例子中,你将使用Oracle OCI8驱动程序使用MYSERVER_ORCL作为Oracle服务名,在TNSNames.ora文件中创建做为一个ORCL实例∶
DefaultContext myContext1 = Oracle.getConnection
("jdbc:oracle:oci8@MYSERVER_ORCL", "scott", "tiger");
DefaultContext myContext2 = Oracle.getConnection
("jdbc:oracle:oci8@MYSERVER_ORCL ", "tom", "bear");
这段代码创建二个连接上下文实例,它们两个都使用相同的Oracle OCI8驱动程序,但是不同的模式。你可以通过使用为每个语句指定连接模式的方法在两个不同的模式中执行SQL操作。
#sql [myContext1] { SQL statement };
...
#sql [myContext2] { SQL statement };
在这个程序的结尾,我们需要关闭在FINALLY子句和TRY/CATCH语句块中的连接。
finally
{
#sql [myContext1] { commit };
myContext1.close();
#sql [myContext2] { commit };
myContext2.close();
}
...
(未完待续)
原文转自:http://www.ltesting.net