数据库编程总结1.docx
《数据库编程总结1.docx》由会员分享,可在线阅读,更多相关《数据库编程总结1.docx(21页珍藏版)》请在冰豆网上搜索。
数据库编程总结1
当前各种主流数据库有很多,包括Oracle,MSSQLServer,Sybase,Informix,MySQL,DB2,Interbase/Firebird,PostgreSQL,SQLite,SAP/DB,TimesTen,MSACCESS等等。
数据库编程是对数据库的创建、读写等一列的操作。
数据库编程分为数据库客户端编程与数据库服务器端编程。
数据库客户端编程主要使用ODBCAPI、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLEDB等方法。
数据库编程需要掌握一些访问数据库技术方法,还需要注意怎么设计高效的数据库、数据库管理与运行的优化、数据库语句的优化。
一、访问数据库技术方法
数据库编程分为数据库客户端编程与数据库服务器端编程。
数据库客户端编程主要使用ODBCAPI、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLEDB等方法。
1、几种是数据库访问方法比较
ODBCAPI是一种适合数据库底层开发的编程方法,ODBCAPI提供大量对数据源的操作,ODBCAPI能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关编程中,API编程具有最高的执行速度。
DAO提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过Access/Jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
OLEDB提供了COM接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
ADO最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。
ADO.NET是利用数据集的概念将数据库数据读入内存中,然后在内存中对数据进行操作,最后将数据集数据回写到源数据库中。
OTL是Oracle,OdbcandDB2-CLITemplateLibrary的缩写,是一个C++编译中操控关系数据库的模板库,OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。
当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。
具有以下优点:
跨平台;运行效率高,与C语言直接调用API相当;开发效率高,起码比ADO.net使用起来更简单,更简洁;部署容易,不需要ADO组件,不需要.netframework等。
2、VC数据库编程几种方法
VC数据库编程几种方法,包括ODBC连接、MFCODBC连接、DAO连接、OLEDB、OLEDBTemplates连接、ADO、Oracle专用方法(OCI(OracleCallInterface)访问、OracleObjectOLEC++ClassLibrary)。
<1.>通用方法
1.ODBC连接
ODBC(OpenDataBaseConnectivity)是MSOA的一部分,是一个标准数据库接口。
它提供对关系数据库访问的统一接口,实现对异构数据源的一致访问。
ODBC数据访问由以下部分组成:
<1>句柄(Handles):
ODBC使用句柄来标识ODBC环境、连接、语句和描述器.
<2>缓存区(Buffers):
<3>数据类型(Datatypes)
<4>一致性级别(Conformancelevels)
用ODBC设计客户端的一般步骤:
<1>分配ODBC环境
<2>分配连接句柄
<3>连接数据源
<4>构造和执行SQL语句
<5>获得查询结果
<6>断开数据源的连接
<7>释放ODBC环境
ODBCAPI是一种适合数据库底层开发的编程方法,ODBCAPI提供大量对数据源的操作,ODBCAPI能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关编程中,API编程具有最高的执行速度.因此,ODBCAPI编程属于底层编程。
2.MFCODBC连接
MFCODBC是MFC对ODBC进行的封装,以简化对ODBCAPI的调用,从而实现面向对象的数据库编程接口.
MFCODBC的封装主要开发了CDatabase类和CRecordSet类
(1)CDatabase类
CDatabase类用于应用程序建立同数据源的连接。
CDatabase类中包含一个m_hdbc变量,它代表了数据源的连接句柄。
如果要建立CDatabase类的实例,应先调用该类的构造函数,再调用Open函数,通过调用,初始化环境变量,并执行与数据源的连接。
在通过Close函数关闭数据源。
CDatabase类提供了对数据库进行操作的函数及事务操作。
(2)CRecordSet类
CRecordSet类定义了从数据库接收或者发送数据到数据库的成员变量,以实现对数据集的数据操作。
CRecordSet类的成员变量m_hstmt代表了定义该记录集的SQL语句句柄,m_nFields为记录集中字段的个数,m_nParams为记录集所使用的参数个数。
CRecordSet的记录集通过CDatabase实例的指针实现同数据源的连接,即CRecordSet的成员变量m_pDatabase.
MFCODBC编程更适合于界面型数据库应用程序的开发,但由于CDatabase类和CRecordSet类提供的数据库操作函数有限,支持的游标类型也有限,限制了高效的数据库开发。
在编程层次上属于高级编程。
应用实例:
1.打开数据库
CDatabasedatabase;
database.OpenEx(_T("DSN=zhuxue"),CDatabase:
:
noOdbcDialog);//zhuxue为数据源名称
2.关联记录集
CRecordsetrecset(&database);
3.查询记录
CStringsSql1="";
sSql1="SELECT*FROMtablename";
recset.Open(CRecordset:
:
forwardOnly,sSql1,CRecordset:
:
readOnly);
intti=0;
CDBVariantvar;//var可以转换为其他类型的值
while(!
recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("id",var);
jiangxiang[ti].id=var.m_iVal;
recset.GetFieldValue("name",jiangxiang[ti].name);
ti++;
recset.MoveNext();
}
recset.Close();//关闭记录集
4.执行sql语句
CStringsSql="";
sSql+="delete*from院系审核";//清空表
database.ExecuteSQL(sSql);
sSql也可以为Insert,Update等语句
5.读取字段名
sSql="SELECT*FROMSheet1";//读取的文件有Sheet1表的定义,或为本程序生成的表.
//执行查询语句
recset.Open(CRecordset:
:
forwardOnly,sSql,CRecordset:
:
readOnly);
intexcelColCount=recset.GetODBCFieldCount();//列数
CStringexcelfield[30];
//得到记录集的字段集合中的字段的总个数
for(i=0;i{
CODBCFieldInfofieldinfo;
recset.GetODBCFieldInfo(i,fieldinfo);
excelfield[i].name=fieldinfo.m_strName;//字段名
}
6.打开excel文件
CStringsDriver="MICROSOFTEXCELDRIVER(*.XLS)";//Excel安装驱动
CStringsSql,sExcelFile;//sExcelFile为excel的文件路径
TRY
{
//创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver,sExcelFile,sExcelFile);
//创建数据库(既Excel表格文件)
if(database.OpenEx(sSql,CDatabase:
:
noOdbcDialog))
{
//可以把excel作为一个数据库操作
}
}
catch(e)
{
TRACE1("Excel驱动没有安装:
%s",sDriver);
AfxMessageBox("读取失败,请检查是否定义数据区Sheet1");
}
3.DAO连接
DAO(DataAccessObject)是一组MicrosoftAccess/Jet数据库引擎的COM自动化接口.DAO直接与Access/Jet数据库通信.通过Jet数据库引擎,DAO也可以同其他数据库进行通信。
DAO还封装了Access数据库的结构单元,通过DAO可以直接修改Access数据库的结构,而不必使用SQL的数据定义语言(DDL)。
DAO的体系结构如下:
DAO封装的类:
(1)CdaoWorkspace:
对DAO工作区(数据库处理事务管理器)的封装
(2)CdaoDatabase:
对DAO数据库对象的封装,负责数据库连接.
(3)CdaoRecordset:
对DAO记录集对象的封装,代表所选的一组记录.
(4)CdaoTableDef:
对表定义对象的封装,代表基本表或附加表定义.
(5)CdaoQueryDef:
对查询对象的封装,包含所有查询的定义.
(6)CdaoException:
DAO用于接收数据库操作异常的类.
(7)CDaoFieldExchange
DAO提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过Access/Jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
DAO相对于ODBC来说,属于高层的数据库接口.
4.OLEDB连接
OLEDB对ODBC进行了两方面的扩展:
一是提供了数据库编程的OLE接口即COM,二是提供了一个可用于关系型和非关系型数据源的接口。
OLEDB提供了COM接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
与ODBCAPI一样,OLEDB也属于底层的数据库编程接口,OLEDB结合了ODBC对关系数据库的操作功能,并进行扩展,可以访问非关系数据库。
OLEDB访问数据库的原理如下:
OLEDB程序结构:
OLEDB由客户(Consumer)和服务器(Provider)。
客户是使用数据的应用程序,它通过OLEDB接口对数据提供者的数据进行访问和控制。
OLEDB服务器是提供OLEDB接口的软件组件。
根据提供的内容可以分为数据提供程序(DataProvider)和服务提供程序(ServiceProvider)。
程序结构原理图如下:
<1>数据提供程序
数据提供程序拥有自己的数据并把数据以表格的形式呈现给使用者使用.
<2>服务提供程序
服务提供程序是数据提供程序和使用者的结合。
它是OLEDB体系结构中的中间件,它