嵌入式SQL语言_第1页
嵌入式SQL语言_第2页
嵌入式SQL语言_第3页
嵌入式SQL语言_第4页
嵌入式SQL语言_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、数据库管理系统数据库管理系统第第14章章 嵌入式嵌入式SQL语言语言 14-1 14-1 嵌入式嵌入式SQL语句语句 14-2 14-2 动态动态SQL语句语句 数据库管理系统数据库管理系统14-1 嵌入式嵌入式SQL语句语句 nSQL语句:语句: 每个数据库管理系统(每个数据库管理系统(DMS)都有其自己的)都有其自己的数据处理语言(数据处理语言(DML),所有),所有DML语言都是基语言都是基于一种语言(于一种语言(SQL语言,又称为结构化的查询语言,又称为结构化的查询语言)。语言)。 SQL语句有三种主要类型。最常见的语句语句有三种主要类型。最常见的语句(query),即信息请求,第二种

2、是数据修改语即信息请求,第二种是数据修改语句,即数据的添加、删除或更新。最后一种类型句,即数据的添加、删除或更新。最后一种类型是系统和事务处理管理(例如,生成表、授权安是系统和事务处理管理(例如,生成表、授权安全许可、提交、以及回调事务处理)。全许可、提交、以及回调事务处理)。数据库管理系统数据库管理系统n 以前介绍的以前介绍的SQL语言是作为独立语言在终端交互方语言是作为独立语言在终端交互方式下使用的。这是面向集合的描述性语言,是非过程性式下使用的。这是面向集合的描述性语言,是非过程性的。即大多数语句都是独立执行,与上下文无关的。而的。即大多数语句都是独立执行,与上下文无关的。而许多事务处理

3、应用都是过程性的,需要根据不同的条件许多事务处理应用都是过程性的,需要根据不同的条件来执行不问的任务,因此单纯用来执行不问的任务,因此单纯用SQL语言是很难实现这语言是很难实现这类应用的。类应用的。n 在在PB中由于拥有功能强大的数据窗口,使得对数据中由于拥有功能强大的数据窗口,使得对数据库的操作一般都由数据窗口完成。然而数据窗口也不是库的操作一般都由数据窗口完成。然而数据窗口也不是万能的(比如程序中连接数据库就必须通过嵌入式万能的(比如程序中连接数据库就必须通过嵌入式SQL来完成),有时候,在程序中我们往往需要对数据库进来完成),有时候,在程序中我们往往需要对数据库进行读取或修改一行数据,需

4、要动态的查询一些数据,查行读取或修改一行数据,需要动态的查询一些数据,查询条件由在程序中动态设定,这时使用询条件由在程序中动态设定,这时使用SQL语句就显得语句就显得灵活方便。针对这类应用需求,灵活方便。针对这类应用需求,PowerScript提供了提供了一整套嵌入式一整套嵌入式SQL语句。利用嵌入式语句。利用嵌入式SQL语句,我们能语句,我们能够在程序中灵活地操纵数据库。够在程序中灵活地操纵数据库。 数据库管理系统数据库管理系统PowerScript支持在程序中使用嵌入式支持在程序中使用嵌入式SQL语句。语句。 实际上,对这类语句,实际上,对这类语句,PowerBuilder在在将其发送到将

5、其发送到DBMS之前,并不做任何处理,而之前,并不做任何处理,而由由DBMS完成相应操作,最后完成相应操作,最后PowerBuilder得到处理结果。得到处理结果。 在程序中书写在程序中书写SQL语句的格式为:语句的格式为: SQL语句;语句; 整个整个SQL语句可以写在一行,也可以写成更语句可以写在一行,也可以写成更易理解的多行格式,只要在语句结束处放上一个易理解的多行格式,只要在语句结束处放上一个分号(;)即可。在分号(;)即可。在SQL语句中可以使用常量语句中可以使用常量或合法的变量,但使用变量时须在变量前加个冒或合法的变量,但使用变量时须在变量前加个冒号(:)(通常称做绑定变量或引用变

6、量),多号(:)(通常称做绑定变量或引用变量),多个变量或常量之间用逗号(,)分隔。个变量或常量之间用逗号(,)分隔。数据库管理系统数据库管理系统n例如:例如: INSERT INTO Employee (Emp_nbr, Emp_name) VALUES (:EmpNbr, 李明李明) ; 其中,其中,Employee是表名,是表名,Emp_nbr、Emp_name是列名,是列名,EmpNbr是程序说明的是程序说明的变量,整个语句的意思是在表变量,整个语句的意思是在表Employee中插中插入一条记录,该记录入一条记录,该记录Emp_nbr列的值为变量列的值为变量EmpNbr中存放的值,列中

7、存放的值,列Emp_name的值为的值为“李明李明”。数据库管理系统数据库管理系统一、一、 嵌入式的嵌入式的SQL语句语句n什么是嵌入式的什么是嵌入式的SQL语句?嵌入式包含以下的语句?嵌入式包含以下的含义:含义:n 嵌入式的嵌入式的SQL语句可以直接嵌入到用户的语句可以直接嵌入到用户的powerscript中中n 嵌入式的嵌入式的SQL语句使用户能在命令的各个区语句使用户能在命令的各个区域包含域包含powerscript变量。变量。n 利用嵌入式的利用嵌入式的SQL语句,我们能够在程序中语句,我们能够在程序中灵活的操纵数据库,实际上对这类语句,灵活的操纵数据库,实际上对这类语句,PB在在将其

8、发送到将其发送到DBMS之前,并不做任何处理,而之前,并不做任何处理,而由由DBMS完成相应的操作,最后由完成相应的操作,最后由powerbuilder得到处理结果。得到处理结果。数据库管理系统数据库管理系统n 嵌入式的嵌入式的SQL语句执行后可能失败也可能成语句执行后可能失败也可能成功。功。n 良好的编程风格应对每条良好的编程风格应对每条SQL语句的执行结语句的执行结果进行检查。执行结果存放在事务对象的果进行检查。执行结果存放在事务对象的SQLCODE当中,当中,0表示成功,表示成功,-1表示失败。表示失败。n二、建立和断开与数据库的连接二、建立和断开与数据库的连接n使用使用CONNECT建

9、立与数据库的连接建立与数据库的连接CONNECT是每个访问数据库的是每个访问数据库的PowerBuilder程序必须程序必须使用的语句,它的功能是通过事务对象将应用程使用的语句,它的功能是通过事务对象将应用程序与数据库建立连接,连接成功后,其它序与数据库建立连接,连接成功后,其它SQL语语句和数据窗口才能通过事务对象操作数据库。句和数据窗口才能通过事务对象操作数据库。数据库管理系统数据库管理系统nCONNECT语句的语法格式为:语句的语法格式为:CONNECT USING TransactionObject; 其中,其中,TransactionObject是事务对象,是事务对象,在执行该语句前

10、,必须正确设置事务对象的数据在执行该语句前,必须正确设置事务对象的数据库连接属性。大括号(库连接属性。大括号()表示该成分可以省)表示该成分可以省略,省略时使用缺省的事务对象略,省略时使用缺省的事务对象disconnect USING TransactionObject;数据库管理系统数据库管理系统三、提交与回滚事务三、提交与回滚事务 n事务是数据库管理系统完成一项完整工作的逻辑事务是数据库管理系统完成一项完整工作的逻辑单位,数据库管理系统保证一个事务要么被完整单位,数据库管理系统保证一个事务要么被完整地完成(称做提交),要么被彻底地取消(称做地完成(称做提交),要么被彻底地取消(称做回滚)。

11、应用程序可以通过回滚)。应用程序可以通过COMMIT和和ROLLBACK语句控制事务操作。应该注意的是,语句控制事务操作。应该注意的是,事务和事务对象是两个完全不同的概念。事务和事务对象是两个完全不同的概念。数据库管理系统数据库管理系统n1提交事务语句提交事务语句 COMMIT语句提交事务,完成数据库的物理语句提交事务,完成数据库的物理修改。执行该语句后,将关闭所先前打开的游标修改。执行该语句后,将关闭所先前打开的游标(CURSOR)和过程()和过程(PROCEDURE),并),并开始一个新的事务。开始一个新的事务。n COMMIT语句的语法格式为:语句的语法格式为:COMMIT USING

12、TransactionObject ; 其中,其中,TransactionObject更新数据库操更新数据库操作的事务对象名,缺省时使用事务对象作的事务对象名,缺省时使用事务对象SQLCA。数据库管理系统数据库管理系统nROLLBACK语句(回滚)语句(回滚) 语句放弃自上一个语句放弃自上一个COMMIT、ROLLBACK或或CONNECT语句以来的所有数据库操作,关语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务。闭所有的游标和过程,并开始一个新的事务。 其语法格式为:其语法格式为: ROLLBACK USING TransactionObject ; 其中,其中,Tran

13、sactionObject是事务对象名,是事务对象名,缺省时使用事务对象缺省时使用事务对象SQLCA。数据库管理系统数据库管理系统四、单行检索语句四、单行检索语句select 语句语句n格式:格式:select col1,col2,coln into :var1,:var2,:varn from table_name where 条件表达式条件表达式 using 事物处理对象事物处理对象数据库管理系统数据库管理系统n例如:例如: integer stud_id string name,sex select stud_id,name,sex into :stud_id,:name,:sex fr

14、om student where name=”john”; 单行单行SELECT语句从数据库中检索一条记录,语句从数据库中检索一条记录,如果找到多条满足条件的记录,则产生错误。事如果找到多条满足条件的记录,则产生错误。事务对象的务对象的sqlcode取值为取值为100。数据库管理系统数据库管理系统五、五、insert语句语句ninsert into 表名表名 列名列名1,列名,列名2,列名,列名3 values(:v1,:v2,:vn)USING 事务对象事务对象;ninsert student(id,name,sex,math)values(:s_id,:s_name,f,89);ninse

15、rt student values(9969,jim,m,null,null,96,null)using sqlca;数据库管理系统数据库管理系统六、六、update 语句语句 n该语句更新满足条件的记录的值。格式:该语句更新满足条件的记录的值。格式:nupdate 表名表名 set 列列1=:v1,列列2=:v2. Where 条件表达式条件表达式 Using 事务对象事务对象; Int m=0nUpdate student set math=:m where name like 王王%;数据库管理系统数据库管理系统七、七、delete 语句语句n该语句从指定的表中删除满足条件的记录。该语句

16、从指定的表中删除满足条件的记录。nDelete from 表名表名Where 条件表达式条件表达式Using 事务对象事务对象;nInt m1=30,m2=20 Delete from student where math:m1 and math:m2;数据库管理系统数据库管理系统八、检查八、检查SQL语句执行情况语句执行情况n 嵌入式嵌入式SQL语句的执行有可能成功、也有可语句的执行有可能成功、也有可能失败,良好的编程风格是对每条可执行的能失败,良好的编程风格是对每条可执行的SQL语句都检查其执行情况。每当执行一条语句都检查其执行情况。每当执行一条SQL语句后,与该语句相关的事务对象的语句后

17、,与该语句相关的事务对象的SQLCode属性都给出一个值指示属性都给出一个值指示SQL语句的语句的执行是否成功:执行是否成功:nSQLCode取值为:取值为: 0 最近一次最近一次SQL语句执行成功语句执行成功 -1 最近一次最近一次SQL语句执行失败语句执行失败 100 最近一次最近一次SQL语句没有返回数据语句没有返回数据数据库管理系统数据库管理系统n 当当SQLCode的值为的值为-1时(即最近一次时(即最近一次SQL语句执行失败时),事务对象的语句执行失败时),事务对象的SQLDBCode属性中存放着数据库厂商提供的错误代码、事务属性中存放着数据库厂商提供的错误代码、事务对象的对象的S

18、QLErrText属性中存放着数据库厂商属性中存放着数据库厂商提供的错误信息,利用这两个属性,可以得到出提供的错误信息,利用这两个属性,可以得到出错原因。下面是个检查错原因。下面是个检查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 /未找到未找

19、到 MessageBox(查询雇员查询雇员, 未找到指定雇员未找到指定雇员) elseif Emp_tran.SQLCode 0 then /SELECT语句执不成功语句执不成功 MessageBox(数据库错误数据库错误, sqlca.SQLErrText, Exclamation!) /显示出错信息显示出错信息End If数据库管理系统数据库管理系统14-2 动态动态SQL语句语句 n前面介绍的前面介绍的SQL语句如表名、列名、条件等语句如表名、列名、条件等在编译时已经确定,但有时候,我们需要在运在编译时已经确定,但有时候,我们需要在运行的时候才能确定我们需要查询的表名、列名、行的时候才能

20、确定我们需要查询的表名、列名、条件,甚至动态的创建表,这时就需要使用动条件,甚至动态的创建表,这时就需要使用动态态SQL语句。语句。n动态动态SQL语句有四种类型。语句有四种类型。n一、一、 类型一类型一 execute immediate sqlstatement using 事务对象事务对象; sqlstatement是一个内含是一个内含SQL语句的字符串。语句的字符串。数据库管理系统数据库管理系统n例如:例如:String mysql,s_id,s_nameInt mM=93S_id=9969S_name=jimMysql=”insert into student (id,name,ma

21、th) values(”Mysql=mysql+s_id+”,”+name+”,”+string(m)+”)”Execute immediate :mysql;数据库管理系统数据库管理系统n在程序中动态的创建表在程序中动态的创建表String mysqlMysql=”create table teacher”&+”(t_id char(10) not null,”&+”t_name char(20) null.”&+”t_age integer null)”execute immediate :mysql using sqlca;数据库管理系统数据库管理系统n二、类型二

22、二、类型二n格式:格式:Prepare dynamicstagingarea from SQL表达式表达式 Using 事务对象事务对象;Execute dynamicstagingArea Using 变变量列表量列表;nDynamicstagingarea 是是powerscript提供的一种数据类型,用来存储动态提供的一种数据类型,用来存储动态SQL语语句所用的信息,通常我们使用预定义的全局变句所用的信息,通常我们使用预定义的全局变量量SQLSA,不用另外定义。,不用另外定义。n利用这种动态的利用这种动态的SQL语句用语执行数据操作语句用语执行数据操作语句(例如定义表、删除表等)以及插入

23、、更语句(例如定义表、删除表等)以及插入、更新和删除记录。新和删除记录。数据库管理系统数据库管理系统Int mString s_id,s_name,sqlstrSqlstr=“insert into student (id,name,math) values (?,?,?)”Prepare sqlsa from :sqlstr using sqlca;M=97S_id=”9969”S_name=”jim”Execute sqlsa using :s_id,:s_name,:math; 当涉及的参数及类型较多时,用类型一需要当涉及的参数及类型较多时,用类型一需要较多的转换函数,字符串的构造相当复

24、杂,用类较多的转换函数,字符串的构造相当复杂,用类型二方法比较简洁。型二方法比较简洁。数据库管理系统数据库管理系统n实验五:实验五:n 包含三个包含三个PB对象对象 1. 应用对象应用对象mypbex。主要完成打开主窗口,。主要完成打开主窗口,在退出应用程序时,断开与数据库的联接。在退出应用程序时,断开与数据库的联接。 2. 登录窗口登录窗口w_login(respond!,主要根,主要根据用户输入的密码和口令来连接数据库,根据连据用户输入的密码和口令来连接数据库,根据连接数据库的结果,来确定是否显示主窗口。接数据库的结果,来确定是否显示主窗口。n 该窗口有两个按钮,该窗口有两个按钮,“确定确

25、定”来完成与数据来完成与数据库的连接,并根据连接的结果,来判断是否使主库的连接,并根据连接的结果,来判断是否使主窗口可见,而窗口可见,而“取消取消”按钮则关闭应用系统。按钮则关闭应用系统。n 该窗口有一个窗口函数该窗口有一个窗口函数wf_connect来完成来完成与数据库的连接有两个单行编辑器来输入连接的与数据库的连接有两个单行编辑器来输入连接的口令和密码。口令和密码。数据库管理系统数据库管理系统n3. 主窗口主窗口w_main(main!) 在打开该窗口时首先显示登录窗口,待用户登在打开该窗口时首先显示登录窗口,待用户登录成功后才显示主窗口。录成功后才显示主窗口。(1)在在w_login中声

26、明一个对象函数中声明一个对象函数wf_connect()sqlca.dbms=ODBCIF sle_password.text= then return -1sqlca.dbparm=connectstring=DSN=STUDENT;UID=+userid +;PWD=+ password +connect using sqlca;return sqlca.sqlcode数据库管理系统数据库管理系统n(2)w_login的确定按纽的的确定按纽的clicked事件中事件中ifwf_connect(sle_userid.text,sle_password.text)0 thenmessagebox(连接数据库错误连接数据库错误!,连接失

温馨提示

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

评论

0/150

提交评论