收藏 分销(赏)

农林牧渔数据库及应用程序开发.ppt

上传人:a199****6536 文档编号:10274724 上传时间:2025-05-11 格式:PPT 页数:46 大小:1.70MB 下载积分:14 金币
下载 相关 举报
农林牧渔数据库及应用程序开发.ppt_第1页
第1页 / 共46页
农林牧渔数据库及应用程序开发.ppt_第2页
第2页 / 共46页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,第,4,章 数据库及应用程序开发,数据库编程,西安交通大学,计算机教学实验中心,软件开发技术基础,2,4.3,数据库编程,4.3.1,数据库连接技术,1,ODBC,微软公司,ODBC,(,Open Database Connectivity,,,开放数据库互连,),,建立了一组规范,,,并提供了一组对数据库访问的标准,API,(,应用程序编程接口,),。,基于,ODBC,的应用程序对数据库的操作不依赖任何,DBMS,,由对应的,DBMS,的,ODBC,驱动程序完成。能以统一的方式处理所有的数据库。,3,2,ADO,和,OLE DB,Microsoft,推出的一致数据访问技术,为关系型或非关系型数据访问提供了一致的访问接口。,ADO,提供了高层软件接口,不仅可在高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于,WEB,程序访问数据库提供了捷径。,OLE DB,提供了底层软件接口,4,3,JDBC,Java,数据库连接,JDBC(Java Database Connectivity),由一组用,Java,编程语言编写的类和接口组成。,JDBC,为数据库开发人员提供了一个标准的,API,。程序可在任何平台上运行。,5,4.3.2,利用,V C,开发应用系统,1,MFC ODBC,类简介,(,1,),Cdatabase,:建立与数据源的连接,virtual BOOL,Open,(LPCTSTR lpszDSN,BOOL bExclusive=FALSE,BOOL bReadOnly=FALSE,LPCTSTR lpszConnect=,“,ODBC;,”,BOOL bUseCursorLib=TRUE);throw(CDBException,CMemoryException);,lpszDSN,指定了数据源名。,bExclusive,说明是否独占数据源,,bReadOnly,若为,TRUE,则对数据源的连接是只读的。,lpszConnect,指定了一个连接字符串,连接字符串中可以包括数据源名、用户帐号,(ID),和口令等信息,字符串中的,“,ODBC,”,表示要连接到一个,ODBC,数据源上。,bUseCursorLib,若为,TRUE,,则会装载光标库,否则不装载,若连接成功,函数返回,TRUE,,若返回,FALSE,,,若函数内部出现错误,则会产生一个异常。,6,连接数据库语句实例,CDatabase m_db;,m_db.Open(,MyDS,);,m_db.Open(NULL,FALSE,FALSE,ODBC;,DSN=MyDS;UID=ABC;PWD=1234,);,m_db.Open(NULL);/,将弹出一个数据源对话框,bool IsOpen()const;,/,返回,TRUE,则表明当前有一个连接,virtual void Close();,7,(,2,),CRecordset,类,从数据源选择的一组记录(记录集)。,CRecordset(CDatabase*pDatabase=NULL);,virtual CString GetDefaultConnect(),;,该函数返回缺省的连接字符串,8,virtual BOOL,Open,(UINT,nOpenType,=AFX_DB_USE_DEFAULT_TYPE,LPCTSTR,lpszSQL,=NULL,DWORD,dwOptions,=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,的声明如下:,void ExecuteSQL(LPCTSTR lpszSQL),其中,,lpszSQL,表示要执行的,SQL,语句。,14,3,数据库操作的基本过程,(,1,)连接数据库,建立,CDataBase,类对象,通过,CDataBase,类的,Open,函数连接数据库。,(,2,)执行,SQL,语句,对于要返回结果集的查询操作,可以通过,CRecordSet,类的,Open,函数实现,,对于不返回结果集的其它,SQL,语句可以通过,CdataBase,类的,ExecuteSQL,函数实现。,(,3,)断开与数据库的连接,通过,CDataBase,类的,Close,函数断开与数据库的连接。,15,.3.3,编程实例,【,例,4-49,】,连接,SQL Server,2000,数据库,company,。假定对,SQL Server,2000,数据库,company,已经建立了,数据源,CompanyDS,,,编程连接该数据库。如果连接成功,,,显示,“,连接成功,”,,否则显示,“,连接失败,”,。,#include stdafx.h,#include,#include,#ifdef _DEBUG,#define new DEBUG_NEW,#undef THIS_FILE,static char THIS_FILE=_FILE_;,#endif,CDatabase database;,CWinApp theApp;,using namespace std;,int _tmain(int argc,TCHAR*argv,TCHAR*envp),int nRetCode=0;,/,初始化,MFC,并进行判断,if(!AfxWinInit(:GetModuleHandle(NULL),NULL,:GetCommandLine(),0),/TODO:change error code to suit your needs,cerr _T(Fatal Error:MFC initialization failed)endl;,nRetCode=1;,else,BOOL bStatus=false;,/,设置等待建立连接的时间,database.SetLoginTimeout(10);,try,/,与数据源,LibraryDB,建立连接,bStatus=database.Open(NULL,FALSE,FALSE,ODBC;DSN=CompanyDS;);,if(bStatus),cout,连接成功!,endl;,else,cout,连接失败!,ReportError();,catch,(CDBException*pDBEx),pDBEx-ReportError();,/,输出错误信息,coutm_nRetCode,m_strError,m_strStateNativeOriginn;,database.Close();,/,关闭数据库,return nRetCode;,19,【,例,4-50】,【,例,4-50】,查询,SQL Server,2000,数据库,company,中表,employee,的记录信息。假定对,SQL Server 2000,数据库的,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,建立连接,CRecordset recset,(,CString strSQL;,strSQL=select*from student;,/,要执行的,SQL,语句,recset.Open,(CRecordset:forwardOnly,strSQL,CRecordset:readOnly);/,打开查询结果集,if(recset.IsEOF(),/,查询结果集为空,cout,很遗憾,没有记录!,endl;,else,cout,学号 姓名 性别 年龄 籍贯,endl;,/,输出表中的列名,coutendl;,CString,temp;,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(),;/,关闭数据库,THANK YOU,SUCCESS,2025/5/11 周日,23,可编辑,24,【,例,4-51】,【,例,4-51】,为,SQL Server 2000,数据库,company,的表,employee,插入记录,。假定对,SQL Server 2000,数据库,company,已经建立了,数据源,CompanyDS,,,company,中有一个表,employee,。该实例在表中插入两条记录,其数据分别为:,2001,邢雪花,女,,650,和,2020,翟建设,男,,746,。,解题思路:,数据库连接成功后,可调用,Cdatabase,类的,ExecuteSQL,函数执行指定的,SQL,语句插入记录。,25,为表,employee,插入记录。,CDatabase database;,CWinApp theApp;,BOOL bStatus=false;/,与数据源,LibraryDB,建立连接,bStatus=,database.Open,(NULL,FALSE,FALSE,ODBC;DSN=,LibraryDB,;);,CString strSQL;,26,strSQL=,“,INSERT INTO student VALUES(,2001,邢雪花,女,650),”,;,/,要执行的,SQL,语句,database.ExecuteSQL(strSQL);,database.ExecuteSQL(,“,INSERT INTO student VALUES(,2020,翟建设,男,746),”,);,database.Close();/,关闭数据库,/,注意,SQL,中的单引号和双引号,27,【,例,4-52】,修改表,employee,中记录,【,例,4-52】,修改,SQL Server 2000,数据库,company,的表,employee,中记录。,该实例修改表,company,中的两条记录,将,no,值为,2001,记录中的,salary,改为,900,,将,name,为翟建设的记录的,no,改为,3000,。,分析:数据库连接成功后,可调用,Cdatabase,类的,ExecuteSQL,函数执行指定的,SQL,语句修改记录。,28,修改表,employee,中记录,CDatabase,database,;,CWinApp theApp;,BOOL bStatus=false;,/,与数据源,LibraryDB,建立连接,bStatus=,database.Open,(NULL,FALSE,FALSE,ODBC;DSN=,LibraryDB,;);,CString strSQL;,29,database.,ExecuteSQL,(,UPDATE,employee SET salary=900+where no=2001);,strSQL=,“,UPDATE employee SET no=,3000,”,+,“,WHERE name=,翟建设,”,;,database.,ExecuteSQL,(,strSQL,);,database.Close();/,关闭数据库,30,CDatabase database;,CWinApp theApp;,BOOL bStatus=false;/,与数据源建立连接,bStatus=database.Open(NULL,FALSE,FALSE,ODBC;DSN=LibraryDB;);,CString strSQL;,strSQL=DELETE FROM employee WHERE no=1004;,database.,ExecuteSQL,(strSQL);,database.Close();/,关闭数据库,/,strSQL=delete from student where,trim,(,学号,)=99110;,【,例,4-53】,删除表,employee,中记录,31,【,例,4-54】,在,company,中建立表,CDatabase database;,CWinApp theApp;,BOOL bStatus=false;,/,与数据源,LibraryDB,建立连接,bStatus=database.Open(NULL,FALSE,FALSE,ODBC;DSN=LibraryDB;);,32,创建,student,表并插入数据,CString strSQL;,strSQL=,CREATE TABLE student,(s_num char(4),s_name char(6)null,score int);,/,建立表,database.,ExecuteSQL,(strSQL);,strSQL=INSERT INTO student(s_num,s_name,score)VALUES(9901,张学军,98);,database.ExecuteSQL(strSQL);,database.Close();/,关闭数据库,33,创建,score2,表并插入数据,CString strSQL;,strSQL=,CREATE TABLE,score2(s_num char(4),s_name char(6)null,score int);,/,建立表,database.,ExecuteSQL,(strSQL);,strSQL=,INSERT INTO,score2(s_num,s_name,score)VALUES(9901,张学军,98);,database.,ExecuteSQL,(strSQL);,34,查询并显示,score2,中的数据,CRecordset,recset,(,/CString strSQL;,strSQL=select*from,score2,;/,要执行的,SQL,语句,/,打开查询结果集,recset.Open,(CRecordset:forwardOnly,strSQL,CRecordset:readOnly);,if(recset.IsEOF(),/,查询结果集为空,cout,很遗憾,没有记录!,endl;,else,35,/,输出表中的列名,cout,学号 姓名 分数,endl;,coutendl;,CString temp;,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();/,关闭数据库,36,【,例,4-56】,多表查询,CRecordset recset(,CString strSQL;,strSQL=,select,student,.,学号,student.,姓名,student.,性别,score,.,课程,score.,成绩,from,student,score,where,student.,学号,=score.,学号,;/,要执行的,SQL,语句,/,打开查询结果集,recset.Open,(CRecordset:forwardOnly,strSQL,CRecordset:readOnly);,if(recset.IsEOF(),/,查询结果集为空,cout,很遗憾,没有记录!,endl;,37,/,输出表中的列名,cout,学号,t,姓名,t,性别,t,课程,tt,分数,endl;,coutendl;,CString temp;,while(!recset.IsEOF(),/,每循环一次,输出结果集中的一条记录,recset.GetFieldValue(,学号,temp);cout(LPCTSTR)temp;,recset.GetFieldValue(,姓名,temp);coutt(LPCTSTR)temp;,recset.GetFieldValue(,性别,temp);coutt(LPCTSTR)temp;,recset.GetFieldValue(,课程,temp);coutt(LPCTSTR)temp;,recset.GetFieldValue(,成绩,temp);couttt(LPCTSTR)temp;,recset.MoveNext();coutendl;,recset.Close();,38,【,例,4-55】,建立图书馆管理系统,系统需求,查询图书,:通过书名和类别查询库中的图书,其中书名为模糊查询。,借书处理,:在查询的基础上完成借书登记处理。借书时需要输入书号和读者编号,修改图书表记录和增加借书表的记录。,还书处理,:实现还书处理操作。还书时需要先修改图书记录,改变其借出否标志,再删除相关的借书记录。,39,数据表设计,图书,40,数据表设计,读者,41,数据表设计,借书表,42,数据信息,43,借书逻辑,借书要求提供书号和读者编号,在借书表中增加一条记录,在读书表中修改借出标志,还书逻辑,提供书号,删除借书表中的记录,修改图书表中的借出标志,44,运行窗口,1,45,查询图书,THANK YOU,SUCCESS,2025/5/11 周日,46,可编辑,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服