430 likes | 615 Views
第五课 使用数据库和 SQL 查询语言. 重庆信息工程学院 曹小平 2004 年 2 月. 数据库的概念 (1). ODBC ( Open DataBase Connectivity ) 能够存取不同厂商所提供的服务器数据库。 存取数据库的对象群: DAO 、 RDO 、 ADO DAO ( Data Access Object ,数据访问对象) RDO ( Remote Data Objects ,远程数据访问对象) ADO ( ActiveX DAO ). 数据库的概念 (2). SQL ( Structured Query Language )
E N D
第五课 使用数据库和SQL查询语言 重庆信息工程学院 曹小平 2004年2月
数据库的概念(1) • ODBC(Open DataBase Connectivity) • 能够存取不同厂商所提供的服务器数据库。 • 存取数据库的对象群:DAO、RDO、ADO • DAO(Data Access Object,数据访问对象) • RDO(Remote Data Objects,远程数据访问对象) • ADO(ActiveX DAO)
数据库的概念(2) • SQL(Structured Query Language) • 结构化查询语言——SQL • DDL(Data Definition Language):建立数据表及数据列的指令群 • DML(Data Manipulation Language):操作数据库记录的指令群,如数据库记录的添加、更新、删除、查询
浏览器 Web服务器 在浏览器上执行 的程序 访问数据库是很辛苦的事情 数据库 浏览器 访问数据库很简单,但要把程序执行结果下载给浏览器 数据库 程序 访问数据库辛苦吗?
要求下载文件 使用ADO对象的.asp 文件 Web服务器(IIS/PWS) 浏览器 HTTP通信协议 文件下载 ODBC 驱动程序 数据库 抽丝剥茧告诉你
ADO(ActiveX DAO) • Connection:负责打开或连接数据库文件 • Recordset:存取数据库的内容 • Command:对数据库下达行动查询指令,以及执行SQL Server的存储过程。
5-1 数据库应用系统简易开发流程 • 系统功能设计 • 设计并建立数据库 • 界面设计 • 代码设计
5-2 存取数据库准备工作 • 5.2.1 数据库的初步体验 • 5.2.2 了解Access数据库的相关知识 • 5.2.3 安装新版的ODBC及OLEDB驱动程序 • 5.2.4 如何设计数据库
5.2.1 数据库的初步体验 • 演示下列实例显示WEB和数据库结合的强大的魅力: • 留言板 • 信工论坛 • 新闻发布系统 • 校友查询系统 • 数据库观念:网络就是数据库 • 连接:OLEDB驱动程序及ODBC驱动程序。
网络就是数据库 • 随着INTERNET 和WEB技术的迅猛发展,WEB正在成为全球性自主式计算环境,……如何使数据库系统和技术成为WEB的有机组成部分,使数据库全面面向网络,是数据库领域面临的一个新挑战。目前,有人提出“网络就是数据库”的概念。
网络 & 数据库 • 静态的WEB站点由于缺少交互性,使得WEB管理员不得不频繁修改他们的网页,因此其开发与维护变得越来越困难。WEB站点如何简单地实现向网络用户提供大量有用的、动态的和可交互的信息呢?这就是将信息数据库化!因为数据库形式的数据远比其他形式的数据更容易更新和管理。
5.2.2 Access数据库 • Access简介 • 利用数据库向导创建数据库 • 存储数据的仓库——表 • 数据的分析——查询
应用程序 应用程序 应用程序 ASP ASP ADO对象 浏览器 Session 对象 浏览器 Application 对象 Dbase 驱动程序 Access 驱动程序 Session 对象 SQL Server 驱动程序 Oracle 驱动程序 浏览器 浏览器 Session 对象 浏览器 浏览器 Dbase 数据库 Access 数据库 SQL Server 数据库 Oracle 数据库 5.2.3 安装ODBC及OLEDB
ASP ASP 浏览器 Session 对象 浏览器 Application 对象 Session 对象 浏览器 浏览器 Session 对象 浏览器 浏览器 5.2.4 如何设计数据库
5-3 Recordset读取数据 • Recordset是最为重要的对象;表的组织结构:表头和表内容;数据字段的集合构成数据记录,数据记录的集合构成数据表
5.3.1如何连接和使用数据库 连接和使用数据库时,一般按以下几步进行: • 创建连接对象 • 指定连接字符串 • ODBC数据库连接 • OLE DB数据库连接 • 打开数据库连接 • 使用数据库 • 创建记录集对象 • 通过connection对象的Excute方法创建 • 通过recordset对象的open方法创建 • 使用记录集的addnew、del、update等方法存取数据库记录 • 用recordset(“字段”)方法存取数据库的字段 • 关闭记录集并释放资源 • 关闭数据库并释放占用的资源
5.3.2 读取数据的基本语句 • Rs(I).Name:读取第I栏的字段表头 • Rs(I):读取当前数据记录的第I栏的数据 • Rs.Fields.Count:读取字段的数目
5.3.3 改变当前数据记录 • MoveNext方法:将当前记录移到下一项 • MovePrevious方法:将当前记录移到上一项 • MoveFirst方法:将当前记录移到第一项 • MoveLast方法:将当前记录移到最后一项 • BOF属性:若为true,表示当前数据记录指针超过了第一项数据记录 • EOF属性:若为true,表示当前数据记录指针超过了最后一项数据记录
5.3.4 用字段名称读取数据 • 利用rs(“字段名称”)的格式来读取数据。 如:<%=rs(“留言内容”)%>
5-4 定位式的数据读取 • 是否有方法可以让我们直接读取某一项数据记录呢? • Rs.AbsolutePosition=N • AbsolutePosition。用来设置或读取当前记录在记录集中的位置顺序号
5.4.1 定位功能 • 数据库不会把数据表中的所有记录一次加载到系统,只是加载最前面的若干数据记录指针,直到程序继续存取后面的数据记录时,后面的数据记录才被加载于内存中,这么做的优点是节省内存和打开数据表所花费的时间。
5.4.2 分页浏览 • 一旦设置了rs.PageSize属性,Recordset对象会根据数据记录总项数设置好PageCount属性(总页数)。AbsolutePage属性的设置,将当前数据记录移到某一页的第一项。 • 注意:不要忽略了“If rs.eof then exit for”语句。主要是考虑最后一页可能不满所设项数,利用if rs.eof来判断是否移过了整个数据记录的最尾端。
5-5 增添/删除/修改记录 • 5.5.1 删除数据记录 • 5.5.2 修改数据记录 • 5.5.3 增添数据记录
5.5.1 删除数据记录 • Rs.Delete • Rs.update • 首先将准备删除的数据记录设置成当前数据记录,然后调用rs.delete方法和rs.update方法。
5.5.2 修改数据记录 • rs(“字段名称”)=新的字段值 • Rs.update
rs(“字段名称”)=新字段值 1.真正写入数据库: • 程序调用Recordset对象的update方法; • 当前数据记录的位置变了 2.取消更新的数据: • CancelUpdate方法
一段式数据更新方法 • 先将欲更新的“字段名称”及“字段值”分别指定数组变量。然后调用一下语句格式:rs.Update 字段名称数组,字段值数组 • FieldNames=Array(“留言者”,”主题”,”内容”) • FieldValues=Array(“测试者”,”主题”,”内容”) • Rs.update FieldNames,FieldValues
5.5.3 增添数据记录 rs.AddNew rs(“留言者”) = “测试者” rs(“留言主题”) = “测试主题” rs(“留言内容”) = “测试内容” rs.Update 直接将想要增添的数据写入数据库 AddNew 字段名称数组,字段值数组
5-6 Select指令 • SELECT 目标表 //投影出欲查询的属性 • FROM 基本表或视图 //从给定的关系中 • [WHERE 条件表达式] //选择 • [GROUP BY 字段名] //将结果进行分组,显示汇总结果 • [HAVING 内部函数条件式] //只有满足内部函数条件式的组才输出 • [ORDER BY 字段名[ASC|DESC] //结果按升或降序排列 • [COMPUTER 内部函数名 字段名[,BY 字段名[,字段名]…...]]
5.6.1 Select 字段列表 From 数据表 字段列表的规则: • 凡是数据表里的字段都可以成为“字段列表”的一员 • 字段的顺序可以自定义,不必与数据表里的字段顺序相同 • 字段名称若含有空格符时,需用中括号[ ]括起来。 “字段列表”的变化式: • 字段名1 As 别名1, 字段名2 As 别名2, …
5.6.2 Select … From … Where 条件 • 怎样挑出“数学”成绩不及格的同学? Select * From 成绩单 Where 数学<60 • 怎样实现查询指定留言者? Select 留言者 From guest where 留言者=“测试者”
5.6.3Select…From…Order By 字段 • Select * From guest order by 编号 Desc • 按“编号” 字段排序。Desc表示从大到小排列;Asc表示从小到大排列,默认是从小到大。 • 注意:“Order By 字段名称”中的字段不可以是字段名称的别名。
5.6.4 Select Top选取记录项数 • Where条件式可以筛选数据,Select Top也可以限定选取数据记录的项数,减少网络流量。 • Select top 10 * From guest order by 编号 Desc
5.6.5 “Where 条件式”变化式 • 字符串数据:字符串数据可以放在双引号””也可以放在单引号’’里 • 通配字符:Select * From guest where 留言者 like ‘%试%’ • 其他特殊的条件式:数学运算符(=、>、<、<>、<=、>=),逻辑运算符(And、Or、Not)
几个特殊句型 • where 字段名称 Between 值一 and 值二 • where 字段名称 In(值一,值二,…) • where 字段名称 Is Null/ where 字段名称 Is Not Null • VB函数的使用:Select * From guest where mid(留言者,2,1)=’试’ • 在程序中组合条件式:SQL=”Select * From guest where 留言者=” & V
5-7 整理一下(1) 1. 想要以某一种数据库做为Web数据库,则安装IIS/PWS的机器上也必须同时安装有该数据库的ODBC驱动程序。 2. 想确定某一咱ODBC驱动程序的正确名称,可启动控制面板的ODBC,然后按下"ODBC驱动程序"选项卡查看所有安装于系统中的ODBC驱动程序。 3. 数据表的组织结构:数据字段的集合构成数据记录,数据记录的集合构成数据表。
5-7 整理一下(2) 4. Recordset对象的组织结构:Field对象的集合构成Fields集合对象,Filds集合对象的集合构成Recordset对象。 5. 存取数据记录第I个抬头的语句是rs.Fields(i).Name。 6. 存取目前数据记录第I个字段的语句是rs.Fields(i).Value,但通常简写成rs(i)。 7. 存取当前数据记录某一字段的语句是rs("字段名称")。
5-7 整理一下(3) 8. select是SQL最重要的指令,也是开发数据库的最重要的基础。 9. Select指令的Where子句可用来筛选记录,而Order By 子句,则Where子句必须放在Order By子句的前面。 10. 当数据据记录很多时,最好使用程序让上网者分段(分页)浏览网页。
5-7 整理一下(4) • 12. 利用conn.Execute所建立的Recordset对象其目前数据记录只能向下移动,并不适用于分页浏览的网页,为了达到分页浏览的目的,应使用以下方法建立Recordset对象: • Set rs=Server.Creareobject("ADODB.Recordset") • Rs.Open数据表名称或select语句,conn,adopenStatic
5-7 整理一下(5) 13. SQL的字符串写在单引号(‘)里面比写在双引号(“)里面好。当我们读取某一字符串变量并且把它组合SQL指令时,记住先交将字符串变量的单引号取代成两个单引号。 14. ADD SQL的通配符是'%'及'-'(底线),与VB/Access SQL所使用的'*'及'?'并不相同。
5-7 整理一下(6) • 15. 在Where条件语句中运用VB Script的日期时间函数,可让我们筛选变动日期时间的数据记录,而不只是某一固定日期时间的数据记录 • 16. 数据操作的SQL命令语法: • 删除:Delete From数据表Were条件式 • 更新:Update数据表Set指定算式串Where条件式 • 增加:Insert Into数据表(字段串)Values(字段值串)
5.7.2 作业练习 1. 建立一个留言板数据库,其中包括guest表和admin表,练习显示留言的基本信息 2. 筛选留言记录,根据留言时间练习排序 3. 练习将留言分页显示 4. 开发留言板,注意留言的添加、修改、删除、查询等功能
第五课 使用数据库及SQL语言学习到此为止,谢谢大家的合作