数据库基础知识_第1页
数据库基础知识_第2页
数据库基础知识_第3页
数据库基础知识_第4页
数据库基础知识_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

数据库基础知识数据库基础知识 赵清整理 2007 09 28 1 1 语言简介语言简介 SQL 语言是关系数据库管理系统中的一种通用的结构查询语言 目前流行的数据库管 理系统大都支持 SQL 语言 在使用网站搭建者开发数据库应用程序时 可以使用 SQL 语 言进行编程 支持 SQL 语言是网站搭建者的一个重要特征 这也体现了网站搭建者作为强 大的数据库应用开发工具的一个重要标志 2 2 常用常用 SQL 命令列表命令列表 Select 命令命令 Select 语句主要用于从数据库的数据表中 查询数据 它也是 SQL 语言中 使用频率最 高的语句 最简单的格式 Select from 在部分中 可以是数据表中的一个或多个字段 用逗号分开 使用 号 则说明查询全部字段 第一个选项子句为 Where 用于指定查询的数据范围 例 Select from 客户信息 Where 性别 男 该命令实现从 客户信息 表 查询中所有男性 第二个选项子句为 Order by 用于按某一字段对查询出的记录进行排序 缺省是增 序 例 Select from 客户信息 Where 性别 男 Order by 出生日期 实现从 客户信息 表 查询中所有男性 并按出生日期按升序排序 Insert 命令命令 Insert 命令主要用于向数据库中输入数据 它可以分解为两个语句 Insert Values 和 Insert Select Insert Values 输入一条记录 命令格式为 Insert Into 字段 1 字段 2 Values 赋值 1 赋值 2 注意 注意 1 使用的数据类型与被加入字段的数据类型相同 2 数据的大小应在列的规定范围内 例中 不能将一个长度为 50 的字符串加到限长 度为 40 个字符的字段中 3 在 Values 中列出的位置必须与被加入的字段的排列位置相对应 即第一个值 进 入字段 1 第二个值进行字段 2 Insert Select 输入多条记录 命令格式为 Insert Into 字段 1 字段 2 Select 字段 1 字段 2 From Where 查询条件 例 Insert into 临时 客户信息 Select From 客户信息 该命令实现将 客户信息 所有数据复制到 临时 客户信息 中 Update 命令命令 Update 命令用于修改现有数据 命令格式为 Update 表名称 Set 字段 1 赋值 1 字段 2 赋值 2 Where 查询条件 例 Update 客户信息 Set 姓名 王斌 Where 出生日期 1986 01 01 该命令先检查 Where 子句 更新表中 Where 子句为真的所有记录 Delete 命令命令 Delete 命令用于删除记录 命令格式 Delete From 表名称 Where 条件 通过使用 Delete 语句的 Where 子句 可以执行删除一行 删除多行 删除所有行等操 作 Create Table 命令命令 Create Table 命令用于创建一个数据表 命令格式 Create Table 表名称 字段 1 数据类型 字段 2 数据类型 例 Create Table 客户信息 姓名 文本型 10 出生日期 日期型 年龄 整数型 3 SQL 语言编辑器语言编辑器 在什么地方书写 SQL 命令呢 这可能是读者您希望使用 SQL 语言前面临的第一个问 题 实际上很简单 您可以在支持 文本文件 格式的任意一款软件中完成 SQL 命令的编 写 记事本 写字板 办公软件 然后 将文件读取到网站搭建者的 SQL 编辑器中就可 以了 当然 您也可以在 SQL 编辑器中直接书写 在网站搭建者中有多个位置都提供了 SQL 编辑器 常用的如 ADO 查询 ADO 命令 客户端数据集 等构件 下面我们以 ADO 查询 构件为例 双击其属性的 SQL 命令 栏 弹出 SQL 编辑 器 如图 19 1 所示 图 19 1 通过 读文件 按钮 可把编辑好的 SQL 命令文件读到 SQL 编辑器 通过 写文件 按钮 把在 SQL 编辑器编好的命令行另存为文本文件 4 4 关于 关于 ADO ADO 简介简介 ADO ActiveX Data Object 是 Microsoft 数据库应用程序开发的新接口 是建立在 OLE DB 之上的高层数据库访问技术 请不必为此担心 即使你对 OLE DB COM 不了解也能轻松对付 ADO 因为它非常简单易用 甚至比你以往所接触的 ODBC API DAO RDO 都要容易使 用 并不失灵活性 本文将详细地介绍在 VC 下如何使用 ADO 来进行数据库应用程序开发 并给出示例代码 本文示例代码 基本流程基本流程 万事开头难 任何一种新技术对于初学者来说最重要的还是 入门 掌握其要点 让我们来看看 ADO 数据库开发的基本流程吧 1 初始化 COM 库 引入 ADO 库定义文件 2 用 Connection 对象连接数据库 3 利用建立好的连接 通过 Connection Command 对象执行 SQL 命令 或利用 Recordset 对象取得结果记录集进行查询 处理 4 使用完毕后关闭连接释放对象 准备工作 为了大家都能测试本文提供的例子 我们采用 Access 数据库 您也可以直接在我们提供的示例代码中找到这个 test mdb 下面我们将详细介绍上述步骤并给出相关代码 1 COM 库的初始化 我们可以使用 AfxOleInit 来初始化 COM 库 这项工作通常在 CWinApp InitInstance 的重载函数中完成 请看如下代码 1 BOOL CADOTest1App InitInstance 2 3 AfxOleInit 4 BOOL CADOTest1App InitInstance AfxOleInit 2 用 import 指令引入 ADO 类型库 我们在 stdafx h 中加入如下语句 stdafx h 这个文件哪里可以找到 你可以在 FileView 中的 Header Files 里找到 import c program files common files system ado msado15 dll no namespace rename EOF adoEOF 这一语句有何作用呢 其最终作用同我们熟悉的 include 类似 编译的时候系统会为我们生成 msado15 tlh ado15 tli 两个 C 头文件 来定义 ADO 库 几点说明 1 您的环境中 msado15 dll 不一定在这个目录下 请按实际情况修改 2 在编译的时候肯能会出现如下警告 对此微软在 MSDN 中作了说明 并建议我们不要理会这个警告 msado15 tlh 405 warning C4146 unary minus operator applied to unsigned type result still unsigned 3 创建 Connection 对象并连接数据库 首先我们需要添加一个指向 Connection 对象的指针 ConnectionPtr m pConnection 下面的代码演示了如何创建 Connection 对象实例及如何连接数据库并进行异常捕捉 view plaincopy to clipboardprint 1 BOOL CADOTest1Dlg OnInitDialog 2 3 CDialog OnInitDialog 4 HRESULT hr 5 try 6 7 hr m pConnection CreateInstance ADODB Connection 创建 Connection 对象 8 if SUCCEEDED hr 9 10 hr m pConnection Open Provider Microsoft Jet OLEDB 4 0 11 Data Source test mdb adModeUnknown 连接数据库 12 上面一句中连接字串中的 Provider 是针对 ACCESS2000 环境的 对于 ACCESS97 需要改为 Provider Microsoft Jet OLEDB 3 51 13 14 catch com error e 捕捉异常 15 16 CString errormessage 17 errormessage Format 连接数据库失败 r n 错误信息 s e ErrorMessage 18 AfxMessageBox errormessage 显示错误信息 19 BOOL CADOTest1Dlg OnInitDialog CDialog OnInitDialog HRESULT hr try hr m pConnection CreateInstance ADODB Connection 创建Connection对象 if SUCCEEDED hr hr m pConnection Open Provider Microsoft Jet OLEDB 4 0 Data Source test mdb adModeUnknown 连接数据库 上面一句中连接字串中的Provider是针对ACCESS2000环境的 对于ACCESS97 需要改为 Provider Microsoft Jet OL catch com error e 捕捉异常 CString errormessage errormessage Format 连接数据库失败 r n错误信息 s e ErrorMessage AfxMessageBox errormessage 显示错误信息 在这段代码中我们是通过 Connection 对象的 Open 方法来进行连接数据库的 下面是该方法的原型 HRESULT Connection15 Open bstr t ConnectionString bstr t UserID bstr t Password long Options ConnectionString 为连接字串 UserID 是用户名 Password 是登陆密码 Options 是连接选项 用于指定 Connection 对象对数据的更新许 可权 Options 可以是如下几个常量 adModeUnknown 缺省 当前的许可权未设置 adModeRead 只读 adModeWrite 只写 adModeReadWrite 可以读写 adModeShareDenyRead 阻止其它 Connection 对象以读权限打开连接 adModeShareDenyWrite 阻止其它 Connection 对象以写权限打开连接 adModeShareExclusive 阻止其它 Connection 对象打开连接 adModeShareDenyNone 允许其它程序或对象以任何权限建立连接 我们给出一些常用的连接方式供大家参考 1 通过 JET 数据库引擎对 ACCESS2000 数据库的连接 view plaincopy to clipboardprint 1 m pConnection Open Provider Microsoft Jet OLEDB 4 0 2 Data Source C test mdb 3 4 5 adModeUnknown m pConnection Open Provider Microsoft Jet OLEDB 4 0 Data Source C test mdb adModeUnknown 2 通过 DSN 数据源对任何支持 ODBC 的数据库进行连接 view plaincopy to clipboardprint 1 m pConnection Open Data Source adotest 2 UID sa 3 PWD 4 5 6 adModeUnknown m pConnection Open Data Source adotest UID sa PWD adModeUnknown 3 不通过 DSN 对 SQL SERVER 数据库进行连接 view plaincopy to clipboardprint 1 2 m pConnection Open driver SQL Server 3 Server 127 0 0 1 4 DATABASE vckbase 5 UID sa 6 PWD 139 7 8 9 adModeUnknown m pConnection Open driver SQL Server Server 127 0 0 1 DATABASE vckbase UID sa PWD 139 adModeUnknown 其中 Server 是 SQL 服务器的名称 DATABASE 是库的名称 Connection 对象除 Open 方法外还有许多方法 我们先介绍 Connection 对象中两个有用的属性 ConnectionTimeOut 与 State ConnectionTimeOut 用来设置连接的超时时间 需要在 Open 之前调用 例如 m pConnection ConnectionTimeout 5 设置超时时 间为 5 秒 m pConnection Open Data Source adotest adModeUnknown State 属性指明当前 Connection 对象的状态 0 表示关闭 1 表示已经打开 我们可以通过读取这个属性来作相应的处理 例如 if m pConnection State m pConnection Close 如果已经打开了连接则关闭它 4 执行 SQL 命令并取得结果记录集 为了取得结果记录集 我们定义一个指向 Recordset 对象的指针 RecordsetPtr m pRecordset 并为其创建 Recordset 对象的实例 m pRecordset CreateInstance ADODB Recordset SQL 命令的执行可以采用多种形式 下面我们一进行阐述 1 利用 Connection 对象的 Execute 方法执行 SQL 命令 Execute 方法的原型如下所示 RecordsetPtr Connection15 Execute bstr t CommandText VARIANT RecordsAffected long Options 其中 CommandText 是命 令字串 通常是 SQL 命令 参数 RecordsAffected 是操作完成后所影响的行数 参数 Options 表示 CommandText 中内容的类型 Options 可以取如下值之一 adCmdText 表明 CommandText 是文本命令 adCmdTable 表明 CommandText 是一个表名 adCmdProc 表明 CommandText 是一个存储过程 adCmdUnknown 未知 Execute 执行完后返回一个指向记录集的指针 下面我们给出具体代码并作说明 variant t RecordsAffected 执行 SQL 命令 CREATE TABLE 创建表格 users users 包含四个字段 整形 ID 字符串 username 整形 old 日期型 birthday m pConnection Execute CREATE TABLE users ID INTEGER username TEXT old INTEGER birthday DATETIME 往表格里面添加记录 m pConnection Execute INSERT INTO users ID username old birthday valueS 1 Washington 25 1970 1 1 将所有记录 old 字段的值加一 m pConnection Execute UPDATE users SET old old 1 执行 SQL 统计命令得到包含记录条数的记录集 m pRecordset m pConnection Execute SELECT COUNT FROM users variant t vIndex long 0 variant t vCount m pRecordset GetCollect vIndex 取得第一个字段的值放入 vCount 变量 m pRecordset Close 关闭记录集 CString message message Format 共有 d 条记录 vCount lVal AfxMessageBox message 显示当前记录条数 2 利用 Command 对象来执行 SQL 命令 view plaincopy to clipboardprint 1 CommandPtr m pCommand 2 m pCommand CreateInstance ADODB Command 3 variant t vNULL 4 vNULL vt VT ERROR 5 vNULL scode DISP E PARAMNOTFOUND 定义为无参数 6 m pCommand ActiveConnection m pConnection 非常关键的一句 将建立的连接赋值给它 7 m pCommand CommandText SELECT FROM users 命令字串 8 m pRecordset m pCommand Execute 执行命令 取得记录集 CommandPtr m pCommand m pCommand CreateInstance ADODB Command variant t vNULL vNULL vt VT ERROR vNULL scode DISP E PARAMNOTFOUND 定义为无参数 m pCommand ActiveConnection m pConnection 非常关键的一句 将建立的连接赋值给它 m pCommand CommandText SELECT FROM users 命令字串 m pRecordset m pCommand Execute 执行命令 取得记录集 在这段代码中我们只是用 Command 对象来执行了 SELECT 查询语句 Command 对象在进行存储过程的调用中能真正体现它的作用 下次我们将详细介绍 3 直接用 Recordset 对象进行查询取得记录集 例如 m pRecordset Open SELECT FROM users variant t IDispatch m pConnection true adOpenStatic adLockOptimistic adCmdText Open 方法的原型是这样的 HRESULT Recordset15 Open const variant t enum CursorTypeEnum adOpenUnspecified 1 不作特别指定 adOpenForwardOnly 0 前滚静态光标 这种光标只能向前浏览记录集 比如用MoveNext向前滚动 这种方式可以提高 adOpenKeyset 1 采用这种光标的记录集看不到其它用户的新增 删除操作 但对于更新原有记录的操作对你是可见的 adOpenDynamic 2 动态光标 所有数据库的操作都会立即在各用户记录集上反应出来 adOpenStatic 3 静态光标 它为你的记录集产生一个静态备份 但其它用户的新增 删除 更新操作对你的记录集来 LockType 锁定类型 它可以是以下值之一 请看如下枚举结构 view plaincopy to clipboardprint 1 enum LockTypeEnum 2 3 adLockUnspecified 1 未指定 4 adLockReadOnly 1 只读记录集 5 adLockPessimistic 2 悲观锁定方式 数据在更新时锁定其它所有动作 这是最安全的锁定机制 6 adLockOptimistic 3 乐观锁定方式 只有在你调用 Update 方法时才锁定记录 在此之前仍然可以做数据的更新 插入 删除等动作 7 adLockBatchOptimistic 4 乐观分批更新 编辑时记录不会锁定 更改 插入及删除是在批处理模式下完成 8 enum LockTypeEnum adLockUnspecified 1 未指定 adLockReadOnly 1 只读记录集 adLockPessimistic 2 悲观锁定方式 数据在更新时锁定其它所有动作 这是最安全的锁定机制 adLockOptimistic 3 乐观锁定方式 只有在你调用Update方法时才锁定记录 在此之前仍然可以做数据的更新 插入 adLockBatchOptimistic 4 乐观分批更新 编辑时记录不会锁定 更改 插入及删除是在批处理模式下完成 Options 请参考本文中对 Connection 对象的 Execute 方法的介绍 5 记录集的遍历 更新 根据我们刚才通过执行 SQL 命令建立好的 users 表 它包含四个字段 ID username old birthday 以下的代码实现 打开记录集 遍历所有记录 删除第一条记录 添加三条记录 移动光标到第二条记录 更改其年龄 保存到数据库 view plaincopy to clipboardprint 1 variant t vUsername vBirthday vID vOld 2 RecordsetPtr m pRecordset 3 m pRecordset CreateInstance ADODB Recordset 4 m pRecordset Open SELECT FROM users variant t IDispatch m pConnection true adOpenStatic adLock Optimistic adCmdText 5 while m pRecordset adoEOF 这里为什么是 adoEOF 而不是 EOF 呢 还记得 rename EOF adoEOF 这一 句吗 6 7 vID m pRecordset GetCollect variant t long 0 取得第 1 列的值 从 0 开始计数 你也可以直接 给出列的名称 如下一行 8 vUsername m pRecordset GetCollect username 取得 username 字段的值 9 vOld m pRecordset GetCollect old 10 vBirthday m pRecordset GetCollect birthday 11 在 DEBUG 方式下的 OUTPUT 窗口输出记录集中的记录 12 if vID vt VT NULL 14 m pRecordset MoveNext 移到下一条记录 15 16 m pRecordset MoveFirst 移到首条记录 17 m pRecordset Delete adAffectCurrent 删除当前记录 18 添加三条新记录并赋值 19 for int i 0 iAddNew 添加新记录 22 m pRecordset PutCollect ID variant t long i 10 23 m pRecordset PutCollect username variant t 叶利钦

温馨提示

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

评论

0/150

提交评论