OO4O随笔
总结:
OO4O 可以比较方便的用于 数据查询, 数据修改, 存储到XML文件(修改TAG最好通过文本)。
多线程不确定性。
不支持数据插入!
数据库无非两种东西: 数据和属性,操作数据和属性的方法。
OO4O特点:
1. 系统要求Windows XP, Windows 2000, or Windows Server 2003。
2. 不提供插入数据接口..可以读数据,更新数据。
准备工作: 1. Getting Started 引入相关.h .lib .dll。 2. OStartup();OShutdown();
oo4o对象列表:Classes
oo4o方法列表:Methods 注: 用起来没有直接看每个对象有哪个Operations方便。对象列表 只是对每个对象里的Operations的一个罗列。
架构图
手画的,没时间腾上来。如果有需要的反应一下。
OAdvise ,OAQ, OAQAgent, OAQMsg: oracle10g没介绍,在8i中。
oracleAPI对原始类型只支持:int,long,double,char. 还有他自己的类型:
OObject , OBfile ,OBlob ,OClob :oracle的数据类型
ORef :oracle指针
OCollection : 对象集合。类似数组,但是可以装对象。
OClient,OSession ,ODatabase,ODynaset ,OField,包含顺序。
OSession : 对ODatabase的操作进行 事务 控制。 ODatabase的多个 修改类型 语句,可以通过OSession进行原子控制。
OConnection : ODatabase,ODynaset,OConnectionCollection来GetConnectString, GetDatabaseName,GetSession
OBinder , OBound :写界面交互操作时绑定数据集。用不上没细看。
OParamArray , OParameter ,OParameterCollection : 执行SQL语句时,传参用。
OParameterCollection: 保存着实际使用的参数集合。
1. Operations包含了所有可用类型,类似operator const char *, 意思就是const char *可以当作变量类型。
2. 可以指向OParameterCollection中的 单个变量
OParamArray:可以指向 OParameterCollection 中的 数组变量。
例子:
1. 数据库连接,查询 的例子:A Simple Example
注意: 连接时以 数据库全局变量名+用户名+密码链接。
2. 数据库属性,字段属性获取 的例子: Example: Displaying Attributes of an OMetaData Object
3. 往SQL语句里传参数 的例子:OParameter ,OParamArray , ExecuteSQL
注意: 目前我测试,select * from A where name = B; A不能用参数传递, B可以。 其他位置不知。
非主线例子:
1. 获取另一个数据库连接:Close
小结
会操作数据和属性了, 数据库的操作就掌握了。
只要大概浏览一遍Classes, 就能基本掌握oo4o了。
疑问:
1. OPARAMETER_INVAR 这些,什么叫输入,输出变量?
调试碰到的问题:
1. setXMLRowTag在某个新建的单线程中起作用,,
糟糕的:XML函数,多线程
XML函数: 只有直接在main下用可以,其他情况下失灵,但也有少数情况有效。
9i以后oo4o增加了XML函数。
情况1
main()
{
...
odyn.SetXMLRowsetTag("One");
odyn.SetXMLRowTag("Two");
odyn.GetXMLToFile("abc.txt", 0, 2);
..
}
可以。
SaveXML()
{
...
odyn.SetXMLRowsetTag("One");
odyn.SetXMLRowTag("Two");
odyn.GetXMLToFile("abc.txt", 0, 2);
..
}
main()
{
SaveXML();
}
失效。 第一级的One修改了,第二级的Two总为空。
各种尝试都不成。
分析:这么简单的改变都出问题,只可能:
1. 我少引用东西了,可是既然能成功,说明应该没少引用东西。
2. 提供函数本身有漏洞,严重的漏洞。
多线程:无法在多线程下使用oracle.h的函数,会在线程退出时报“堆错误,或DLL有bug”
网查原因:1.调整vs的多线程选项, 实践失败 2. dll与exe要在各自空间申请释放变量,不能有交集. 实践但是oracle.h是封装好的,我在单线程也没申请其他变量,,,所以不是这个错误。
分析:
1. 我少引用东西了,少装东西了。
2. 提供的oraclm32.lib库本身有问题。(oraclm32.dll用不用效果一样)
浙公网安备 33010602011771号