用 SQLJ 读取和更新数据

概述

SQLJ API 是 JDBC 的一个扩展,它支持 SQL 语句的静态实行。由于 DB2 支持 SQLJ,以是 Java 启示人员可以战胜 JDBC 的首要限制,即 JDBC 只可以静态地实行 SQL 语句。静态绑定的 SQL 语句素日比静态绑定的语句运转得更快,这将使 SQLJ 利用法度具有比 JDBC 利用法度更除夜的后果优势。

在本大节中,将学习怎样用 SQLJ API 编写法度,包括利用毗邻上下文,在 SQLJ 可实行子句中发出 SQL 语句,以及用迭代器分解下场集。

启示 SQLJ 利用法度的任务

在 SQLJ 利用法度的开头,需求导入包括 JDBC 和 SQLJ API 的 Java 包:

import sqlj.runtime.*;
import java.sql.*;

SQLJ 利用法度利用 JDBC 驱动法度 大节中所讨论的相反的 JDBC 驱动法度。

在编译 SQLJ 源代码之前,需求将其转换成 Java 代码,以便可以经过议定 Java 编译器遏制编译。sqlj 敕令实行这个转换,并挪用 Java 编译器。若是 SQLJ 源文件中有 SQL 语句,一个以 _SJProfile0.ser 收尾的文件将与 > 文件和 sqlj 文件一起出如今您的目次中。

一旦转换并编译了源代码,就可以运转它了。可是,利用法度中的 SQL 语句未遏制静态绑定,这可以或许会招致较差的后果。为了在利用法度中静态绑定 SQL 语句,需求实行利用法度的设置装备陈设定制。可以用 db2sqljcustomize 东西实行这个定制。

为了实行对已编译利用法度的设置装备陈设定制,要实行下列敕令:

db2sqljcustomize -url jdbc:db2://localhost:50000/sample-user uid -password pwdapp_SJProfile0.ser

在该敕令中,uid 表示您的用户 ID,pwd 表示您的密码,app 表示利用法度的称号。

以下是成功运转 db2sqljcustomize 时的一些示例输入:

db2sqljcustomize -url jdbc:db2://localhost:50000/sample-user me -password mypwd DbApp_SJProfile0.ser
[ibm][db2][jcc][sqlj]
[ibm][db2][jcc][sqlj] Begin Customization
[ibm][db2][jcc][sqlj] Loading profile: DbApp_SJProfile0
[ibm][db2][jcc][sqlj] Customization complete for profile DbApp_SJProfile0.ser
[ibm][db2][jcc][sqlj] Begin Bind
[ibm][db2][jcc][sqlj] Loading profile: DbApp_SJProfile0
[ibm][db2][jcc][sqlj] Driver defaults(user may override): BLOCKING ALL VALIDATE BIND STATICREADONLY YES
[ibm][db2][jcc][sqlj] Fixed driver options: DATETIME ISO DYNAMICRULES BIND
[ibm][db2][jcc][sqlj] Binding package DBAPP01 at isolation level UR
[ibm][db2][jcc][sqlj] Binding package DBAPP02 at isolation level CS
[ibm][db2][jcc][sqlj] Binding package DBAPP03 at isolation level RS
[ibm][db2][jcc][sqlj] Binding package DBAPP04 at isolation level RR
[ibm][db2][jcc][sqlj] Bind complete for DbApp_SJProfile0





回页首

设立扶植毗邻上下文

在 SQLJ 利用法度中,SQL 操纵需求一个毗邻上下文(connection context),而不是 JDBC Connection 工具。每个 SQL 语句是经过议定 #sql SQLJ 子句发出的,并被显式或隐式地指派一个毗邻上下文。毗邻上下文的指派将语句与前面翻开的数据库毗邻联系关系起来。

在设立扶植数据库毗邻之前,必须首先生成一个毗邻上下文类。下一行代码生成一个名为 Ctx 的毗邻上下文类:

#sql context Ctx;

为了设立扶植数据库毗邻,要利用 > 方式加载 JDBC 驱动法度,然后构造前面善成的上下文类的一个实例。至少需求将数据库的 URL 和一个布尔值传递给上下文构造函数,这个布尔值表示能否希望翻开主动提交。下面的代码片段在 SQLJ 中设立扶植数据库毗邻:

String url = "jdbc:db2:sample";
>

在这个示例毗邻上下文 connCtx 中,利用 IBM DB2 通用 JDBC 和 SQLJ 驱动法度毗邻 DB2 管事器上的示例数据库,并翻开了主动提交。





回页首

发出 SQL 语句

与许多其他数据库 API(包括 JDBC)角力计较,SQLJ 的一项明明优势便是 SQLJ 语法的复杂性和强除夜后果。下面的代码示例演示了 UPDATE 语句,该语句利用了一个宿主变量:

String staffJob = "Sales";
#sql [connCtx] {UPDATE STAFF SET COMM=400 WHERE JOB = :staffJob};

为了编写前往下场集的 SQL 语句,需求利用迭代器(iterator)。稍后将在 利用迭代器 大节中讨论迭代器。





回页首

根本的 SQLJ 利用法度:示例代码

下列利用法度演示了本节中曾经讨论的一切概念:

  • 导入包括 JDBC 和 SQLJ API 的 Java 包。
  • 加载 IBM DB2 通用 JDBC 和 SQLJ 驱动法度。
  • 生成毗邻上下文。
  • 用宿主变量实行 SQL 语句。

在这个利用法度中,实行了一个 SELECT 语句,并将其标量下场传递给名为 stname 的宿主变量。

//DbApp.sqlj
import sqlj.runtime.*;
import java.sql.*;
#sql context Ctx;
>

为了转换和编译以上文件(名为 DbApp.sqlj),要实行下列敕令:

sqlj DbApp.sqlj

为了实行这个已编译利用法度的设置装备陈设定制,要实行下列敕令:

db2sqljcustomize -url jdbc:db2://localhost:50000/sample-user uid -password pwdDbApp_SJProfile0.ser

在这条敕令中,uid 表示您的用户 ID,pwd 表示您的密码。

为了运转已编译的利用法度,要实行下列敕令:

java DbApp

这个利用法度的输入应该如下所示:

The name of employee #10 is: Sanders





回页首

利用迭代器

为了在 SQLJ 利用法度中分解下场集,需求利用迭代器。迭代器是 SQL 游标的 SQLJ 版本。可以在 SQLJ 中利用两种首要的迭代器:命名(named)迭代器和位置(positional)迭代器。

命名迭代器

命名迭代器是用下场集中各列的称号和数据圭表标准来声明的。在命名迭代器中,各列的挨次无关紧要。在利用法度中利用命名迭代器之前,必须首先生成一个迭代器类,此时必定要记住需求分解的下场集的特征。下列代码片段生成一个称作 NameIter 的命名迭代器类;该迭代器有两个列。

#sql iterator NameIter(String Name, int Id);

当发出 SQL 盘考时,应该将下场集传递给生成的迭代器类的实例。歧:

NameIter nIter;
#sql [connCtx] nIter = {SELECT ID, NAME FROM STAFF WHERE DEPT = 20};

为了从命名迭代器检索列值,可以利用以下场集中的列名命名的迭代器方式。为领会析命名迭代器,要利用一个循环构造;在每个循环迭代之前,要经过议定运转 iterator.next() 方式进入下一行。下列代码片段分解 NameIter 命名迭代器的实例。

while (nIter.next()) {System.out.println(nIter.Name()   ", ID #"   nIter.Id());
}

位置迭代器

位置迭代器只用下场集中各列的数据圭表标准来声明。在位置迭代器中,各列的挨次是首要的。在利用法度中利用位置迭代器之前,必须首先生成一个迭代器类,此时必定要记住需求分解的下场集的特征。下列代码片段生成一个名为 PosIter 的位置迭代器类;该迭代器有两个列。

#sql iterator PosIter(String, int);

当发出 SQL 盘考时,要将下场集传递给生成的迭代器类的实例。歧:

PosIter pIter;
#sql [connCtx] pIter = {SELECT ID, NAME FROM STAFF WHERE DEPT = 20};

为了从位置迭代器检索列值,需求将这些值读取到宿主变量中。利用 iterator.endFetch() 方式来辨别能否尚有更多的行要读取。下列代码片段分解一个 PosIter 位置迭代器的实例。

#sql {FETCH :pIter INTO :nameHv, :idHv };
while (!pIter.endFetch()) {System.out.println(nameHv   ", ID #"   idHv);#sql {FETCH :pIter INTO :nameHv, :idHv };
}





回页首

命名和位置迭代器:示例代码

下列利用法度演示了前面讨论的一切概念:

  • 生成命名迭代器。
  • 生成位置迭代器。
  • 利用命名迭代器分解下场集。
  • 利用位置迭代器分解下场集。

在这个利用法度中,实行一个 SELECT 语句两次。第一次实行产生的下场集由名为 nIter 的命名迭代器来分解。第二次实行产生的下场集由名为 pIter 的位置迭代器来分解。

//Iter.sqlj
import sqlj.runtime.*;
import java.sql.*;
#sql context Ctx;
#sql iterator NameIter(String Name, int Id);
#sql iterator PosIter(String, int);
>

为了转换和编译以上文件(名为 Iter.sqlj),要实行下列敕令:

sqlj Iter.sqlj

为了实行已编译利用法度的设置装备陈设定制,要实行下列敕令 :

db2sqljcustomize -url jdbc:db2://localhost:50000/sample-user uid -password pwd Iter.ser

在这个敕令中,uid 表示您的用户 ID,pwd 表示您的密码。

为了运转已编译的利用法度,要实行下列敕令:

java Iter

这个利用法度的输入应该如下所示:

Result set from named iterator:
Sanders, ID #10
Pernal, ID #20
James, ID #80
Sneider, ID #190
Result set from positional iterator:
Sanders, ID #10
Pernal, ID #20
James, ID #80
Sneider, ID #190

版权声明: 原创作品,答理转载,转载时请务必以超链接方式标明文章 原始因由 、作者信息和本声明。不然将追究法则责任。

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/06/1972827.html

DB2 9 利用启示(733 测验)认证指南,第 7 部分: Java 编程(5)相关推荐

  1. Informix IDS 11体系操持(918测验)认证指南,第 4 部门: 机能调优(1)

    对 IBM® Informix® Dynamic Server (IDS) 和它的分比如子体系举行调优,以失掉最佳机能.在一个冗长的概述之后,本教程给出了一些关于怎样检查数据库做事器及其子体系的例子. ...

  2. Informix IDS 11琐屑解决(918测验)认证指南,第 7 部分: IDS复制(4)

    HDR:启动息争决 本节会商与 HDR 的启动息争决关连的以下主题: 首次启动 HDR 改动效力器情势和类型 将索引复制到从效力器 训练 解决方案 首次启动 HDR 为了创设 HDR 效力器对,必须在 ...

  3. Informix IDS 11体系管理(918测验)认证指南,第 5 局部: 数据库效劳器把持(2)

    效劳器把持形式 数据库效劳器的把持形式抉择数据库管理员(DBA)和用户可以在数据库上施行什么典范的任务或拜访,以及数据库效劳器可以供给什么典范的效劳. 要检查效劳器当前的把持形式,可以运用以下饬令: ...

  4. Informix IDS 11琐屑管理(918测验)认证指南,第 7 部分: IDS复制(20)

    RSS:办理方案 演习 1 运用相对途径设置一个 HDR 对.在这个琐屑中添加一个 RSS 节点,并将这个 RSS 节点改为新的从供职器. 下面是应该执行的步调: 设置 HDR 对 主供职器:onmo ...

  5. DB2 9 运用开发(733 测验)认证指南,第 1 部分: 数据库工具与编程办法(1)

    操纵基本道理构建基本 级别: 低级 Clara Liu (claraliu@ca.ibm.com), DB2 产品操持人员, IBM 本文将介绍不同范例榜样的数据库工具及编程办法.这是包罗九篇教程的系 ...

  6. DB2 9 运用开拓(733 测验)认证指南,第 4 部门: 嵌入式 SQL 编程(4)

    构建与 DB2 休止交互的运用程序 诊断和错误措置惩罚 利用 WHENEVER 语句 在后面,我们体会到 SQLCA 数据结构包孕每当执行 SQL 语句时由 DB2 Database Manager ...

  7. DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)

    学习根基不美概念 级别: 中级 Sunil Sabat, 技术同盟司理, PeopleSoft 在本教程中,您将学习 DB2 数据库中数据操作的根基不美概念.这是分 9 部分的系列教程的第 2 部分, ...

  8. OCM exam guide - OCM认证指南

    OCM exam guide - OCM认证指南 from http://www.itpub.net/thread-1044550-1-1.html 今天开始在OU参加为期四天的Oracle 10g ...

  9. OracleOCM认证指南

    转 Oracle OCM 认证指南https://blog.csdn.net/tianlesoftware/article/details/4896281  OCM考试全称为Oracle Certif ...

最新文章

  1. linux和windows双系统引导,windows和linux双系统引导问题
  2. sql plus特殊使用技巧
  3. 霍金家人声明:他的成功将继续存在 我们永远怀念他
  4. linux中的nm命令
  5. Hashtable多线程遍历问题
  6. python查找两个数组中相同的元素_匹配两个numpy数组以找到相同的元素
  7. linux的运行级别如何更改成6,把Linux运行级别设置为6后如何解决的经验分享
  8. javascript 执行效率 java_有效提高JavaScript执行效率的几点知识
  9. error 1044 (42000):access denied for user ''@'localhost' to database 'mysql'
  10. html文本域滚动条标签,怎么给textarea加滚动条
  11. DB2 表字段值变更记录
  12. 国内外最顶级的十大敏捷项目管理软件【2022】
  13. 「PNG搜索网」 PNG素材哪里找,吐血干货!
  14. ES 数据导出和数据导入
  15. Using insecure protocols with repositories(已解决)
  16. 【xtku】铜雀台张馨予xp主题_8.2
  17. Unity实现 场景切换 音乐不断
  18. ACM 广搜 Hero In Maze
  19. 像宜家《家居指南》那样做邮件营销
  20. 除了Kaggle,这里还有一些含金量高的数据科学竞赛哦

热门文章

  1. python简单代码hello-树莓派完成简单的编程(四)
  2. python教程书籍-大牛推荐的10本学习 Python 的好书
  3. python好学吗 老程序员-今天面试了一个34岁大龄程序员,有感而发
  4. python怎么学最快-python怎么快速自学?
  5. python读取excel某一列内容-Python读取Excel数据并根据列名取值
  6. 如何使用python画折线图-Python数据可视化:使用Python画柱状图和折线图
  7. python画图武汉加油-python实现“武汉加油”点阵字
  8. python自学教程推荐-学习python中的pandas有没有好的教程推荐?
  9. python可以做什么工作好-会python语言能做什么工作
  10. python文件输出-python将控制台输出保存至文件的方法