1 / 122

第9章 数据库的使用

第9章 数据库的使用. 9.1 结构化查询语言 SQL 9.2 用 Access 建立一个数据库文件 9.3 搭建 DSN 桥梁 9.4 访问数据库中的数据 9.5 在客户端访问数据库 9.6 用 Command 对象改善查询 习题. 9.1 结构化查询语言 SQL.

yoshe
Download Presentation

第9章 数据库的使用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第9章 数据库的使用 9.1 结构化查询语言SQL 9.2 用Access建立一个数据库文件 9.3 搭建DSN桥梁 9.4 访问数据库中的数据 9.5 在客户端访问数据库 9.6 用Command对象改善查询 习题

  2. 9.1 结构化查询语言SQL • SQL 一词实际上是 ″Structured Query Language″ 结构化查询语言的缩写,SQL是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;SQL是一种特定类型的数据库——关系数据库。而控制这种数据库的计算机程序就是DBMS——数据库管理系统,譬如:SQL Server、Oracle、Sybase、DB2 等等。当用户想要检索数据库中的数据时,需要通过SQL语言发出请求,接着DBMS对该SQL 请求进行处理并检索所要求的数据,最后将其结果返回给用户,此过程被称为数据库查询,这也就是数据库查询语言这一名称的由来。

  3. SQL 不是 C、COBOL 和 FORTRAN 那种完整的计算机语言。SQL 既没有用于条件测试的If语句,也没有用于程序分支的Goto语句以及循环语句For或Do。 9.1.1 查询语句Select • 查询是SQL语言的核心,而用于表达SQL查询的Select语句则是功能最强也是最为复杂的SQL语句,它从数据库中检索数据,并将查询结果提供给用户。 • [例9-3]这一次,做一个稍微复杂一点的查询,如果要列出S表中年龄大于和等于24的所有女性的姓名、工资、电话和居住地区,并且按工资排序,可用下面的Select语句实现。 • 语法格式:

  4. Select 数据项1,数据项2,... From 表名 [[Where 条件表达式][Order By排序选项][Group By汇总查询|[Having子句]]] • 功能: 从数据库表中检索出满足条件表达式要求的数据项。 • 说明: 1.  Select子句列出所有要求Select语句检索的数据项。它放在Select语句开始处,指定此查询要检索的字段。这些数据项通常用选择项表示,即一组用“,”隔开的选择项。按照从左到右的顺序,每个选择项产生一列的查询结果,一个选择项可能是以下项目: (1) 字段名: 标识From子句指定表中的字段。如果字段名作为选择项,则SQL直接从数据库表中每行取出该列的值,再将其放在查询结果的相应行中。

  5. (2) 常数:指定在查询结果的每行中都放上该值。 (3) SQL表达式: 说明必须将要放入查询结果中的值按表达式的规定进行计算。 2. From 子句列出包含所要查询数据的表,它由关键字From后跟一组用逗号分开的表名组成。每个表名都代表一个包括该查询要检索数据的表。这些表称为此SQL语句的表源,因为查询结果都源于它们。 3. Where子句告诉SQL只查询某些行中的数据,这些行用搜索条件描述。 4. Order By子句将查询结果按一列或多列中的数据排序。如果省略此子句,则查询结果将是无序的。添加ASC属性以升序(从小到大)排列,DESC属性以降序(从大到小)排列。

  6. 5. Group By子句指定汇总查询,它不是对每行产生一个查询结果,而是将相似的行进行分组,再对每组产生一个汇总结果。 6. Having子句告诉SQL只产生由Group By得到的某些组的结果,和Where子句一样,所需要的组也用一个搜索条件指定。 • 注意: 在这里使用的条件表达式与VBScript中用比较运算符组成的表达式是一致的

  7. SQL不仅能进行数据库的查询,还可以对数据库中的数据进行修改和更新,而且更改数据库内容的SQL 更简单。不过,对于一个DBMS 来说,数据更新所造成的风险大大超出了数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和他们的更改不至于影响其他用户的作业。所以,使用修改和更新语句时,一定要小心!

  8. 9.1.2 插入语句Insert Into • 语法格式: Insert Into表名(col1, col2...) Values (value1, value2...) • 功能: 向一个表中加入新的数据行 [例9-4]将张驰作为一个新的成员加入表S中。 Insert Into S( xm,xb,nl,gz,dh,dz) Values (′张驰′,′男′,28,4500,8888,′北京′) • Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自已经存在的表中。看下面的例子。

  9. [例9-5]如果要把2000年12月30日之前产生的订单编号(Num)、日期(Date)和数目(Amount)从A表拷贝到另一个名为B的表中去,可用下面的语句:[例9-5]如果要把2000年12月30日之前产生的订单编号(Num)、日期(Date)和数目(Amount)从A表拷贝到另一个名为B的表中去,可用下面的语句: Insert into B (Num,Date,Amount) Select Num,Date,Amount From A Where Date<′30122000′ 9.1.3 更新语句Update • 下面介绍 Update 的用法,Update 语句用于更新表中选定行的一列或多列的值。要更新的目标表在语句中定义,Set子句则指定要更新哪些列并计算它们的值。 Update 语句总是包含Where语句,因为Update语句比较危险,所以你必须明确地认识到 Where 语句的重要性,Where 语句被用来指定需要更新的行

  10. 语法格式: Update 表名 Set 字段名1=value1 \[,字段名2 = value2\]... Where 条件 • 功能: 用value值更改选定的表中已经存在的字段的数据。 [例9-6]这是一个简单的Update 语句,可将表C中客户名为slp的客户的信贷值更新为10万并将他的ID变更为99。 Update C Set credit=100000.00,id=99 Where name=′slp′

  11. [例9-7]如果要将表C中客户ID为80、90、100、120客户的信贷值更新为20万,状态值为021,可用下列语句:[例9-7]如果要将表C中客户ID为80、90、100、120客户的信贷值更新为20万,状态值为021,可用下列语句: Update C Set credit=200000.00,state=021 Where ID in (80,90,100,120) • Where 字段名in (数据集合),表示查询“字段名”的值为“数据集合”中的所有记录。例如,上例中“字段名”为ID,ID的值为80、90、100、120。 • SQL 处理 Update 语句的过程是逐行搜索所指定的表,更新满足搜索条件的记录,跳过不满足搜索条件的记录。

  12. 9.1.4 删除语句Delete • 语法格式: Delete from 表名 Where 条件 • 功能: 从一个表中删除数据行。 [例9-8]从表D中删除ID为99的所有行的记录。 Delete from D Where ID=99 9.1.5 创建表语句Create table • SQL 语言可以分为两大部分: 数据定义语言和数据操纵语言,以上介绍的是数据操纵语言的Select 语句。下面介绍数据定义语言,它是用来创建和修改数据库结构的一种语句,包括 Create 和 Drop 语句。

  13. 语法格式: Create table 表名 ( 字段名1 数据类型 \[NOT NULL\],字段名2 数据类型 \[NOT NULL\], 字段名3 数据类型\[ NOT NULL\]...) • 功能: 建立一个给定字段的表。 [例9-9]下面的语句创建一个具有字段name字符型30位, amout数值型8位,id数值型4位的表B。 Create Table B (name CHAR(30), amout NUMBER(8), id NUMBER(4)) • 虽然Create table 比前面介绍的语句难理解一些,但仍然很直观。它将表B赋予一个新表,并指定表中三列的名称和数据类型。表被建立后就可以添入数据了。可用下面的语句输入数据。

  14. Insert Into B(name,amout,id) Values(′zhangchi′,100,1) 9.1.6 删除表语句Drop table • 如果,你觉得不再需要保存某个表的数据信息,则可用 Drop table 语句将该表及其所包含的所有数据从数据库中删除掉。 • 语法格式: Drop table 表名 • 功能: 删除一个表。 [例9-10]如果要删除表B可使用下面的语句。 Drop table B

  15. 9.2 用Access建立一个数据库文件 • 如果你已经安装有Access软件,可单击Windows 2000的“开始”→“程序” →“Microsoft Access”菜单,启动Access,可看到如图9.1所示的对话框。 • 在Microsoft Access对话框中,选择“空Access数据库”,然后单击“确定”按钮,打开“文件新建数据库”对话框,如图9.2所示,单击“新建文件夹”图标,会弹出图9.3所示对话框。

  16. 图9.1

  17. 图9.2

  18. 图9.3

  19. 在图9.3所示“新文件夹”对话框中输入你取的名称,如“mydb”,然后单击“确定”按钮,将返回“文件新建数据库”对话框,但路径已经改变,如图9.4所示。在图9.3所示“新文件夹”对话框中输入你取的名称,如“mydb”,然后单击“确定”按钮,将返回“文件新建数据库”对话框,但路径已经改变,如图9.4所示。 图9.4

  20. 在“文件新建数据库”对话框的“文件名”框中输入你要建的数据库的名字,如“mydb1”,然后单击“创建”按钮,即可打开“数据库窗口”,如图9.5所示。在“文件新建数据库”对话框的“文件名”框中输入你要建的数据库的名字,如“mydb1”,然后单击“创建”按钮,即可打开“数据库窗口”,如图9.5所示。 图9.5

  21. 双击“通过输入数据创建表”将打开“表”窗口如图9.6所示,在这里可输入你要保存的数据,在“字段1”上右击选择“重命名列”,可输入“姓名”,同样可将“字段2”改写为“年龄”,“字段3”改写为“工资”,“字段4”改写为“电话”,“字段5”改写为“地址”,“字段6”改写为“出生日期”,并填写相应的数据,如图9.7所示。双击“通过输入数据创建表”将打开“表”窗口如图9.6所示,在这里可输入你要保存的数据,在“字段1”上右击选择“重命名列”,可输入“姓名”,同样可将“字段2”改写为“年龄”,“字段3”改写为“工资”,“字段4”改写为“电话”,“字段5”改写为“地址”,“字段6”改写为“出生日期”,并填写相应的数据,如图9.7所示。

  22. 图9.6

  23. 图9.7

  24. 如果这次的数据都输入完了,可单击Microsoft Access的窗口的“文件”→“保存”菜单,将出现“另存为”对话框,如图9.8所示,在“表名称”栏中填写你的表名称如“S1”,然后单击“确定”按钮,会出现一个icrosoft Access的提示对话框,如图9.9所示。 • 图9.9提示你应该定义一个主关键字,单击“是”按钮,将会直接为你增加一个ID字段,如图9.10所示。 • 图9.10中所示的“表”窗口已经显示出你定义的表名“S1”,也可看到ID字段自动输入的数值1、2。至此,一个Access表S1就建好了。你可单击Microsoft Access窗口右上角的按钮,关闭Microsoft Access窗口,结束建表的工作。如果你要向表S1输入数据,可直接打开表S1继续输入的工作。

  25. 图9.8

  26. 图9.9

  27. 图9.10

  28. 9.3 搭建DSN桥梁 • 先来说明什么是ODBC。ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵数据库。比如系统中有Access的ODBC驱动程序,那么即使你没有Access软件,也可以在你的ASP程序中间对一个Access的数据库进行加、删、改记录的操作。而且根本不用知道这个数据库是放在哪里。只要写出SQL语句,ODBC驱动程序就会帮你做一切事情。

  29. 用ODBC时,经常见到DSN这个名词,DSN(Date Source Name)即数据源名称。在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如改用了SQL Server的数据库,只要其中表的结构没变,就不用改写程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁,要通过ODBC访问数据库,前提就是必须配置好DSN(即架好桥梁)。一个DSN必须包含如下一些信息。 • DSN的名字: 就是给这座桥取个名字,当程序访问数据库时,给系统传的就是这个名字,而不是数据库的实际名称。 • ODBC驱动程序类型:只有指出驱动程序类型,在操作数据库时,系统才会知道调哪个ODBC驱动程序来服务。

  30. 数据库: 必须指定这座桥到底连接的是哪个数据库,但不同的数据库系统指定数据库名字的方法有些不同。 • 这座桥是架在系统之中的,所以Windows 95/98提供了一个工具来完成这件事,即控制面板中的32位ODBC,或Windows 2000/NT中“控制面板”/“管理工具”的用户DSN、系统DSN、文件DSN。一般要用系统DSN,因为这样可以让所有在该系统上操作的人都能使用这个DSN。 (1) 单击Windows 95/98“开始”→“设置” →“控制面板”,打开“控制面板”窗口,如图9.11(a)所示。或Windows 2000/NT中“控制面板” →“管理工具”,如图9.11(b)所示。

  31. 图9.11(a)

  32. 图9.11(b)

  33. (2) 双击图标“ODBC数据源(32位)”或“数据源(ODBC)”,将弹出“ODBC数据源管理器”对话框,如图9.12所示,选择“系统DSN”标签。 (3) 在图9.12中单击“添加”按钮,将弹出“创建新数据源”对话框,如图9.13所示。选择“Microsoft Access Drive”选项,单击“完成”按钮,将弹出“ODBC Microsoft Access安装”对话框,如图9.14所示。

  34. 图9.12

  35. 图9.13

  36. 图9.14

  37. (4) 在图9.14中的“数据源”栏中输入你希望指定的DSN名称,如“QL”,然后单击“数据库”栏中“数据库:”下的“选取”按钮,将打开“选择数据库”对话框,如图9.15所示。 • 在图9.15中先在目录下选择数据库存放的路径,再选择要使用的数据库,例如“C:\..\My Documents\mydb\mydb1.mdb”,然后单击“确定”按钮就大功告成了。 • 以后可以用“ql”来访问数据库“C:\..\my Documents\mydb\mydb1.mdb”,而不用直接使用文件名“C:\..\My Documents\mydb\mydb1.mdb”,这样做的好处是,一旦改变了文件名或存放地,就不必一个一个地修改程序中所有该数据库的名称,而只需修改DSN中的配置就可以了。

  38. 以上步骤完成后,在ASP程序中即可利用DSN与数据库mydb1.mdb中的表S1建立联系了。以上步骤完成后,在ASP程序中即可利用DSN与数据库mydb1.mdb中的表S1建立联系了。 图9.15

  39. 9.4 访问数据库中的数据 9.4.1 使用Recordset对象处理结果 • 对于检索数据、检查结果和更改数据库,ADO提供了Recordset对象。正如它的名称所暗示的那样,是对记录的设置。Recordset 对象有许多可以使用的特性,可根据不同的查询条件限制,检索并且显示一组数据库文件的记录。 Recordset 对象还保持查询返回的记录的位置,它返回第一个检索到的记录,但允许你一次一项逐步扫描其他结果。

  40. 根据 Recordset 对象的指针类型的属性设置,可以滚动和更新记录。指针可以让你在一组记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。Recordset 对象还有一些属性,可用于精确地控制指针的行为,提高检查和更新结果的能力。下面通过例子来看看如何使用Recordset 对象。 [例9-11]查询并显示数据库表中数据的程序。 <% Set rs=Server.CreateObject(″ADODB.Recordset″) rs.Open ″Select * from S1″,″DSN=ql;″%>

  41. 姓名为:<%=rs(″姓名″)%><p> 年龄为:<%=rs(″年龄″)%><p> 工资为:<%=rs(″工资″)%> <%rs.Close set rs=nothing %> • 9.11.asp执行的结果如图9.16所示。

  42. 图9.16

  43. 语法格式: <% Set rs= Server.CreateObject(″ADODB.Recordset″) rs.Open 数据查询信息,数据库连接信息 =rs(″字段名称″) ... rs.close set rs=nothing %> • 功能: 使用Recordset对象可返回已经建立连接的数据库中的数据。

  44. 说明: • 第一行是声明rs为建立的Recordset对象的实例,这个语句不能少。 • 第二行是以Recordset对象的Open方法连接并发出数据查询,其中的“数据查询信息”由SQL请求命令语句组成,“数据库连接信息”由“DNS=数据源名称;UID=登录名称;PWD=密码;”组成,数据源的登录名称和密码可在建立数据源时通过“高级”选项进行设置;登录名称和密码也可以省略不设。 • 第三行“=rs(″字段名称″)”确定输出哪些数据字段。

  45. 第四行为Recordset对象的rs.close方法,将释放Recordset对象及其相关的对象。但close方法不会将Recordset对象从内存里清除,如果你不再需要这个对象了,要使用set rs=nothing,这个语句可以精确地清除这个对象。 • 注意: 当打开一个数据库的表时,如果这个表中包含若干条记录,则当前的记录指针指向第一条记录。所以,例子中显示的数据是表S1中的第一条记录的数据。

  46. [例9-12]显示数据库表中所有数据的程序。 <%Set rs=Server.CreateObject(″ADODB.Recordset″) rs.Open ″Select * from S1″,″DSN=ql;″%> <%while not rs.EOF%> 姓名为:<%=rs(″姓名″)%> 年龄为:<%=rs(″年龄″)%> 工资为:<%=rs(″工资″)%><p> <%rs.MoveNext wend%> <%rs.Close set rs=nothing %>

  47. 9.12.asp执行的结果如图9.17所示,可看到在S1中要求的数据都显示了出来。9.12.asp执行的结果如图9.17所示,可看到在S1中要求的数据都显示了出来。 图9.17

  48. 这里使用了while...wend循环,并使用了Recordset 对象的MoveNext方法,将记录指针向下移动一行。 • 下面列出了所创建的 RecordSet对象(游标)的一些属性和方法。 • rs.EOF: 记录指针在记录的尾部; • rs.BOF: 记录指针在记录的头部; • rs.Fields.Count: RecordSet对象的字段总数; • rs(i).Name: 第 i 个字段的名称, i 由 0 算起到 rs.Fields.Count1; • rs(i): 读取第 i 个字段的数据, i 由 0 算起到 rs.Fields.Count1; • rs(″ 字段名称 ″): 读取指定字段的数据; • rs.RecordCount: 游标中的数据记录总数;

  49. rs.MoveNext: 将指针移到下一个记录; • rs.MovePrev: 将指针移到上一个记录; • rs.MoveFirst: 将指针移到第一个记录; • rs.MoveLast: 将指针移到最后一个记录; • rs.Move [n] : 将指针移到第 n 个记录,n由0算起; • rs.Move NumRecords,Start: “NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签; • rs.Close: 关闭 RecordSet 对象。

  50. 9.4.2 使用Connection对象 1. 向数据库插入数据 • ADO提供了Connection对象,用于建立和管理应用程序和ODBC数据库之间的连接。Connection对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。 • 下面的脚本使用Connection对象的Execute方法发出SQL Insert命令向数据库中的表发出查询,该命令并将数据插入到指定的数据库表中。 [例9-13]将新的数据插入到数据库表文件里的程序。 <% Set cn =Server.CreateObject(″ADODB.Connection″)

More Related