首页 > 学院 > 开发设计 > 正文

用SQLJ开发数据库(3)

2019-11-18 13:38:02
字体:
来源:转载
供稿:网友

  用SQLJ开发数据库(3)

   使用SQLJ的开发步骤

   下面是开发和运行一个SQLJ应用程序所需要做的事情:

   使用SQLJ编译器编译SQLJ源文件。这一步生成调用SQLJ运行时的java文件,以及二进制的SQLJ描述文件--包括存在于SQLJ源文件中的静态SQL语句的有关信息。使用Java编译程序编译Java代码。在编辑完成之后,生成的描述文件是使用特定数据库数据类型,扩展和特征性能定制的。

   运行应用程序,使用SQLJ运行时程序库和特定数据库的JDBC驱动程序。举例来说,假如你的主.sqlj文件定义类MyClass,那么源文件名必须是MyClass.sqlj。编译器生成MyClass.java源文件,然后编译程序生成MyClass.class类文件。而且,翻译器和编译程序两者都生成PRofile - key类,MyClass_SJProfileKeys.class。翻译器根据你怎样声明它们来命名迭代程序类与连接上下文类。举例来说,假如你声明一个迭代程序,MyIter,将生成一个MyIter.class类文件。

   下面是配置SQLJ的必要条件∶

    SQLJ运行时程序库

    JDBC驱动程序,例如:JDBC/ODBC桥,Oracle JDBC/OCI驱动程序,Oracle瘦JDBC驱动程序,DB2 JDBC驱动程序等等。

    SQLJ程序将执行的JVM

   现在让我们比较SQLJ和JDBC,并比较SQLJ/JDBC和PL/SQL。

   SQLJ 与JDBC

   SQLJ开发的目的是完善动态JDBC SQL结构化查询语言模型和静态的SQL结构化查询语言模型。与ODBC和JDBC动态模型不同,静态模型提供强类型应用程序翻译时间检查。这些不仅要求进行SQL语法的编译时检验和SQL语句使用的主机变量的类型兼容,而且查询本身的正确性与数据库模型中的表,视图,存储过程等等的定义有关。因为所有的SQL语句都要被编译,SQLJ可以作为一个性能更好的中间媒质。

   SQLJ代码与JDBC代码

   对于有输入参数的SQL语句,SQLJ类通常比等价的动态的SQL语句( JDBC)调用简短,因为SQLJ运用主机变量把参数传递到SQL语句中,当JDBC要求一个单独的语句把个个参数捆绑起来,检索每个结果。下面是一条SELECT语句的SQLJ代码片断:

String vName; int vSalary; String vJob; Java.sql.Timestamp vDate;
...
#sql { SELECT Ename, Sal
INTO :vName, :vSalary
FROM Emp
WHERE Job = :vJob and HireDate = :vDate };

   下面是相同的SELECT语句的JDBC代码碎片:


String vName; int vSalary; String vJob; Java.sql.Timestamp vDate;
...
PreparedStatement stmt = connection.prepareStatement(
"SELECT Ename, Sal " +
"INTO :vName, :vSalary " +
"FROM Emp " +
"WHERE Job = :vJob and HireDate = :vDate");

stmt.setString(1, vJob);
stmt.setTimestamp(2, vDate);

ResultSet rs = stmt.executeQuery();
rs.next();

vName = rs.getString(1);
vSalary = rs.getInt(2);

rs.close();


   我们可以看到,直接在一个Java程序中嵌入SQL语句能够生成比JDBC更加简明易读的代码。因此,SQLJ在Java应用程序有数据库访问需要的时候,减少了开发时间和维修代价。SQLJ程序可以在同一个源文件中很轻易地与JDBC代码相互作用来做到动态的SQL语句调用,或者你也可以在SQLJ语句中使用PL/SQL语句块来完成这个目的。此外,Oracle 9i增加了在SQLJ代码直接支持动态SQL的功能。

(未完待续)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表