CN100589101C - 基于程序调用接口的Oracle关系数据库的数据访问方法 - Google Patents
基于程序调用接口的Oracle关系数据库的数据访问方法 Download PDFInfo
- Publication number
- CN100589101C CN100589101C CN200710044510A CN200710044510A CN100589101C CN 100589101 C CN100589101 C CN 100589101C CN 200710044510 A CN200710044510 A CN 200710044510A CN 200710044510 A CN200710044510 A CN 200710044510A CN 100589101 C CN100589101 C CN 100589101C
- Authority
- CN
- China
- Prior art keywords
- class
- data
- relational database
- target matrix
- access method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明揭示了一种基于程序调用接口的Oracle关系数据库的数据访问方法,包括获取目标数据表的字段信息、映射得到键值类和内容类数据、基于程序调用接口生成目标数据表的操作类代码、访问数据库的目标数据表的数据四个步骤。本发明中生成键值类和内容类数据以及操作类代码均是由自动工具软件实现的,并且以上的操作类代码是基于Oracle关系数据库底层的程序调用接口(OCI)生成的,故其具有很好的通用性和可移植性,可以运行在各种操作系统上,支持C/C++语言映射,运行效率高,并自动产生封装有通常数据库操作可重用的代码,且对所有目标数据表采用一致的访问方法,这样操作的难度得到了很大的降低并且提高了编程的效率。
Description
技术领域
本发明涉及计算机数据库领域,更具体地说,涉及一种基于程序调用接口的Oracle关系数据库的数据访问方法。
背景技术
随着计算机信息技术的发展,Oracle作为一种优秀的关系数据库在越来越多的应用中担负起重要的作用,Oracle以其优越的稳定性和卓越的性能在众多领域里有着广泛的应用,其高性能是Oracle优于其他数据库的关键因素。而对于Oracle关系数据库的数据访问现在有较多的方案,不少产品提供了对Oracle数据库的数据访问和处理的解决方案,如ADO.NET等,但是这些技术通常不可移植,对运行环境等有严格要求;另外Oracle公司虽然提供了Pro*C/C++等技术可用于数据库访问,但是使用繁琐调试困难,且只提供了一个接口工具,并且所有的数据库访问代码和数据持久化均需要手工编写代码,开发效率低,无法实现代码重用。
综上所述,现在迫切需要提供一种新的Oracle关系数据库的数据访问技术方案,该方案基于Oracle关系数据库底层的程序调用接口(OCI)生成相关代码,该方案操作简易、易于实施且生成代码执行效率高,可避免大量数据库访问代码编写,并能屏蔽数据访问细节,提高开发效率,降低开发难度。
发明内容
针对目前Oracle关系数据库的数据访问技术方案具有的通用性差、操作复杂以及效率低下等缺陷,本发明提供一种基于程序调用接口的Oracle关系数据库的数据访问方法,该方法操作简易、易于实施且生成代码执行效率高,可避免大量数据库访问代码编写,并能屏蔽数据访问细节,提高开发效率,降低开发难度。
为实现上述目的,提供一种基于程序调用接口的Oracle关系数据库的数据访问方法,包括以下步骤:
a.根据欲访问的目标数据表的表名,在Oracle关系数据库系统表中获取该目标数据表的字段信息;
b.将所述步骤a获取的字段信息依规则映射为键值类和内容类数据,这一生成的过程是通过编程得来的软件工具自动实现的;
c.基于Oracle关系数据库的程序调用接口OCI生成所述目标数据表的操作类代码,该目标数据表的操作类代码是通过编程得来的软件工具自动实现的;
d.修改所述步骤b的内容类数据值并调用所述步骤c的操作类代码访问所述Oracle关系数据库的目标数据表的数据。
所述步骤a的字段信息包括名称、类型、数据长度及精度。
所述步骤a的Oracle关系数据库系统表包括user_tab_columns和user_constraints系统表。
所述步骤b的键值类和内容类信息包括所述目标数据表的字段信息以及赋值和索引运算符。
所述步骤c的操作类代码包括增加、删除、修改、查询、提交及回滚功能的操作类代码。
所述步骤d中,修改所述内容类数据值并调用所述操作类代码时,修改的内容类数据值同步指向Oracle关系数据库,实现数据的访问。
采用本发明的技术方案,由于本发明的步骤是先在Oracle关系数据库系统表中获取目标数据表的字段信息,再将该字段信息映射为键值类和内容类数据,然后基于Oracle关系数据库的程序调用接口生成所述目标数据表的操作类代码,最后根据修改内容类数据值并调用操作类代码实现访问Oracle关系数据库的目标数据表的数据。以上所述的操作类代码因为是基于Oracle关系数据库底层的程序调用接口(OCI)生成的,所以其具有很好的通用性和可移植性,本发明具有的通用性和可移植性决定了本发明可以运行在各种操作系统之上,支持至C/C++语言映射,运行效率高,并自动产生封装有通常数据库操作可重用的代码,且对所有目标数据表采用一致的访问方法,如此一来其操作的难度得到了很大的降低并且提高了编程的效率。
附图说明
图1示出了本发明的数据访问方法流程示意图;
图2示出了本发明一实施例的目标数据表字段信息的映射规则表;
图3示出了本发明一实施例生成的操作代码表;
图4示出了本发明一实施例依据映射规则映射得到的键值类和内容类的结构表。
具体实施方式
本发明提供一种基于程序调用接口的Oracle关系数据库的数据访问方法,首先来说明一下Oracle关系数据库及其程序调用接口OCI,Oracle数据库以其优越的稳定性和卓越的性能在众多领域里有着广泛的应用,其高性能是Oracle优于其他数据库的关键因素。而对于Oracle关系数据库的数据访问现在有较多的方案,如ADO.NET等,但是这些技术通常不可移植,对运行环境等有严格要求;另外Oracle公司虽然提供了Pro*C/C++等技术可用于数据库访问,但是使用繁琐调试困难,且只提供了一个接口工具,并且所有的数据库访问代码和数据持久化均需要手工编写代码,开发效率低,无法实现代码重用。而Oracle关系数据库具有的程序调用接口OCI,提供了对所有Oracle数据库功能的全面访问,能够提供企业级的应用性能和可伸缩性,增强型的强健的安全模型,支持动态的链接和Session管理,且具有在所有运行Oracle的平台上的可移植性,本发明就是基于程序调用接口OCI的数据访问技术作为访问Oracle关系数据库的实现方法。
参考图1,本发明所述的一种基于程序调用接口的Oracle关系数据库的数据访问方法,包括以下流程:
201.获取目标数据表的字段信息。根据欲访问的目标数据表的表名,在Oracle关系数据库系统表中获取该目标数据表的字段信息,该字段信息包括名称、类型、数据长度及精度等,所述Oracle关系数据库系统表包括user_tab_columns和user_constraints系统表。
202.映射得到键值类和内容类数据。将所述步骤201获取的字段信息依规则映射为键值类和内容类数据,该步骤是通过编程得来的软件工具自动的实现规则映射而得到键值类和内容类数据。所述键值类和内容类信息包括所述目标数据表的字段信息以及赋值和索引运算符,并提供内容至可用于SQL语句中where部分的条件语句转换。
参考图2和图4,图2示出了本发明一实施例的目标数据表字段信息的映射规则表,图4示出了依据该映射规则表生成的键值类和内容类的结构表,这一生成的过程是通过编程得来的软件工具自动实现的,该实现过程的程序代码如下(采用C++语言编程):
Class Ckey_PdiData{
Public:
Ckey_PdiData();
~Ckey_PdiData();
Public:
String m_TableName;//PdiData
int m_dischgseqno; //dischgseqno
Ckey_PdiData& operator[](const Ckey_PdiData&);
Ckey_PdiData & operator=(string value);
Ckey_PdiData & operator=(double value);
Ckey_PdiData & operator=(int value);
Ckey_PdiData & operator=(datetime value);
string toConStr(); //return condition string,like keyField1=
value and...
}
Class CData_PdiData{
Public:
CData_PdiData();
~CData_PdiData();
Public:
Ckey_PdiData m_key;// key
string m_steelGrade; //steelGrade
string m_slabNo; //slabNo
double m_slab WeightAct;//slabWeightAct
Datetime m_ccCutTime;//ccCutTime
CData_PdiData& operator[](const CData_PdiData&);
CData_PdiData & operator=(string value);
CData_PdiData & operator=(double value);
CData_PdiData & operator=(int value);
CData_PdiData & operator=(datetime value);
...
}
其中键值类和内容类中每个成员对应数据库表中每个字段,字段类型根据映射规则生成,可用于存放一条记录键值和内容。
203.生成目标数据表的操作类代码。该步骤是基于Oracle关系数据库的程序调用接口(OCI)生成所述目标数据表的操作类代码,并且该步骤也是通过编程得来的软件工具自动的生成所述目标数据表的操作类代码。操作类代码包括增加、删除、修改、查询、提交及回滚功能的操作类代码。
参考图3,图3是根据本发明实施例的图4示出的键值类和内容类的结构表生成的操作代码表,该操作代码表是通过编程得来的软件工具自动实现的,该实现过程的程序代码如下(采用C++语言编程):
Class COperate_PdiData{
Public:
COperate_PdiData(connection &conn);
COperate_PdiData(string user,string passwd,string tnsname);
~COperate_PdiData();
Private:
Ckey_PdiData m_key;//key
CData_PdiData m_data; //data
Int m_CommitMode; //1-auto commit 0-user
commit(default)
Public:
Int setAutoCommitMode();
CData_PdiData Read(Ckey_PdiData_key);
Vector<CData_PdiData>Read(string strCon);
Int RecCount(string strCon);
Int RecCount(Ckey_PdiData_key);
Int isExist(Ckey_PdiData_key);
Int Write(CData_PdiData_data);
int Update(string strCon,CData_PdiData_data);
int Update(Ckey_PdiData_key,CData_PdiData_data);
int Delete(string strCon);
Int Delete(Ckey_PdiData_key);
Int Commit();
Int Rollback();
...
}
其中setAutoCommitMode用于设置自动提交;读记录有两种实现方式,根据条件返回一组满足要求的记录和根据键值返回一条记录,且提供了返回满足条件记录数的两个操作;新增记录的操作参数为包含内容的内容类对象,返回影响的的记录数;更新记录通用有两种方式,根据条件将内容更新和更加键值内容更新;可以根据条件或键值删除记录,返回影响的记录数;commit和rollback函数用于手动更新模式下提交和回滚。
204.访问数据库的目标数据表的数据。访问数据是通过修改所述步骤202的内容类数据值并调用所述步骤203的操作类代码访问所述Oracle关系数据库的目标数据表的数据。在该步骤中,修改所述内容类数据值并调用所述操作类代码时,修改的内容类数据值同步指向Oracle关系数据库,于是便实现了数据的访问。
本发明是基于程序调用接口OCI作为操作类访问Oracle关系数据库数据的实现方法,根据图3和图4的一实施例的根据键值读取内容的操作类方法的实现过程如下:
CData_PdiData Read(Ckey_PdiData_key)
{ ...
CData_PdiData tmpData;
String sCon=_key.toConStr();//dischgseqno=xx
String sSql=“select*from”+_key.m_tablename+”where”+
sCon;
swResult=OCIStmtPrepare(stmtp errhp,(CONST Ora Text*)
sSql.c_str(),strlen(sSQL.c_str()),OCI_NTV_SYNTAX,
OCI_DEFAULT);
swResult=OCIStmtExecute(svchp,stmtp,errhp;,
1,0,NULL,NULL,OCI_DEFAULT);
result=OCIStmtFetch(rs_handle,conn->error_handle,
fetch_count
,OCI_FETCH_NEXT,OCI_DEFAULT);
...
while(!recordset.eod())
{
tmpData.[DISCHGSEQNO]=recordset[DISCHGSEQNO];
tmpData[STEELGRADE]=recordset[STEELGRADE];
tmpData[SLABNO]=recordset[SLABNO];
tmpData[SLAB WEIGHTACT]=recordset
[SLABWEIGHTACT];
tmpData[CCCUTTIME]=recordset[CCCUTTIME];
}
retrun tmpData;
}
其中首先利用键值对象的toConStr方法结合查询要求形成需要访问的SQL语句,然后依次创建OCI环境、链接数据库建立会话、准备SQL语句绑定参数、执行、提取结果,并利用内容类的赋值和索引运算符重载实现对内容类的填充。
本发明是利用编程得来的软件工具自动生成实体类和操作类,这样就方便实现了N-层架构中实体层和数据访问层,简化编程,开发人员只需实现逻辑即可,以下是使用实例:
int main()
{
COperate_PdiData piddata(“soctt”,”tiger”,”orcl”);
Ckey_PdiData_key;
CData_PdiData_data;
_key[DISCHGSEQNO]=3001902;
if(_data=piddata.Read(Read)!=null){
_data[SLABWEIGHTACT]+=10.0;
if(piddata.Update(_key,_data)==1){
cout<<”Update success!”<<endl;}
}
...
}
本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,而并非用作为对本发明的限定,只要在本发明的实质精神范围内,对以上实施例的变化、变型都将落在本发明的权利要求书范围内。
Claims (6)
1.一种基于程序调用接口的Oracle关系数据库的数据访问方法,其特征在于,包括以下步骤:
a.根据欲访问的目标数据表的表名,在Oracle关系数据库系统表中获取该目标数据表的字段信息;
b.将所述步骤a获取的字段信息依规则映射为键值类和内容类数据,这一生成的过程是通过编程得来的软件工具自动实现的;
c.基于Oracle关系数据库的程序调用接口OCI生成所述目标数据表的操作类代码,该目标数据表的操作类代码是通过编程得来的软件工具自动实现的;
d.修改所述步骤b的内容类数据值并调用所述步骤c的操作类代码访问所述Oracle关系数据库的目标数据表的数据。
2.如权利要求1所述的数据访问方法,其特征在于,所述步骤a的字段信息包括名称、类型、数据长度及精度。
3.如权利要求1所述的数据访问方法,其特征在于,所述步骤a的Oracle关系数据库系统表包括user_tab_columns和user_constraints系统表。
4.如权利要求1所述的数据访问方法,其特征在于,所述步骤b的键值类和内容类信息包括所述目标数据表的字段信息以及赋值和索引运算符。
5.如权利要求1所述的数据访问方法,其特征在于,所述步骤c的操作类代码包括增加、删除、修改、查询、提交及回滚功能的操作类代码。
6.如权利要求1所述的数据访问方法,其特征在于,所述步骤d中,修改所述内容类数据值并调用所述操作类代码时,修改的内容类数据值同步指向Oracle关系数据库,实现数据的访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710044510A CN100589101C (zh) | 2007-08-02 | 2007-08-02 | 基于程序调用接口的Oracle关系数据库的数据访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710044510A CN100589101C (zh) | 2007-08-02 | 2007-08-02 | 基于程序调用接口的Oracle关系数据库的数据访问方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101359324A CN101359324A (zh) | 2009-02-04 |
CN100589101C true CN100589101C (zh) | 2010-02-10 |
Family
ID=40331776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710044510A Active CN100589101C (zh) | 2007-08-02 | 2007-08-02 | 基于程序调用接口的Oracle关系数据库的数据访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100589101C (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814077B (zh) * | 2009-12-04 | 2012-04-11 | 四川川大智胜软件股份有限公司 | 一种基于oci 9的数据库访问中间件 |
CN102346774B (zh) * | 2011-09-26 | 2013-09-18 | 深圳市信游天下网络科技有限公司 | 一种数据库操作方法 |
CN105354036B (zh) * | 2015-11-26 | 2019-02-01 | 深圳市金证科技股份有限公司 | 数据库操作代码生成方法及装置 |
CN106484894B (zh) * | 2016-10-20 | 2018-07-06 | 新一站保险代理股份有限公司 | 一种基于关系型数据库的多表关联数据展现方法和系统 |
CN106506661A (zh) * | 2016-11-18 | 2017-03-15 | 浪潮软件集团有限公司 | 一种动态返回数据的方法、服务端及系统 |
CN108090063A (zh) * | 2016-11-21 | 2018-05-29 | 深圳联友科技有限公司 | 一种可配置的组件数据访问方法及装置 |
CN109508183B (zh) * | 2018-10-22 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种存储集群中rest代码生成方法及装置 |
CN114528027B (zh) * | 2022-01-25 | 2024-07-09 | 深圳市优易控软件有限公司 | 一种基于pc平台的智能装备响应时间提升方法 |
-
2007
- 2007-08-02 CN CN200710044510A patent/CN100589101C/zh active Active
Non-Patent Citations (6)
Title |
---|
Oracle调用接口技术在一个应用系统工程环境中的应用. 张秀国,刘德春.Oracle调用接口技术在一个应用系统工程环境中的应用,Vol.19 No.4. 1999 |
Oracle调用接口技术在一个应用系统工程环境中的应用. 张秀国,刘德春.Oracle调用接口技术在一个应用系统工程环境中的应用,Vol.19 No.4. 1999 * |
基于OCI技术的Oracle数据库连接. 曾志聪,姚国祥.微机发展,第14卷第8期. 2004 |
基于OCI技术的Oracle数据库连接. 曾志聪,姚国祥.微机发展,第14卷第8期. 2004 * |
用OCI开发Oracle数据库的方法. 汪林林,马锐.计算机应用,第23卷第12期. 2003 |
用OCI开发Oracle数据库的方法. 汪林林,马锐.计算机应用,第23卷第12期. 2003 * |
Also Published As
Publication number | Publication date |
---|---|
CN101359324A (zh) | 2009-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100589101C (zh) | 基于程序调用接口的Oracle关系数据库的数据访问方法 | |
CN102426582B (zh) | 数据操作管理装置和数据操作管理方法 | |
CN103064875B (zh) | 一种服务化空间数据分布式查询方法 | |
US6240422B1 (en) | Object to relational database mapping infrastructure in a customer care and billing system | |
RU2400803C2 (ru) | Долговременное хранилище типов и экземпляров данных .net | |
CN104778540A (zh) | 一种建材装备制造bom管理方法及管理系统 | |
EP1457878B1 (en) | Automatic generation of an object model from a dimensional model | |
CN105373599A (zh) | 基于多种数据存储平台的数据迁移系统 | |
US20200097487A1 (en) | Novel olap pre-calculation model and modeling method | |
CN111260413A (zh) | 一种基于矢量图形的电力主网工程施工图造价速算方法 | |
CN101405728A (zh) | 具有动态加载能力的关系数据库架构 | |
CN110134681B (zh) | 数据存储与查询方法、装置、计算机设备及存储介质 | |
CN102566990A (zh) | 一种在Java应用中进行数据操作的方法及装置 | |
US6553380B2 (en) | Encapsulating form and function in user data in a relational database in order to eliminate database schema changes | |
CN101393624A (zh) | 对物料清单进行操作实现生产管理的方法及装置 | |
CN106408235A (zh) | 一种供应链系统中实现物料单位复合计量的方法 | |
CN104346441A (zh) | 一种配电网信息数据动态集成交互方法 | |
CN108804460A (zh) | 一种基于sql的查询语言 | |
CN107491454A (zh) | 数据查询方法及装置 | |
CN100573529C (zh) | 一种动态构建指标代码的方法和装置 | |
CN104731597A (zh) | 将sql语句应用于工程软件编辑平台的方法 | |
CN111984657B (zh) | 数据归集方法、装置、存储介质及计算机设备 | |
CN107622123A (zh) | 一种面向asm文件系统的文件解析方法 | |
EP1526466B1 (en) | Composite record identifier generator | |
CN102779092A (zh) | 引用检查系统和引用检查方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |