1.72k likes | 1.91k Views
第10章 数据库访问 . 主要内容 . 几乎所有的基于 Web 的应用程序都使用到数据库, 本章主要讨论 与数据库有关的技术 SQL 语言中的常用语句 通过 ADO 使用数据库 通过 ADO 中的记录集使用数据库. 本章目录. 10.1 网站数据库技术概述. 本章小结. 10.2 设置 ODBC 数据源. 习题. 10.3 使用 SQL 语言. 10.4 通过 ADO 使用数据库 . 例1:显示通讯录中全部记录. 例4:删除满足条件的记录. 例 5: 通过选择来删除记录. 例2:插入一条静态记录 . 例6:更改某一记录.
E N D
主要内容 • 几乎所有的基于Web的应用程序都使用到数据库,本章主要讨论 • 与数据库有关的技术 • SQL语言中的常用语句 • 通过ADO使用数据库 • 通过ADO中的记录集使用数据库
本章目录 10.1 网站数据库技术概述 本章小结 10.2 设置ODBC数据源 习题 10.3 使用SQL语言 10.4 通过ADO使用数据库 例1:显示通讯录中全部记录 例4:删除满足条件的记录 例5:通过选择来删除记录 例2:插入一条静态记录 例6:更改某一记录 例3:将表单中的输入插入到数据表中 例7:通过表单输入修改内容 10.5 通过记录集对象使用数据库 例8:记录的显示和添加 例11:删除数据 例9:修改数据 例12:分页显示记录 例10:成批修改记录
10.1 网站数据库技术概述 • 数据库是存放大量用户信息的场所,几乎所有的基于Web的应用程序都使用到数据库,通过网页形式访问数据库也是本课程中必不可少的内容。 • 这里介绍CGI,IDC,ASP中与数据库有关的技术
CGI程序与数据库 • 在使用VB编写的CGI程序中,可以使用DAO和RDO提供的对象,直接打开数据库并创建记录集,形式如下: set DB=OpenDatabase(“数据库文件路径”) set rs=DB.OpenRecordSet(“数据库中的表名”) • 由于使用实际的文件路径,应用程序和数据的提供者密切相关。 参考:网页中使用CGI程序例
IDC技术与数据库 • 引入IDC(Internet Database Connector)之后,人们使用IDC技术,在ODBC(开放式数据库连接)的支持下,通过执行SQL(结构化查询语言)语句,完成对数据库记录的查询、添加、更新和删除操作,并通过模板文件来规定结果的输出形式。
IDC技术与数据库 • 使用IDC技术,可以方便地完成数据库应用系统的编程,应用程序和数据提供者无关。 • 但IDC技术的缺点是交互性较差。 参考:网页中使用IDC技术例
ASP中的数据库 • ADO(ActiveX Data Objects)是一组接口,它通过系统级编程接口OLE DB,提供了一个应用程序级的数据访问对象,它易于使用,与编程语言无关,与提供者无关,它通过ODBC支持,可以访问几乎所有类型的数据库。
ASP中的数据库 • 当ASP脚本中需要访问数据库时,可以创建ADO数据对象,再通过在数据对象上执行SQL语句,来操作数据库,或者通过进一步创建功能强大的记录集对象,通过记录集对象上的有关方法,方便、灵活地操作数据库中的数据。最后得到的结果可以组织成html文档发送到客户端。
ASP中的数据库 • 在ASP中访问数据库,需要掌握以下有关内容: • 数据库及数据表的建立 • ODBC数据源的设置方法 • SQL语句编写 • ADO数据对象的创建和操作 • 记录集对象的创建和操作 • 数据的组织与输出
10.2 设置ODBC数据源 • 通过设置ODBC数据源,ASP脚本程序可以用统一的方式使用各种不同类型的数据库。这样,当数据库环境发生变化时,只需简单地重新设置ODBC数据源,就可以在新的数据库环境下使用了。应用程序几乎不要作任何改动。
10.2 设置ODBC数据源 • ODBC实质上只是一个中间软件,它能够将通用的SQL语句转换为对某种数据库的具体操作。 • 要设置ODBC数据源,可通过系统的控制面板来实现,具体操作步骤如下:
打开控制面板 • 单击开始、设置、控制面板显示如图:
10.2 设置ODBC数据源 注意:Windows2000中设置ODBC数据源在控制面板中的管理工具下进行:
10.2 设置ODBC数据源 双击ODBC 数据源 (32bit)图标,出现如图所示。
10.2 设置ODBC数据源 为确保计算机的所有用户都能访问新的ODBC数据源,选择系统DSN有。
10.2 设置ODBC数据源 (3) 单击添加,创建一个新的数据源。
创建一个新的数据源 • 出现如下图:
ODBC Access 设置窗口 • 单击完成,出现如下图:
命名数据源 • 填写数据源名,如Northwind。并输入需要的描述(可省):
选择数据库文件 • 通过标准打开文件对话框,选择作为数据源的数据库文件。
确定设置 • 确定设置,显示如下图:
完成设置 • 完成设置,可看到已设置的数据源:
10.2 设置ODBC数据源 注意:若你刚使用Access数据库环境创建数据库及表,还没有退出这一环境时,这步“选取”数据库操作可能会得到“非法目录”的提示。此时只需先关闭数据库,并退出Access环境即可。
10.3 使用SQL语言 • SQL(Structured Query Language),结构化查询语言,用于查询、更新和操作关系数据库。本节主要讨论SQL的四个基本语句,即: • 查询(SELECT) • 插入(INSERT) • 删除(DELETE) • 修改(UPDATE)
准备知识 • 在讨论之前,有必要对数据库的基本概念作一介绍。 (1) 表 (2) 记录 (3) 索引 (4) 数据库
(1) 表 • 表是一种按行与列排列的相关信息的逻辑组,例如某厂的人事挡案表。 • 表中每一列在数据库中称作一个字段。表中有什么样的字段,每个字段中可以存放什么类型数据,这些信息决定了一个表的基本结构。
(2) 记录 • 在表中,每个工作人员的相关信息都存放在表的一行中,被称为一个记录。一个表也就成了一个记录的集合(RecordSet) • 一般来说,数据库中表的任意两行都不能完全相同。
(3) 索引 • 为了更快地访问数据,大多数数据库都使用索引。 • 数据库表的索引类似于书的目录一样,它也是一个表,索引表中按照一定的顺序存放了数据表中经常要查询的一些重要数据及这些数据对应于表中的位置。 • 对数据库进行查询时,系统可以首先查找索引表,再根据索引表中的记录位置找到数据记录。
(4) 数据库 • 通常一个数据库由若干个表构成。或者说数据库是表的集合。 • 以下分别介绍SQL中的常用语句。
1.查询(SELECT) • Select语句用于从数据库中获得一些信息,如从一个表中获得部分记录的部分字段内容,从多个表中组合形成一个新的记录集等。
1.查询(SELECT) • Select语句的一般格式如下: SELECT [DISTINCT]项目名称表 FROM 表名1[,表名2,… ] WHERE 条件 GROUP BY 表达式 HAVING 条件 ORDER BY 字段名[DESC|ASC]
1.查询(SELECT) • 其中: (1) DISTINCT 指出若结果记录集中有重复记录时,只取其中一条。 例如:为了从基本情况表中了解本单位有多少种不同的职称,可使用如下查询形式: SELECT DISTINCT 职称 FROM 基本情况表 其中“基本情况表”是数据库中的一个表名,而“职称”为该表中的一个字段名。
1.查询(SELECT) (2) 项目名称表可以由多个项目用逗号分隔,每个项目可以是字段名或表达式,字段名前可以指出字段所属的表名。 例如:为了得到基本情况表中的所有记录,形式如下: SELECT * FROM 基本情况表 例如:为了得到学习情况表中的学号和总分数据: SELECT 学号,数学+语文+学习情况表.英语AS 总分 FROM 学习情况表
1.查询(SELECT) 作为结果记录集的字段名 当选择内容是一个表达式时,后面用AS引导一个名称,作为结果记录集的字段名。 例如:为了从学习成绩表中得到全部同学的数学平均分,可使用如下形式: SELECT AVG(数学) AS 平均分 FROM 学习情况表 其中:AVG是SQL中可以使用的集合函数
1.查询(SELECT) 项目名称表中常用的集合函数还有COUNT(求记录条数)、SUM(求和)、MAX(求最大值)和MIN(求最小值)等。 当需要表示选择全部字段时,用“*”表示。
1.查询(SELECT) (3) WHERE后的条件可以是简单的关系式,如: 职称=‘工程师’ 也可以是由“AND”、“OR”和“NOT”连接起来的几个关系式,如: SELECT 书名 FROM 书目表 WHERE 类型=‘文学’AND 价格>25
1.查询(SELECT) (4) GROUP BY项可根据某一表达式的值将记录分组,而HAVING可确定某一组是否满足条件。 例如:为了从选修课程学生名单表中得到选修人数大于40的课程号和人数,可使用如下形式的查询: SELECT 课程号,COUNT(课程号)AS 人数 FROM 名单 GROUP BY 课程号 HAVING COUNT(课程号)>=40
1.查询(SELECT) (5) ORDER BY项用于将结果记录按某一字段值进行排序输出,ASC选项表示升序,DESC表示降序。 例如:为了将学习成绩表按数学成绩从高到低输出,可使用如下形式查询: SELECT * FROM 学习成绩表 ORDER BY 数学 DESC
1.查询(SELECT) (6) 除了以上基本格式外,还可以在SELECT 后面直接跟“TOP n [PERCENT]”来指出只返回特定数目的记录,或前面一定百分比的记录。 例如:要从学生基本情况表中返回2000年入学的前25名学生的姓名,可使用如下形式: SELECT 姓名 TOP 25 FROM 基本情况表 WHERE 入学年份 = 1994
2.插入(INSERT) • Insert语句用于向表中添加一个或多个记录。可以将一组值作为一个记录追加到表中,形式为: INSERT INTO 表名 [(字段名表)] VALUES (值的列表) • 其中: 如果“值的列表”中包含了所有字段的值,则格式中字段名表可以省略。 “字段名表”和“值的列表”中各数据的类型必须保持一致,个数也要保持一致。
2.插入(INSERT) • 例如:在只包含姓名和年龄的学生表中插入一个姓名为“张三”,年龄为23的记录的形式如下: INSERT INTO 学生表VALUES(‘张三’,23) • 其中字符型常量“张三”用单引号括起来,数值型常量23不用定界符。如果学生表中还有其它字段,则上述语句执行时会产生错误。
2.插入(INSERT) • 可以将查询的结果插入到一个表中,形式如下: INSERT INTO 目标表 [(字段名表)] SELECT 子句部分
3.删除(DELETE) • Delete语句可从表中删除满足一定条件的一个记录或一组记录。使用形式如下: DELETE FROM 表名WHERE 条件 • 其中,表名指出需要删除一个或多个记录的数据表名称。该命令一次可能删除多个记录。
3.删除(DELETE) • 例如:由于老职工的退休,需要从工资表中删除年龄大于60岁的全部人员,可以使用如下形式的SQL语句: DELETE FROM 工资表WHERE 年龄>=60
3.删除(DELETE) • 注意: 当删除记录之后,不能取消此操作。如果想要知道哪些记录将被删除,可以首先使用相同条件的查询观察结果,然后运行删除操作。 随时将数据做备份副本。如果误删除记录,可以从备份副本中将数据恢复。
4.修改(UPDATE ) • Update命令可以更改指定表中,满足指定条件的一个或多个记录的某些字段的值。使用形式如下: UPDATE 表名 SET 字段=值[,字段=值,…] WHERE 条件 • 其中,表名指出要更改的数据表名,SET子句后的“字段=值”表示将某个值赋给对应的字段。WHERE后的条件用来指出被更新的记录应符合的条件。
4.修改(UPDATE ) • 例如需要为联合王国的一家公司增加10%的订货量和3%的货运,对应的SQL语句如下: UPDATE 订货表 SET 订货量 = 订货量 * 1.1,货运 = 货运 * 1.03 WHERE 公司名称 = 'UK' • 注意: UPDATE 不生成结果记录集。而且当使用更新操作更新记录之后,不能取消这次操作。如果想知道哪些记录将被更新,只能事先用相同条件的查询操作来观察。
4.修改(UPDATE ) • 注意: • 随时注意维护数据的复制备份。如果更新错了记录,可从备份副本中恢复这些数据。
5.建立数据表和删除数据表 • 可以使用CREATE命令来创建一个新的表格,其使用形式为: CREATE TABLE 表名(字段名数据类型[NOT NULL][,字段名数据类型[NOT NULL],…]) • 例如: CREATE TABLE 学生 (学号 INTEGER,姓名 CHAR(8),性别 CHAR(2))