选择显示字体大小

oracle应用linux开发c

随着linux操作系统的不断完善与发展,出现了大量基于 linux平台的应用开发,原有的基于unix平台的商业软件也不断被移植到linux上来。最典型的,oracle公司宣布,他的现有的及未来所有的数据库产品和商业应用都将支持linux平台。本文所述oci for linux的c语言库,正是linux平台上oracle的c语言接口。
我们知道,在一个复杂的oracle数据库应用中,c程序代码由于其语言本身的灵活性、高效性,往往被加入到其商务逻辑的核心层模块中。oracle数据库对c语言的接口就是oci(oracle common interface) c-library,该库是一个功能十分强大的数据库操作模块。它支持事务处理,单事务中的多连接多数据源操作,支持数据的对象访问、存储过程的调用等一系列高级应用,并对oracle下的多种附加产品提供接口。但是我们发现,为了使oci库在多种平台上保持统一的风格并考虑向下兼容性,oracle对大量的c语言类型和代码进行了重新封装,这使得oci库初看上去显得纷繁复杂,初用者不知从何下手。由kai poitschke开发的libsqlora8库初步解决了这一问题,它使得在linuxoracle的非高端c语言开发变得比较方便易用。
libsqlora8 for *nix是gnu/linux组织开发的针对oracle8 oci library的易用性c语言封装。它将大量的oci数据类型表现为通用c语言数据类型,将oci函数按类型重新分类封装,大大减少了函数的调用步骤和程序代码量。libsqlora8还有许多引人注目的特性:
易于使用的动态sql特性;
同一连接中具有不同变量绑定的游标的重复打开;
相同事务中的多数据库连接;
oracle数据库应用开发中的build-in trace功能;
正确处理数据插入操作中的数组变量问题;
多平台支持oracle 8.0.4(hp-ux 9), oracle 8.05(gnu/linux), oracle 8.1.6(gnu/linux)等;
可以作为静态或动态形式链接进入应用程序。
下面我们分步骤详细阐述如何在linux平台上利用libsqlora8函数库开发oracle数据库应用。
1.安装linux操作系统,并对新系统进行适当的系统配置。在本例中我们选用redhat linux 6.2操作系统。在为系统分区时,我们为oracle数据库专门分出两个分区:/u01,/u02,作为oracle数据库的系统软件和数据库文件的安装点。安装好系统后,我们为系统增添两个新组:oinstall和dba,并创建一个新用户oracle,他拥有整个数据库系统软件。这里就不详细说明了。
2.下面我们应该安装oracle数据库了,这次我们选用oracle 8.1.6版本,该版数据库对国际化有很好的支持。在安装数据库之前,我们要先对oracle用户进行一些设置。主要是在该用户的启动脚本中,加入一些必要的环境变量,在本例中可以如下设置:
oracle_base=/u01/app/oracle
oracle_home=$oracle_base/product/8.1.6
oracle_sid=oratest
path=$oracle_home/bin:/usr/bin:/etc:/bin:/usr/local/bin:/usr/x11r6/bin
ld_library_path=$oracle_home/lib
export oracle_base oracle_home oracle_sid path
3.oracle 8.1.6的数据库安装是比较简单的,我们选择缺省安装,在系统的提示下逐一完成安装过程。注意,oracle8i对系统的要求是比较高的,特别是内存,在一些特殊应用中,要修改系统的缺省设置以提高数据库性能。有关数据库调优的讨论与本文无关,在此就不再详细介绍了。启动数据库,好了,现在我们可以用sqlplus登录数据库,可以看到,缺省安装的oracle数据库有一类ocitest数据库表,就使用这些表作为我们例子中的缺省表。
4.安装libsqlora8库函数。该库函数当前版本为libsqlora8-2.1.5,可从许多linux网站上得到,也可从http://www.china-linux.org上下载libsqlora8-2.1.5.tar.gz源程序包。按以下步骤安装:
$>tar -xzvf libsqlora8-2.1.5.tar.gz
$>cd libsqlora8-2.1.5
$>ld_library_path=$oracle_home/lib
$>export ld_library_path
$>./configure
$>make
$>make install
对于要使用oracle build-in trace功能的开发者,还要将以下环境变量设置好,sqlora_trace_level,solora_trace_file,sqlora_arraysize,当然,oracle_sid是一定要设好的。
5.下面,我们介绍一下libsqlora8的主要函数。
1)int sqlo_init(int threaded_mode) 初始化程序库接口,读出环境变量,设置相应的全局变量。当前,threaded_mode设为0。
2)int sqlo_connect(int * dbh, char * connect_str) 连接数据库,dbh为数据库连接描述符,connect_str为用户名/口令字符串。
3)int sqlo_finish(int dbh) 断开数据库连接。
4)int sqlo_open(int dbh, char * stmt, int argc, char *argv[]) 打开由stmt确定的查询语句所返回的游标。argc,argv为查询的参数,后面我们将用更清晰的方法传递参数。
5)int sqlo_close(int sth) 关闭由上一个函数打开的游标。
6)int sqlo_fetch(int sth) 从打开的游标中获取一条记录,并将之存入一个已分配内存空间中。
7)const char **sqlo_values(int sth, int *numbalues, int dostrip) 从内存中返回上一次sqlo_fetch取得的值,是以字符串形式返回的。
8)以下介绍另一种检索方式,int sqlo_prepare(int dbh, char const *stmt),返回一个打开的游标sth。
9)int sqlo_bind_by_name(int sth, const char * param_name, int param_type, const void * param_addr, unsigned int param_size, short * ind_arr, int is_array) 将查询语句的传入参数,按照名字的形式与函数中的变量绑定。如果你使用数组,那么参数param_addr和ind_arr必须指向该数组。
int sqlo_bind_by_pos(int sth, int param_pos, int param_type, const void * param_addr, unsigned int param_size, short * ind_arr, int is_array) 将查询语句的传出值,按照位置顺序与函数中的变量绑定。
10)int sqlo_execute(int sth, int iterations) 执行查询语句。“iterations”可设为“1”。
11)在执行完数据库操作后,我们可用int sqlo_commit (int dbh)提交操作,或用int sqlo_rollback(int dbh)回滚操作。
12)libsqlora8还有其他一些操作函数,这里就不一一列出了。
下面举几个例子说明这些函数如何使用。
cstr = "ocitest/ocitest"; //用户名/口令
status = sqlo_init(0);
if (sqlo_success != status)
{ printf ("sql_init failed. exiting\n");
exit(1);
}
status = sqlo_connect(&dbh, cstr); // int dbh
以上源代码,显示了如何连接数据库
/* select all and display */
char *select_stmt="select cname, clength, colid from ocicolu";
if (0>(sd = sqlo_open(dbh, select_stmt, 0, null)))
{ printf("sqlo_open failed: %s\n", sqlo_geterror(dbh));
return 0;
}
while (0 == sqlo_fetch(sd,1))
{ v = sqlo_values(sd, null, 1);
printf("result: %s\n",v);
}
if (0 > sqlo_close(sd))
{ printf("sqlo_open failed: %s\n", sqlo_geterror(dbh));
return 0;
}
以上例子展示了第一种查询方法,显然,这种方法较简单,但不够灵活。
char *update_stmt =
"update ocitest.upload_log set upload_fresh = '0' where log_name = :1";
if (0 <= (sth = sqlo_prepare(dbh, update_stmt)))
{ if (sqlo_success !=
(sqlo_bind_by_name(sth, ":1", sqlot_str, packet_name, 64, null, 0)
))
{ printf("sqlo_bind_param failed failed: %s\n", sqlo_geterror(dbh) );
return 0;
}
}
if (sqlo_success != sqlo_execute(sth, 1))
{ printf("sqlo_execute failed: %s\n", sqlo_geterror(dbh) );
return 0;
}
上面的代码显示了如何通过名字绑定变量,“:1”在oracle sql语句中表示为一个变量(名字随意),在sqlo_bind_by_name函数中与packet_name变量绑定。在变量绑定完毕后,就可以调用sqlo_execute函数来执行这个sql语句。
好了,我们已经向大家介绍了libsqlora8的基本使用方法,如果希望了解更多内容,libsqlora8的程序包中带有详细的说明和例子,大家不妨自己钻研一下。有什么心得,欢迎和我联系。e-mail:nick_chen@yeah.net   


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons