数据库及应用程序开发.ppt_第1页
数据库及应用程序开发.ppt_第2页
数据库及应用程序开发.ppt_第3页
数据库及应用程序开发.ppt_第4页
数据库及应用程序开发.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1 第4章数据库及应用程序开发 数据库编程 西安交通大学计算机教学实验中心 软件开发技术基础 2 4 3数据库编程 4 3 1数据库连接技术1 ODBC微软公司ODBC OpenDatabaseConnectivity 开放数据库互连 建立了一组规范 并提供了一组对数据库访问的标准API 应用程序编程接口 基于ODBC的应用程序对数据库的操作不依赖任何DBMS 由对应的DBMS的ODBC驱动程序完成 能以统一的方式处理所有的数据库 3 2 ADO和OLEDB Microsoft推出的一致数据访问技术 为关系型或非关系型数据访问提供了一致的访问接口 ADO提供了高层软件接口 不仅可在高级语言开发环境中使用 还可以在一些脚本语言中使用 这对于WEB程序访问数据库提供了捷径 OLEDB提供了底层软件接口 4 3 JDBC Java数据库连接JDBC JavaDatabaseConnectivity 由一组用Java编程语言编写的类和接口组成 JDBC为数据库开发人员提供了一个标准的API 程序可在任何平台上运行 5 4 3 2利用VC开发应用系统 1 MFCODBC类简介 1 Cdatabase 建立与数据源的连接virtualBOOLOpen LPCTSTRlpszDSN BOOLbExclusive FALSE BOOLbReadOnly FALSE LPCTSTRlpszConnect ODBC BOOLbUseCursorLib TRUE throw CDBException CMemoryException lpszDSN指定了数据源名 bExclusive说明是否独占数据源 bReadOnly若为TRUE则对数据源的连接是只读的 lpszConnect指定了一个连接字符串 连接字符串中可以包括数据源名 用户帐号 ID 和口令等信息 字符串中的 ODBC 表示要连接到一个ODBC数据源上 bUseCursorLib若为TRUE 则会装载光标库 否则不装载若连接成功 函数返回TRUE 若返回FALSE 若函数内部出现错误 则会产生一个异常 6 连接数据库语句实例 CDatabasem db m db Open MyDS m db Open NULL FALSE FALSE ODBC DSN MyDS UID ABC PWD 1234 m db Open NULL 将弹出一个数据源对话框boolIsOpen const 返回TRUE则表明当前有一个连接virtualvoidClose 7 2 CRecordset类 从数据源选择的一组记录 记录集 CRecordset CDatabase pDatabase NULL virtualCStringGetDefaultConnect 该函数返回缺省的连接字符串 8 virtualBOOLOpen UINTnOpenType AFX DB USE DEFAULT TYPE LPCTSTRlpszSQL NULL DWORDdwOptions none throw CDBException CMemoryException 该函数使用指定的SQL语句查询数据源中的记录并按指定的类型和选项建立记录集 nOpenType说明了记录集的类型 打开记录集的方式 Snapshot 快照 Dynaset 动态集 forwordOnly 9 lpszSQL是一个SQL的SELECT语句 或是一个表名dwOptions可以是一些选项的组合CRecordset none无选项 缺省 CRecordset appendOnly 不允许修改和删除记录 但可以添加记录 CRecordset readOnly 记录集是只读的 CRecordset skipDeletedRecords 有些数据库 如FoxPro 在删除记录时并不真删除 而是做个删除标记 在滚动时将跳过这些被删除的记录 10 调用CRecordset的滚动函数 如MoveFirst MoveNext ovePrev MoveLast等 来改变 当前 记录的位置 IsBOF IsEOF用于判别是否移动到记录集的头或尾 11 3 CRecordView 该类提供了一个表单视图与某个记录集直接相连 在记录集与表单视图的控件之间传输数据 12 4 CDBException 该类代表ODBC类产生的异常 对于数据库操作错误 出现CDBException类型的异常 其它类型的错误 出现CMemoryException异常 13 2 执行SQL语句 可以使用CDatabase类的ExecuteSQL函数直接执行SQL语句 ExecuteSQL能 查询记录 创建新表 删除表 创建索引 修改记录 删除记录和插入记录ExecuteSQL的声明如下 voidExecuteSQL LPCTSTRlpszSQL 其中 lpszSQL表示要执行的SQL语句 14 3数据库操作的基本过程 1 连接数据库建立CDataBase类对象 通过CDataBase类的Open函数连接数据库 2 执行SQL语句对于要返回结果集的查询操作 可以通过CRecordSet类的Open函数实现 对于不返回结果集的其它SQL语句可以通过CdataBase类的ExecuteSQL函数实现 3 断开与数据库的连接通过CDataBase类的Close函数断开与数据库的连接 15 3 3编程实例 例4 49 连接SQLServer2000数据库company 假定对SQLServer2000数据库company已经建立了数据源CompanyDS 编程连接该数据库 如果连接成功 显示 连接成功 否则显示 连接失败 include stdafx h include include ifdef DEBUG definenewDEBUG NEW undefTHIS FILEstaticcharTHIS FILE FILE endif CDatabasedatabase CWinApptheApp usingnamespacestd int tmain intargc TCHAR argv TCHAR envp intnRetCode 0 初始化MFC并进行判断if AfxWinInit GetModuleHandle NULL NULL GetCommandLine 0 TODO changeerrorcodetosuityourneedscerr T FatalError MFCinitializationfailed endl nRetCode 1 else BOOLbStatus false 设置等待建立连接的时间database SetLoginTimeout 10 try 与数据源LibraryDB建立连接bStatus database Open NULL FALSE FALSE ODBC DSN CompanyDS if bStatus cout 连接成功 endl elsecout 连接失败 endl catch CMemoryException pEx 异常处理 pEx ReportError catch CDBException pDBEx pDBEx ReportError 输出错误信息coutm nRetCodem strErrorm strStateNativeOrigin n database Close 关闭数据库 returnnRetCode 19 例4 50 例4 50 查询SQLServer2000数据库company中表employee的记录信息 假定对SQLServer2000数据库的company已经建立了数据源CompanyDS company中有一个表employee 该实例显示表中所有职员的no 编号 name 姓名 sex 性别 和salary 工资 20 解题思路 数据库连接成功后 调用Crecordset类的Open函数执行指定的SQL语句查询数据源中的记录 并按指定的类型和选项建立记录集 对记录集中的记录 需要用循环方法逐条处理 处理完当前记录后 调用Crecordset类的MoveNext函数 将记录指针移至下条记录 当最后一条记录处理完毕后 函数IsEOF的值为真 21 bStatus database Open NULL FALSE FALSE ODBC DSN MyDS 与数据源LibraryDB建立连接CRecordsetrecset else cout 学号姓名性别年龄籍贯 endl 输出表中的列名cout endl CStringtemp while recset IsEOF 每循环一次 输出结果集中的一条记录recset GetFieldValue 学号 temp cout LPCTSTR temp recset GetFieldValue 姓名 temp cout LPCTSTR temp recset GetFieldValue 性别 temp cout LPCTSTR temp recset GetFieldValue 年龄 temp cout LPCTSTR temp recset GetFieldValue 籍贯 temp cout LPCTSTR temp recset MoveNext cout endl recset Close database Close 关闭数据库 23 例4 51 例4 51 为SQLServer2000数据库company的表employee插入记录 假定对SQLServer2000数据库company已经建立了数据源CompanyDS company中有一个表employee 该实例在表中插入两条记录 其数据分别为 2001 邢雪花 女 650和2020 翟建设 男 746 解题思路 数据库连接成功后 可调用Cdatabase类的ExecuteSQL函数执行指定的SQL语句插入记录 24 为表employee插入记录 CDatabasedatabase CWinApptheApp BOOLbStatus false 与数据源LibraryDB建立连接bStatus database Open NULL FALSE FALSE ODBC DSN LibraryDB CStringstrSQL 25 strSQL INSERTINTOstudentVALUES 2001 邢雪花 女 650 要执行的SQL语句database ExecuteSQL strSQL database ExecuteSQL INSERTINTOstudentVALUES 2020 翟建设 男 746 database Close 关闭数据库 注意SQL中的单引号和双引号 26 例4 52 修改表employee中记录 例4 52 修改SQLServer2000数据库company的表employee中记录 该实例修改表company中的两条记录 将no值为2001记录中的salary改为900 将name为翟建设的记录的no改为3000 分析 数据库连接成功后 可调用Cdatabase类的ExecuteSQL函数执行指定的SQL语句修改记录 27 修改表employee中记录 CDatabasedatabase CWinApptheApp BOOLbStatus false 与数据源LibraryDB建立连接bStatus database Open NULL FALSE FALSE ODBC DSN LibraryDB CStringstrSQL 28 database ExecuteSQL UPDATEemployeeSETsalary 900 whereno 2001 strSQL UPDATEemployeeSETno 3000 WHEREname 翟建设 database ExecuteSQL strSQL database Close 关闭数据库 29 CDatabasedatabase CWinApptheApp BOOLbStatus false 与数据源建立连接bStatus database Open NULL FALSE FALSE ODBC DSN LibraryDB CStringstrSQL strSQL DELETEFROMemployeeWHEREno 1004 database ExecuteSQL strSQL database Close 关闭数据库 strSQL deletefromstudentwheretrim 学号 99110 例4 53 删除表employee中记录 30 例4 54 在company中建立表 CDatabasedatabase CWinApptheApp BOOLbStatus false 与数据源LibraryDB建立连接bStatus database Open NULL FALSE FALSE ODBC DSN LibraryDB 31 创建student表并插入数据 CStringstrSQL strSQL CREATETABLEstudent s numchar 4 s namechar 6 null scoreint 建立表database ExecuteSQL strSQL strSQL INSERTINTOstudent s num s name score VALUES 9901 张学军 98 database ExecuteSQL strSQL database Close 关闭数据库 32 创建score2表并插入数据 CStringstrSQL strSQL CREATETABLEscore2 s numchar 4 s namechar 6 null scoreint 建立表database ExecuteSQL strSQL strSQL INSERTINTOscore2 s num s name score VALUES 9901 张学军 98 database ExecuteSQL strSQL 33 查询并显示score2中的数据 CRecordsetrecset else 34 输出表中的列名cout 学号姓名分数 endl cout endl CStringtemp while recset IsEOF 每循环一次 输出结果集中的一条记录recset GetFieldValue s num temp cout LPCTSTR temp recset GetFieldValue s name temp cout LPCTSTR temp recset GetFieldValue score temp cout LPCTSTR temp recset MoveNext cout endl recset Close database Close 关闭数据库 35 例4 56 多

温馨提示

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

评论

0/150

提交评论