《嵌入式SQL语言》PPT课件.ppt_第1页
《嵌入式SQL语言》PPT课件.ppt_第2页
《嵌入式SQL语言》PPT课件.ppt_第3页
《嵌入式SQL语言》PPT课件.ppt_第4页
《嵌入式SQL语言》PPT课件.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章 嵌入式SQL语言,14-1 嵌入式SQL语句 14-2 动态SQL语句,14-1 嵌入式SQL语句,SQL语句: 每个数据库管理系统(DMS)都有其自己的数据处理语言(DML),所有DML语言都是基于一种语言(SQL语言,又称为结构化的查询语言)。 SQL语句有三种主要类型。最常见的语句(query),即信息请求,第二种是数据修改语句,即数据的添加、删除或更新。最后一种类型是系统和事务处理管理(例如,生成表、授权安全许可、提交、以及回调事务处理)。,以前介绍的SQL语言是作为独立语言在终端交互方式下使用的。这是面向集合的描述性语言,是非过程性的。即大多数语句都是独立执行,与上下文无关的。而许多事务处理应用都是过程性的,需要根据不同的条件来执行不问的任务,因此单纯用SQL语言是很难实现这类应用的。 在PB中由于拥有功能强大的数据窗口,使得对数据库的操作一般都由数据窗口完成。然而数据窗口也不是万能的(比如程序中连接数据库就必须通过嵌入式SQL来完成),有时候,在程序中我们往往需要对数据库进行读取或修改一行数据,需要动态的查询一些数据,查询条件由在程序中动态设定,这时使用SQL语句就显得灵活方便。针对这类应用需求,PowerScript提供了一整套嵌入式SQL语句。利用嵌入式SQL语句,我们能够在程序中灵活地操纵数据库。,PowerScript支持在程序中使用嵌入式SQL语句。 实际上,对这类语句,PowerBuilder在将其发送到DBMS之前,并不做任何处理,而由DBMS完成相应操作,最后PowerBuilder得到处理结果。 在程序中书写SQL语句的格式为: SQL语句; 整个SQL语句可以写在一行,也可以写成更易理解的多行格式,只要在语句结束处放上一个分号(;)即可。在SQL语句中可以使用常量或合法的变量,但使用变量时须在变量前加个冒号(:)(通常称做绑定变量或引用变量),多个变量或常量之间用逗号(,)分隔。,例如: INSERT INTO Employee (Emp_nbr, Emp_name) VALUES (:EmpNbr, “李明“) ; 其中,Employee是表名,Emp_nbr、Emp_name是列名,EmpNbr是程序说明的变量,整个语句的意思是在表Employee中插入一条记录,该记录Emp_nbr列的值为变量EmpNbr中存放的值,列Emp_name的值为“李明”。,一、 嵌入式的SQL语句,什么是嵌入式的SQL语句?嵌入式包含以下的含义: 嵌入式的SQL语句可以直接嵌入到用户的powerscript中 嵌入式的SQL语句使用户能在命令的各个区域包含powerscript变量。 利用嵌入式的SQL语句,我们能够在程序中灵活的操纵数据库,实际上对这类语句,PB在将其发送到DBMS之前,并不做任何处理,而由DBMS完成相应的操作,最后由powerbuilder得到处理结果。,嵌入式的SQL语句执行后可能失败也可能成功。 良好的编程风格应对每条SQL语句的执行结果进行检查。执行结果存放在事务对象的SQLCODE当中,0表示成功,-1表示失败。 二、建立和断开与数据库的连接 使用CONNECT建立与数据库的连接CONNECT是每个访问数据库的PowerBuilder程序必须使用的语句,它的功能是通过事务对象将应用程序与数据库建立连接,连接成功后,其它SQL语句和数据窗口才能通过事务对象操作数据库。,CONNECT语句的语法格式为: CONNECT USING TransactionObject; 其中,TransactionObject是事务对象,在执行该语句前,必须正确设置事务对象的数据库连接属性。大括号()表示该成分可以省略,省略时使用缺省的事务对象 disconnect USING TransactionObject;,三、提交与回滚事务,事务是数据库管理系统完成一项完整工作的逻辑单位,数据库管理系统保证一个事务要么被完整地完成(称做提交),要么被彻底地取消(称做回滚)。应用程序可以通过COMMIT和ROLLBACK语句控制事务操作。应该注意的是,事务和事务对象是两个完全不同的概念。,1提交事务语句 COMMIT语句提交事务,完成数据库的物理修改。执行该语句后,将关闭所先前打开的游标(CURSOR)和过程(PROCEDURE),并开始一个新的事务。 COMMIT语句的语法格式为: COMMIT USING TransactionObject ; 其中,TransactionObject更新数据库操作的事务对象名,缺省时使用事务对象SQLCA。,ROLLBACK语句(回滚) 语句放弃自上一个COMMIT、ROLLBACK或CONNECT语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务。 其语法格式为: ROLLBACK USING TransactionObject ; 其中,TransactionObject是事务对象名,缺省时使用事务对象SQLCA。,四、单行检索语句select 语句,格式: select col1,col2,coln into :var1,:var2,:varn from table_name where 条件表达式 using 事物处理对象,例如: integer stud_id string name,sex select stud_id,name,sex into :stud_id,:name,:sex from student where name=”john”; 单行SELECT语句从数据库中检索一条记录,如果找到多条满足条件的记录,则产生错误。事务对象的sqlcode取值为100。,五、insert语句,insert into 表名 列名1,列名2,列名3 values(:v1,:v2,:vn) USING 事务对象; insert student(id,name,sex,math) values(:s_id,:s_name,f,89); insert student values(9969,jim,m,null,null,96,null) using sqlca;,六、update 语句,该语句更新满足条件的记录的值。格式: update 表名 set 列1=:v1,列2=:v2. Where 条件表达式 Using 事务对象; Int m=0 Update student set math=:m where name like 王%;,七、delete 语句,该语句从指定的表中删除满足条件的记录。 Delete from 表名 Where 条件表达式 Using 事务对象; Int m1=30,m2=20 Delete from student where math:m1 and math:m2;,八、检查SQL语句执行情况,嵌入式SQL语句的执行有可能成功、也有可能失败,良好的编程风格是对每条可执行的SQL语句都检查其执行情况。每当执行一条SQL语句后,与该语句相关的事务对象的SQLCode属性都给出一个值指示SQL语句的执行是否成功: SQLCode取值为: 0 最近一次SQL语句执行成功 -1 最近一次SQL语句执行失败 100 最近一次SQL语句没有返回数据,当SQLCode的值为-1时(即最近一次SQL语句执行失败时),事务对象的SQLDBCode属性中存放着数据库厂商提供的错误代码、事务对象的SQLErrText属性中存放着数据库厂商提供的错误信息,利用这两个属性,可以得到出错原因。下面是个检查SQL语句的执行是否成功的示例:,int Emp_num = Integer(sle_1.Text) SELECT employee.Emp_Name, INTO :sle_Name.textFROM Employee WHERE Employee.Emp_num = :Emp_num; if Emp_tran.SQLCode = 100 then /未找到 MessageBox(“查询雇员“, “未找到指定雇员“) elseif Emp_tran.SQLCode 0 then /SELECT语句执不成功 MessageBox(“数据库错误“, sqlca.SQLErrText, Exclamation!) /显示出错信息 End If,14-2 动态SQL语句,前面介绍的SQL语句如表名、列名、条件等在编译时已经确定,但有时候,我们需要在运行的时候才能确定我们需要查询的表名、列名、条件,甚至动态的创建表,这时就需要使用动态SQL语句。 动态SQL语句有四种类型。 一、 类型一 execute immediate sqlstatement using 事务对象; sqlstatement是一个内含SQL语句的字符串。,例如: String mysql,s_id,s_name Int m M=93 S_id=9969 S_name=jim Mysql=”insert into student (id,name,math) values(” Mysql=mysql+s_id+”,”+name+”,”+string(m)+”)” Execute immediate :mysql;,在程序中动态的创建表 String mysql Mysql=”create table teacher”,二、类型二 格式: Prepare dynamicstagingarea from SQL表达式 Using 事务对象; Execute dynamicstagingArea Using 变量列表; Dynamicstagingarea 是powerscript提供的一种数据类型,用来存储动态SQL语句所用的信息,通常我们使用预定义的全局变量SQLSA,不用另外定义。 利用这种动态的SQL语句用语执行数据操作语句(例如定义表、删除表等)以及插入、更新和删除记录。,Int m String s_id,s_name,sqlstr Sqlstr=“insert into student (id,name,math) values (?,?,?)” Prepare sqlsa from :sqlstr using sqlca; M=97 S_id=”9969” S_name=”jim” Execute sqlsa using :s_id,:s_name,:math; 当涉及的参数及类型较多时,用类型一需要较多的转换函数,字符串的构造相当复杂,用类型二方法比较简洁。,实验五: 包含三个PB对象 1. 应用对象mypbex。主要完成打开主窗口,在退出应用程序时,断开与数据库的联接。 2. 登录窗口w_login(respond!,主要根据用户输入的密码和口令来连接数据库,根据连接数据库的结果,来确定是否显示主窗口。 该窗口有两个按钮,“确定”来完成与数据库的连接,并根据连接的结果,来判断是否使主窗口可见,而“取消”按钮则关闭应用系统。 该窗口有一个窗口函数wf_connect来完成与数据库的连接有两个单行编辑器来输入连接的口令和密码。,3. 主窗口w_main(main!) 在打开该窗口时首先显示登录窗口,待用户登录成功后才显示主窗口。 (1)在w_login中声明一个对象函数wf_connect() sqlca.dbms=“ODBC“ IF sle_password.text=“ then return -1 sqlca.dbparm=“connectstring=DSN=STUDENT;UID=“+userid +“;PWD=“+ password +“ connect using sqlca; return sqlca.sqlcode,(2)w_login的确定按纽的clicked事件中 ifwf_connect(sle_userid.text,sle_password.text)0 then messagebox(“连接数据库错误!“,“连接失败“+sqlca.sqlerrtext) halt end if close(parent) w_main.visible=true,(3)w_login的取消按纽的clicked事件中: halt (4)在应用对象的mypbex的open事件中 open(w_login) open(w_main) (5)在应用对象的close事件中 disconnect using sqlca; (6)在窗口w_main的“退出”按纽的clicked事件中: close(parent),练习:,1、在窗口在w_main上有一个编辑框sle_1输入姓名,在w_person中有一个静态文本控件s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论