用SQLJ开发数据库
2007-11-11 04:17:57 来源:WEB开发网在SQLJ程序中,SQL查询返回的结果集可以作为一个迭代程序对象,用来保存数据。迭代程序对象是迭代程序类的一个实例,并且在概念上类似于PL/SQL游标。我们必须执行下面的五个步骤来使用迭代程序处理SQL查询返回的数据。
声明迭代程序类。
从迭代程序类声明一个迭代程序对象。
使用SELECT语句添加迭代程序对象。
从迭代程序对象中读取数据。
关闭迭代程序对象。
有二种类型的迭代程序类∶
命名的迭代程序,在这种类型中,Java变量类型和迭代程序列名都必须被指定。
位置迭代程序,在这个类型中,只有用于从数据库中检索得到的列的Java变量类型需要指定。
命名迭代程序∶一个命名迭代程序声明指定了列存取器名和它们的Java类型。
让我们来演示一下使用这个例程的五个步骤,在本例中我们想检索雇员表Emp中的Ename,Job和HireDate列,查找工资大于1500的雇员。
声明迭代程序类∶
#sql iterator EmpIteratorClass(String Ename, String Job, Timestamp HireDate); |
我们使用Java String类来表示Ename和Job列,因为它兼容Oracle(大型网站数据库平台) VARCHAR2数据库类型。
java.sql.Timestamp类型用于HireDate列( Oracle(大型网站数据库平台)的日期类型),因为java.sql.Date类型只能保存年份,日期和时间信息,而不能象java.sql.Timestamp一样保存小时,分钟和秒。
从迭代程序类中声明迭代程序对象∶
EmpIteratorClass empIterator;
使用SQL SELECT语句添加迭代程序对象。
下列SQLJ语句把Emp表的Ename,Job和HireDate列中的内容加入empIterator对象∶
int salary = 1500; #sql empIterator = { select Ename, Job, HireDate from Emp where Sal > :salary }; |
我们还要声明主变量salary,用于WHERE子句中来标识要从Emp表中返回什么数据。
记住,通过SQL查询返回的数据库列的名称必须对应于第一步中定义迭代程序列名。从迭代程序对象中读取数据。因为迭代程序对象可能包含多个行,所以我们需要使用一个循环来访问每一行数据,就象我们从PL/SQL游标中读取数据一样。命名迭代程序实现一个next()方法,允许你在迭代程序对象的数据之间移动。此外,SQLJ还提供了检索迭代程序列的值得存取方法。下列代码在一个循环中打印出雇员姓名,职务和雇用日期。
while (empIterator.next()) { System.out.println("Name: " + empIterator.Ename()); System.out.println("Job: " + empIterator.Job()); System.out.println("Hire Date:" + empIterator.HireDate().toString()); } empIterator.close(); 关闭迭代程序对象∶<0} empIterator.close(); |
程序段一把从第2步到第5步联结起来演示了使用了命名迭代程序和empSalary参数的listEmployees ()方法。位置迭代程序∶与命名迭代程序相反,位置迭代程序只是指定了列的数目和种类,而不是它们的名称。列数据可以只通过位置访问,通过传统的FETCH... INTO语法。除了使用FETCH语句之外,还需要使用位置迭代程序方法endFetch ()来检测结束条件从而从循环中跳出。但是必须在访问所需要取得的数据之间检查条件。
下面是相同的五个步骤,演示如何使用位置迭代程序:
声明迭代程序类∶
#sql iterator EmpIteratorClass(String, String, Timestamp);
从迭代程序类中声明迭代程序对象。还必须声明从迭代程序对象中取得的数据所必需的主变量。
EmpIteratorClass empIterator; String name = null; String job = null; Timestamp hireDate = null; |
使用SQL SELECT语句加入迭代程序对象∶
int salary = 1500; #sql empIterator = { select Ename, Job, HireDate from Emp where Sal > :salary }; |
把数据从迭代程序对象中读入主机变量∶
while (true) { System.out.println("Name: " + name); |
关闭迭代程序对象
empIterator.close();
把从第2步到第5步联结起来演示了使用了位置迭代程序和empSalary参数的listEmployees ()方法。可见,位置迭代程序对象所使用的语法很像PL/SQL游标的语法。命名迭代程序和位置迭代程序两者都执行基本相同的功能∶它们都保存SQL查询的结果,有可能还是很多行数据至于到底使用哪一种迭代程序则要看情况或是根据自己的偏爱;从性能角度上来看呢,它们产生的结果都是一样的。
更多精彩
赞助商链接