王朝百科
分享
 
 
 

sqlj

王朝百科·作者佚名  2010-04-21  
宽屏版  字体: |||超大  

SQLJ简介

SQLJ是一个与Java编程语言紧密集成的嵌入式SQL的版本,这里"嵌入式SQL"是用来在其宿主通用编程语言如C、C++、Java、Ada和COBOL)中调用SQL语句。在一个嵌入式SQL程序中,SQL语句可以像其宿主语言中的程序构造一样得到支持。当然,C和C++也可以通过宿主语言函数调用,即通过开放数据库连接接口(ODBC)调用SQL语句。与此相似,Java程序可以通过Java数据库连接(JDBC)方法调用来调用SQL语句。但是,我们会看到,这一类的函数调用接口较之嵌入式SQL接口是一个水平相当低的程序接口。因为这时的SQL语句是作为字符串参数传送给函数而不是直接在宿主语言中嵌入代码的。

Oracle8i是Oracle关系型数据库管理系统(OracleRDBMS)的最新版本,在此版本中,特别强调了Java编程语言和Internet/Intranet数据库应用程序的开发。Oracle8i的重要的特性之一就是全面和高效地支持SQLJ。与Oracle8一样,Oracle8i不仅提供对关系型数据库处理的强有力的支持,同时还支持一些对象-关系型结构,如集合类型、用户定义类型和对象类型。

SQLJ由一系列定义了SQL与Java之间相互作用的子句和程序扩充组成。SQLJ是在Java编程语言中静态嵌入式SQL,换句话说,一个SQLJ程序是一个包含静态嵌入式SQL语句的Java程序。请注意,在静态嵌入式SQL中,所有嵌入到程序中的SQL语句在编译时都是已知的。而在动态嵌入式SQL中,至少有一些SQL语句是等到运行时才被确定的。SQLJ通过这种静态嵌入式SQL模型完善了JDBC动态嵌入式SQL模型,这是因为JDBC只提供给Java一个动态嵌入式SQL接口,而SQLJ提供了一个静态嵌入式SQL接口。从此,通过使用SQLJ,Java程序员们在Java和SQL之间有了两种不同的程序接口:JDBC和SQLJ。其他编程语言,诸如C、C++、FORTRAN、COBOL和Ada基本上使用同一种嵌入式SQL,而SQLJ作为一个与ANSI标准多少有些不同的嵌入式SQL一直为Java所专用。这就引出了一个问题:为什么唯独Java有其自己的嵌入式SQL,而其他的编程语言共用一个嵌入式SQL?原因之一是SQLJ与Java的紧密耦合,特别是Java类可在SQL表中作为字段类型使用。还有,SQLJ提供了游标结构的一种强类型版本,又称为迭代器,这种迭代器结构巧妙地集成到Java语言中,每一个迭代器是一个Java类。同时要注意的是,与SQLJ不同,其他编程语言的嵌入式SQL同时包括静态和动态SQL构造。

SQLJ作为一个新的标准的出现是多个厂商共同努力以求在Java程序中提供对静态嵌入式SQL支持的结果。正如我们所看到的,一个"纯"SQLJ程序是静态的,因为所有的SQL语句都必须在编译以前确定。但是,在一个SQLJ语句之内包含JDBC调用会使该程序成为动态的,因为程序可将SQL语句组织成一个字符串,然后将该字符串传送给JDBC方法去执行。SQLJ可用来在JServer环境下执行存储过程、触发器和类,也可用于Enterprise JavaBeans和CORBA.

SQLJ由一系列子句组成,这些子句扩展了Java程序。语言的标准说明是一个联合说明,它由包括IBM、Compaq/Tandem、JavaSoft、Oracle、Sybase和Informix在内的主要数据库工具厂商和数据库厂商所联合支持。SQLJ提供了在访问数据库的客户端和中间件以及在利用Java的数据服务器端开发应用程序的方法。SQLJ应用程序是可移植的,并且可以使用标准JDBC驱动程序与多厂商的数据库进行通信。

当编写一个SQLJ程序(源代码)时,所编写的是一个Java程序并按一定的语法规则嵌入式SQL语句,这套语法规则说明了怎样将SQL语句嵌入到Java源代码中。然后运行一个SQLJ翻译器将SQLJ程序转换为一个标准Java程序。一个Oracle SQLJ翻译器在原理上与其他Oracle 嵌入式SQL预编译器类似。SQLJ翻译器完成下列工作:

* 对嵌入式SQL构造进行语法检查。

* Java和SQL数据类型检查。

* 模式检查。

翻译时,SQL翻译器用SQLJ运行时库中的调用来替代嵌入式SQLJ语句,该运行时库真正实现SQL操作。这样翻译的结果是得到一个可使用任何Java翻译器进行编译的Java源程序。一旦Java源程序被编译,Java执行程序就可在任何数据库上运行。

SQLJ运行环境由纯Java实现的小SQLJ运行时库(小,意指其中包括少量的代码)组成,该运行时库转而调用相应数据库的JDBC驱动程序。

一个SQLJ程序可以在多种环境下运行。所编写的SQLJ程序可以在客户端进行,不管是在瘦客户端如Web浏览器和网络计算机上,还是在一个工作站或PC上。由于这种位置的透明性,使得用户可以很方便地将SQLJ程序从一个地方移植到另一个地方或从一个系统移植到另一个系统。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有