- 论坛徽章:
- 0
|
下面的例子运行在Red Hat9和Oracle9上。程序目的是用两个线程同时往一个表里插10000条记录,每个线程都拥有自己的运行时上下文。
- #include<stdio.h>
- #include<unistd.h>
- #include<pthread.h> /* Linux线程库头文件 */
- #include "sqlca.h" /* Oracle头文件 */
- #define SQLCODE sqlca.sqlcode
- static int insert_data( sql_context );
- static int start();
- int
- main()
- {
- pthread_t tid1, tid2;
- /* 创建两个线程 */
- if( pthread_create( &tid1,NULL,(void *)start,NULL ) ){
- printf( "创建线程失败!\n" );
- exit(1);
- }
- if( pthread_create( &tid2,NULL,(void *)start,NULL ) ){
- printf( "创建线程失败!\n" );
- exit(1);
- }
- /* 等待线程退出 */
- if( pthread_join( tid1,NULL ) ){
- printf( "等待线程结束失败!\n" );
- exit(1);
- }
- if( pthread_join( tid2,NULL ) ){
- printf( "等待线程结束失败!\n" );
- exit(1);
- }
- exit(0);
- }
- int
- start()
- {
- sql_context context;
- struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */
- char uid[] = "dev/888888";
- /* 以下SQL语句的执行顺序不能更改 */
- EXEC SQL ENABLE THREADS;
- EXEC SQL CONTEXT ALLOCATE :context;
- EXEC SQL CONTEXT USE :context;
- EXEC SQL CONNECT :uid;
- if( SQLCODE < 0 ){
- printf( "创建数据库连接失败,%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc);
- return -1;
- }insert_data( context );
- EXEC SQL COMMIT WORK RELEASE;
- if( SQLCODE < 0 ){
- printf( "断开数据库连接失败!%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc );
- return -1;
- }
- EXEC SQL CONTEXT FREE :context;
- return 0;
- }
- static int
- insert_data( context )
- sql_context context;
- {
- struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */
- char name[11];
- int age;
- int i;
- strcpy( name, "test" );
- age = 20;
- EXEC SQL CONTEXT USE :context; /* 指定执行SQL语句的上下文 */
- for( i=0; i<10000; i++ ){
- EXEC SQL INSERT INTO table1 VALUES ( :name, :age );
- if( SQLCODE < 0 ){
- printf( "插入纪录失败!%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc );
- return -1;
- }
- }
- return 0;
- }
复制代码
帮忙解释一下,高手们,我对“上下文context”的意思还是不太了解 |
|