您好,欢迎访问三七文档
第10章数据库访问数据库是存放大量用户信息的场所,几乎所有的基于Web的应用程序都使用到数据库,通过网页形式访问数据库也是本课程中必不可少的内容。尽管数据库对于有些读者来说可能是陌生的,仅学习本课程时,并不需要你是一个数据库专家。本章主要讨论:与数据库有关的技术SQL语言中的常用语句通过ADO使用数据库通过ADO中的记录集使用数据库学完本章后,读者应该能参照本章中的例子,自己动手编写出简单的与数据库有关的管理程序。10.1网站数据库技术概述在ASP出现之前,通过编写CGI(公共网关接口)程序,来接收用户表单中输入的数据,并把它放入到数据库中,或从数据库中取出数据,以网页的格式发送给浏览器。此时,为了实现对数据库的访问,使用低层的数据库访问接口,如DAO(数据访问对象),RDO(远程数据访问对象),OLEDB(对象链接和嵌入数据库)等。例如:在使用VB编写的CGI程序中,可以使用DAO和RDO提供的对象,直接打开数据库并创建记录集,形式如下:setDB=OpenDatabase(“数据库文件路径”)setrs=DB.OpenRecordSet(“数据库中的表名”)尽管使用方便,但由于使用实际的文件路径,应用程序和数据的提供者密切相关。另外,由此创建的记录集对象,对数据库的操作能力较弱。引入IDC(InternetDatabaseConnector)之后,人们使用IDC技术,在ODBC(开放式数据库连接)的支持下,通过执行SQL(结构化查询语言)语句,完成对数据库记录的查询、添加、更新和删除操作,并通过模板文件来规定结果的输出形式。使用这一技术,可以方便地完成数据库应用系统的编程,应用程序和数据提供者无关。但这一技术的缺点是交互性较差。ADO(ActiveXDataObjects)是一组接口,它通过系统级编程接口OLEDB,提供了一个应用程序级的数据访问对象,它易于使用,与编程语言无关,与提供者无关,它通过ODBC支持,可以访问几乎所有类型的数据库。当ASP脚本中需要访问数据库时,可以创建ADO数据对象,再通过在数据对象上执行SQL语句,来操作数据库,或者通过创建功能强大的记录集对象,通过记录集对象上的有关方法,方便、灵活地操作数据库中的数据。最后得到的结果可以组织成HTML文档发送到客户端。第10章数据库访问•187•10.2设置ODBC数据源通过设置ODBC数据源,ASP脚本程序可以用统一的方式使用各种不同类型的数据库。这样,当数据库环境发生变化时,只需简单地重新设置ODBC数据源,就可以在新的数据库环境下使用了。应用程序几乎不要作任何改动。ODBC实质上只是一个中间软件,它能够将通用的SQL语句转换为对某种数据库的具体操作。在ODBC中,ODBC驱动程序是它的主要部分,每个驱动程序都能将SQL标准指令映射为对应数据库引擎的专门指令。要设置ODBC数据源,可通过系统的控制面板来实现,具体操作步骤如下:(1)打开控制面板ODBC数据源管理器,双击ODBC数据源(32bit)图标,如图10-1所示。图10-1ODBC数据源(2)为确保计算机的所有用户都能访问新的ODBC数据源,选择系统DSN。(3)单击添加,创建一个新的数据源。(4)选择驱动程序,如MicrosoftAccessDriver(*.mdb),单击完成,出现图10-2所示画面。(5)填写数据源名,如TXL。并输入需要的描述(可省)。(6)单击“选取”按钮,通过标准打开文件对话框,选择作为数据源的数据库文件,如TXL.mdb。注意:若你刚使用Access数据库环境创建数据库及表,还没有退出这一环境时,这步“选取”数据库操作可能会得到“非法目录”的提示。此时只需先关闭数据库,并退出Access环境即可。(7)单击两次“确定”完成设置,并退出。VBScript+ASP动态网页制作•188•图10-2数据源设置10.3使用SQL语言SQL(StructuredQueryLanguage),结构化查询语言,用于查询、更新和操作关系数据库。本节主要讨论SQL的四个基本语句,即:查询(SELECT)、插入(INSERT)、删除(DELETE)和修改(UPDATE)。在讨论之前,有必要对数据库的基本概念作一介绍。(1)表表是一种按行与列排列的相关信息的逻辑组,例如表10-1是某厂的人事挡案表表中每一列在数据库中称作一个字段。表中有什么样的字段,每个字段中可以存放什么类型数据,这些信息决定了一个表的基本结构。创建一个数据库时,首先要指定创建什么样的表,每个表的基本结构形式是什么,即输入表的每个字段,指定它的数据类型、最大长度和其他属性。字段中可存放各种数据,包括字符、数字,甚至图形。(2)记录在表10-1中,每个工作人员的相关信息都存放在表的一行中,被称为一个记录。一个表也就成了一个记录的集合(RecordSet)。一般来说,数据库中表的任意两行都不能完全相同。表10-1人事挡案表姓名年龄部门入厂时间职称成志平51技术科65-8-18高工张斌29生产科86-9-1助工杨小萍25财务科87-7-25会计员胡洪光47技术科69-8-5工程师李贤玉49财务科66-7-31会计师张伟平23生产科89-9-3技术员陈玉蓉37生产科83-1-25第10章数据库访问•189•(3)索引为了更快地访问数据,大多数数据库都使用索引。数据库表的索引类似于书的目录一样,它也是一个表,索引表中按照一定的顺序存放了数据表中经常要查询的一些重要数据及这些数据对应于表中的位置。对数据库进行查询时,系统可以首先查找索引表,再根据索引表中的记录位置找到数据记录。这样能较快地找到所需要的记录。(4)数据库通常一个数据库由若干个表构成。或者说数据库是表的集合。以下分别介绍SQL中的常用语句。1.查询(SELECT)Select语句用于从数据库中获得一些信息,如从一个表中获得部分记录的部分字段内容,从多个表中组合形成一个新的记录集等。Select语句的一般格式如下:SELECT[DISTINCT]项目名称表FROM表名1[,表名2,…]WHERE条件GROUPBY表达式HAVING条件ORDERBY字段名[DESC|ASC]其中:(1)DISTINCT指出若结果记录集中有重复记录时,只取其中一条。例如:为了从基本情况表中了解本单位有多少种不同的职称,可使用如下查询形式:SELECTDISTINCT职称FROM基本情况表其中“基本情况表”是数据库中的一个表名,而“职称”为该表中的一个字段名。(2)项目名称表可以由多个项目用逗号分隔,每个项目可以是字段名或表达式,字段名前可以指出字段所属的表名。当需要表示全部字段时,用“*”表示。例如:为了得到基本情况表中的所有记录,可使用如下形式:SELECT*FROM基本情况表例如:为了得到学习情况表中的学号和总分数据,可使用如下形式:SELECT学号,数学+语文+学习情况表.英语AS总分FROM学习情况表生成的记录集将包含学号和总分两个字段。其中总分由数学,语文和英语三门课程成绩(三个字段)相加得到。例如:为了从学习成绩表中得到全部同学的数学平均分,可使用如下形式:SELECTAVG(数学)AS平均分FROM学习情况表其中,AVG是SQL中可以使用的集合函数,常用的集合函数还有COUNT(求记录条数)、SUM(求和)、MAX(求最大值)和MIN(求最小值)等。(3)条件可以是简单的关系式,如:职称=‘工程师’,也可以是由“AND”、“OR”和“NOT”连接起来的几个关系式。如要想从书目表中得到价格大于25元的文学类书的书名,可使用如下形式的查询:SELECT书名FROM书目表WHERE类型=‘文学’AND价格25VBScript+ASP动态网页制作•190•条件还可以是一些更复杂的集合运算,关于这些内容的进一步讨论,请参见数据库类专门书籍。(4)GROUPBY项可根据某一表达式的值将记录分组,而HAVING可确定某一组是否满足条件。例如:为了从选修课程学生名单表中得到选修人数大于40的课程号和人数,可使用如下形式的查询:SELECT课程号,COUNT(课程号)AS人数FROM名单GROUPBY课程号HAVINGCOUNT(课程号)=40(5)ORDERBY项用于将结果记录按某一字段值进行排序输出,ASC选项表示升序,DESC表示降序。例如:为了将学习成绩表按数学成绩从高到低输出,可使用如下形式查询:SELECT*FROM学习成绩表ORDERBY数学DESC(6)除了以上基本格式外,还可以在SELECT后面直接跟“TOPn[PERCENT]”来指出只返回特定数目的记录,或前面一定百分比的记录。例如:要从学生基本情况表中返回2000年入学的前25名学生的姓名,可使用如下形式:SELECT姓名TOP25FROM基本情况表WHERE入学年份=19942.插入(INSERT)Insert语句用于向表中添加一个或多个记录。可以将查询的结果插入到一个表中,形式如下:INSERTINTO目标表[(字段名表)]SELECT子句部分也可以将一组值作为一个记录追加到表中,形式为:INSERTINTO表名[(字段名表)]VALUES(值的列表)其中:如果给所有字段赋值,则格式中字段名表可以省略。“字段名表”和“值的列表”中各数据的类型必须保持一致,个数也要保持一致。例如:在只包含姓名和年龄的学生表中插入一个姓名为“张三”,年龄为23的记录的形式如下:INSERTINTO学生表VALUES(‘张三’,23)其中字符型常量“张三”用单引号括起来,数值型常量23不用定界符。如果学生表中还有其它字段,则上述语句执行时会产生错误。3.删除(DELETE)Delete语句可从表中删除满足一定条件的一个记录或一组记录。使用形式如下:DELETEFROM表名WHERE条件其中,表名指出需要删除一个或多个记录的数据表名称。该命令一次可能删除多个记录。例如:由于老职工的退休,需要从工资表中删除年龄大于60岁的全部人员,可以使用如下形式的SQL语句:DELETEFROM工资表WHERE年龄=60注意:第10章数据库访问•191•当删除记录之后,不能取消此操作。如果想要知道哪些记录将被删除,可以首先使用相同条件的查询观察结果,然后运行删除操作。随时将数据做备份副本。如果误删除记录,可以从备份副本中将数据恢复。4.修改(UPDATE)Update命令可以更改指定表中,满足指定条件的一个或多个记录的某些字段的值。使用形式如下:UPDATE表名SET字段=值[,字段=值,…]WHERE条件其中,表名指出要更改的数据表名,SET子句后的“字段=值”表示将某个值赋给对应的字段。WHERE后的条件用来指出被更新的记录应符合的条件。例如需要为联合王国的一家公司增加10%的订货量和3%的货运,对应的SQL语句如下:UPDATE订货表SET订货量=订货量*1.1,货运=货运*1.03WHERE公司名称='UK'注意:UPDATE不生成结果记录集。而且当使用更新操作更新记录之后,不能取消这次操作。如果想知道哪些记录将被更新,只能事先用相同条件的查询操作来观察。随时注意维护数据的复制备份。如果更新错了记录,可从备份副本中恢复这些数据。5.建立数据表和删除数据表可以使用CREATE命令来创建一个新的表格,其使用形式为:CREATETABLE表名(字段名数据类型[NOTNULL][,字段名数据类型[NOTNULL],…])例如:CREATETABLE学生(学号INTEGER,姓名CHAR(8),性别CHAR(2))即创建一个名称为“学生”的数据表,它包含“学号”、“姓名”和“性别”三个字段,其数据类型分别为整数类型和字符类型。一旦创建了一个数据表,就可以使用上面介绍的INSERT命令进行添加数据,以及用其它命令进行相应的操作。如果一个数据表不再有用了,可以使用DROP命令来删除这个数据表。其使用格式为:DROPTABLE表名注意:删除表同时也将表中的全部数据删除,应谨慎使用。10.4通过ADO使用数据库数据库技术看似复杂,但只要我
本文标题:第10章数据库访问
链接地址:https://www.777doc.com/doc-2241694 .html