[农林牧渔]数据库及应用程序开发PPT课件_第1页
[农林牧渔]数据库及应用程序开发PPT课件_第2页
[农林牧渔]数据库及应用程序开发PPT课件_第3页
[农林牧渔]数据库及应用程序开发PPT课件_第4页
[农林牧渔]数据库及应用程序开发PPT课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

-,1,第4章数据库及应用程序开发数据库编程,西安交通大学计算机教学实验中心,软件开发技术基础,-,2,4.3数据库编程,4.3.1数据库连接技术1ODBC微软公司ODBC(OpenDatabaseConnectivity,开放数据库互连),,建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。基于ODBC的应用程序对数据库的操作不依赖任何DBMS,由对应的DBMS的ODBC驱动程序完成。能以统一的方式处理所有的数据库。,-,3,2ADO和OLEDB,Microsoft推出的一致数据访问技术,为关系型或非关系型数据访问提供了一致的访问接口。ADO提供了高层软件接口,不仅可在高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于WEB程序访问数据库提供了捷径。OLEDB提供了底层软件接口,-,4,3JDBC,Java数据库连接JDBC(JavaDatabaseConnectivity)由一组用Java编程语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API。程序可在任何平台上运行。,-,5,4.3.2利用VC开发应用系统,1MFCODBC类简介(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,编程连接该数据库。如果连接成功,显示“连接成功”,否则显示“连接失败”。#includestdafx.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;,elseBOOLbStatus=false;/设置等待建立连接的时间database.SetLoginTimeout(10);try/与数据源LibraryDB建立连接bStatus=database.Open(NULL,FALSE,FALSE,ODBC;DSN=CompanyDS;);if(bStatus)cout连接成功!endl;elsecout连接失败!ReportError();/输出错误信息coutm_nRetCodem_strErrorm_strStateNativeOriginn;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;/输出表中的列名coutendl;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();coutendl;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;coutendl;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();coutendl;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

提交评论