普通高等教育“十一五”国家级规划教材“十二五”普通高等教育本科国家级规划教材赵英良等.软件开发技术基础(第2版).机械工业出版社第4章数据库及应用程序开发——数据库应用程序编程西安交通大学计算机教学实验中心数据库编程1.数据库连接技术2.用VC开发数据库应用系统3.编程实例2西安交通大学计算机教学实验中心4.3.1数据库连接技术1.ODBC微软公司ODBC(OpenDatabaseConnectivity,开放数据库互连),,建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。基于ODBC的应用程序对数据库的操作不依赖任何DBMS,由对应的DBMS的ODBC驱动程序完成。能以统一的方式处理所有的数据库。3西安交通大学计算机教学实验中心ODBC组成ODBC管理器驱动程序管理器ODBCAPIODBC驱动程序访ODBC管理器注册一个数据源问数据库应用程序将数据源名提供给ODBCDBC就能建立起与相应数据库的连接4西安交通大学计算机教学实验中心2.ADO和OLEDBMicrosoft推出的一致数据访问技术为关系型或非关系型数据访问提供了一致的访问接口,包括两层软件,分别为:ADO(ActiveDataObject)和OLEDBADO(ACTIVEXDATAOBJECTS)应用层的数据访问接口,不仅可在高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于WEB程序访问数据库提供了捷径。5西安交通大学计算机教学实验中心ADO以OLEDB为基础,它对OLEDB进行了封装OLEDB提供了底层的、系统级的数据访问接口6西安交通大学计算机教学实验中心ODBC,ADO,OLEDB之间的关系7西安交通大学计算机教学实验中心3.JDBCJava数据库连接JDBC(JavaDatabaseConnectivity)由一组用Java编程语言编写的类和接口组成。JDBC为基于Java的数据库开发人员提供了一个标准的API。程序可在任何平台上运行。8西安交通大学计算机教学实验中心4.3.2利用VC开发应用系统1.MFCODBC类简介(1)Cdatabase:建立与数据源的连接首先应构造一个CDatabase对象,然后再调用CDatabase的Open成员函数Open成员函数virtualBOOLOpen(LPCTSTRlpszDSN,BOOLbExclusive=FALSE,BOOLbReadOnly=FALSE,LPCTSTRlpszConnect=“ODBC;”,BOOLbUseCursorLib=TRUE);9西安交通大学计算机教学实验中心连接数据库语句实例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;//virtualvoidClose();//10西安交通大学计算机教学实验中心(2)CRecordset类该类代表从数据源选择的一组记录(记录集),程序可以通过对表的查询得到记录集。通过该类可对记录集中的记录进行滚动、修改、增加和删除等操作。要构造一个CRecordset派生类对象,需调用Open成员函数查询数据源中的记录。在Open函数中,可能会调用GetDefaultConnect和GetDefaultSQL函数11西安交通大学计算机教学实验中心成员函数virtualCStringGetDefaultConnect();该函数返回缺省的连接字符串构造函数CRecordset(CDatabase*pDatabase=NULL);Open函数,指定的SQL语句查询数据源中的记录并按指定的类型和选项建立记录集。virtualBOOLOpen(UINTnOpenType=AFX_DB_USE_DEFAULT_TYPE,LPCTSTRlpszSQL=NULL,DWORDdwOptions=none);12西安交通大学计算机教学实验中心CRecordset类的Open方法virtualBOOLOpen(UINTnOpenType=AFX_DB_USE_DEFAULT_TYPE,LPCTSTRlpszSQL=NULL,DWORDdwOptions=none);throw(CDBException,CMemoryException);13西安交通大学计算机教学实验中心CRecordset的滚动函数调用CRecordset的滚动函数,如MoveFirst,MoveNext,movePrev,MoveLast等,来改变“当前”记录的位置。IsBOF,IsEOF用于判别是否移动到记录集的头或尾。14西安交通大学计算机教学实验中心2.执行SQL语句可以使用CDatabase类的ExecuteSQL函数直接执行SQL语句。ExecuteSQL能:查询记录、创建新表、删除表、创建索引、修改记录、删除记录和插入记录ExecuteSQL的声明如下:voidExecuteSQL(LPCTSTRlpszSQL)其中,lpszSQL表示要执行的SQL语句。15西安交通大学计算机教学实验中心3数据库操作的基本过程(0)建立数据源(1)连接数据库建立CDataBase类对象,通过CDataBase类的Open函数连接数据库。(2)执行SQL语句对于要返回结果集的查询操作,可以通过CRecordSet类的Open函数实现,对于不返回结果集的其它SQL语句可以通过CdataBase类的ExecuteSQL函数实现。(3)断开与数据库的连接通过CDataBase类的Close函数断开与数据库的连接。16西安交通大学计算机教学实验中心创建SQLSERVER数据源17西安交通大学计算机教学实验中心创建数据源18西安交通大学计算机教学实验中心ACCESS用户数据源19西安交通大学计算机教学实验中心添加20西安交通大学计算机教学实验中心数据源名21西安交通大学计算机教学实验中心选择22西安交通大学计算机教学实验中心创建的ODBC数据源23西安交通大学计算机教学实验中心4.3.3编程实例【例4-49】查询SQLServer2000数据库company中表employee的记录信息。假定对SQLServer2000数据库的company已经建立了数据源CompanyDS,company数据库中有一个表employee。请用C++编程显示该表中所有职员的num(编号)、name(姓名),sex(性别)和salary(工资)。24西安交通大学计算机教学实验中心解题思路①在VC环境下编写控制台的数据库应用程序需要包含头文件“afxdb.h”。②程序中首先需要连接数据库。先创建CDatabase类的对象,再调用该类的Open函数③数据库连接成功后,可调用Crecordset类的Open函数执行指定的SQL语句查询数据源中的记录,并按指定的类型和选项建立记录集。25西安交通大学计算机教学实验中心④对记录集中的记录,用循环的方式逐条显示其内容,每显示完一条,调用一次Crecordset类的MoveNext函数,将记录指针移至下一条记录。当最后一条记录处理完毕后,函数IsEOF的值为真,用于判断记录集处理完毕。⑤最后关闭记录集、断开数据库连接。详细算法请参考源程序及其中的注释。26西安交通大学计算机教学实验中心【例4-50】【例4-50】为SQLServer2000数据库company的表employee插入记录。假定对SQLServer2000数据库company已经建立了数据源CompanyDS,company中有一个表employee。该实例在表中插入两条记录,其数据分别为:2001,邢雪花,女,650和2020,翟建设,男,746。27西安交通大学计算机教学实验中心解题思路数据库连接成功后,可调用Cdatabase类的ExecuteSQL函数执行指定的SQL语句插入记录。28西安交通大学计算机教学实验中心【例4-51】修改表employee中记录修改SQLServer2000数据库company的表employee中记录。修改表company中的两条记录,将no值为2001记录中的salary改为900,将name为翟建设的记录的no改为3000。分析:数据库连接成功后,可调用Cdatabase类的ExecuteSQL函数执行指定的SQL语句修改记录。29西安交通大学计算机教学实验中心源程序#includeiostream.h#includeafxdb.hvoidmain(){CDatabasedatabase;//建立数据库对象database.Open(NULL,FALSE,FALSE,ODBC;DSN=CompanyDS;);//与ODBC数据源CompanyDS建立连接CStringstrSQL=UPDATEemployeeSETsalary=900;strSQL=strSQL+wherenum='2001';database.ExecuteSQL(strSQL);strSQL=UPDATEemployeeSETnum='3000'WHEREname='翟建设';database.ExecuteSQL(strSQL);database.Close();//关闭数据库}30西安交通大学计算机教学实验中心在SQLServer2000数据库company中,删除表employee中记录。该实例删除employee表中num值为1004的记录。CDatabasedatabase;//建立数据库对象database.Open(NULL,FALSE,FALSE,ODBC;DSN=CompanyDS;);//与ODBC数据源CompanyDS建立连接CStringstrSQL=DELETEFROMemployeeWHEREnum='1004';database.ExecuteSQL(strSQL);database.Close();//关闭数据库31【例4-52】删除表employee中记录西安交通大学计算机教学实验中心【例4-53】在company中建立表在SQLServer2000数据库company中建立表。该实例建立表student,其中有s_num(学号)、s_name(姓名)和score(成绩)3列数据,并给表中输入一条记录,其数据为:9901,张学军,98。32西安交通大学计算机教学实验中心【例4-54】建立图书馆管理系统系统需求查询图书:通过书名和类别查询库中的图书,其中书名为模糊查询。借书处理:在查询的基础上完成借书登记处理。借书时需要输入书号和读者编号,修改图书表记录和增加借书表的记录。还书处理:实现还书处理操作。还书时需要先修改图书记录,改变其借出否标志,再删除相关的借书记录。33西安交通大学计算机教学实验中心数据表设计——图书34西安交通大学计算机教学实验中心数据表设计——读者35西安交通大学计算机教学实验中心数据表设计——借书表36西安交通大学计算机教学实验中心数据信息37西安交通大学计算机教学实验中心借书逻辑借书要求提供书号和读者编号在借书表中增加一条记录在读书表中修改借出标志还书逻辑提供书号删除借书表中的记录修改图书表中的借出标志38西安交通大学计算机教学实验中心运行窗口139西安交通大学计算机教学实验中心查询图书40西安交通大学计算机教学实验中心谢谢41