- 论坛徽章:
- 0
|
我的代码如下:
context_db我定义了一个全局变量,用于deal_db_thread()第一个线程操作数据库的上下文,然后我将这个上下文传递给该线程内部下边所有操作数据库的函数(其实我认为不必要设为全局变量,但是如果不是全局变量,就更出错),执行完后执行free上下文,另一个线程的操作还没有做,执行的时候连接数据库没有错,但是执行update_traff函数,调用存储过程出错(该存储过程在没有用上下文时测试没有问题)
- sql_context context_db;
- main()
- {
- if (pthread_create(&db_deal,NULL,deal_db_thread,NULL))
- {
- write_log("main","not enough system resources to create a process and exit\n");
- exit(1);
- }
- if (pthread_create(&cs_2m,NULL,cs_thread,(void *)&arg))
- {
- write_log("main","not enough system resources to create a process and exit\n");
- exit(1);
- }
- }
- void * deal_db_thread(void * arg)
- {
- char code[20];
- int flag=1;
- char time_str[20];
-
- code="derfgu";
- time_str="ybuihuimk";
-
- db_start(context_db);
-
- update_traff(code,flag,time_str,context_db);
- db_end(context_db);
- }
- int db_start(sql_context context)
- {
- struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */
-
- /* 以下SQL语句的执行顺序不能更改 */
- EXEC SQL ENABLE THREADS;
- EXEC SQL CONTEXT ALLOCATE :context;
- EXEC SQL CONTEXT USE :context;
-
- if (init_db(context)!=0)
- {
- db_end(context);
- exit(0);
- }
- return 0;
- }
- int db_end(sql_context context)
- {
- EXEC SQL COMMIT WORK RELEASE;
- if( sqlca.sqlcode < 0 )
- {
- write_log("db","断开数据库连接失败!%d:%s\n", sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc );
- return -1;
- }
- EXEC SQL CONTEXT FREE :context;
- return 0;
- }
- int init_db(sql_context context)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- VARCHAR username[20];
- VARCHAR password[20];
- VARCHAR db_name[20];
- EXEC SQL END DECLARE SECTION;
-
- struct sqlca sqlca;
- EXEC SQL CONTEXT USE :context;
-
- strcpy((char *)username.arr,"test");
- username.len=strlen((char *)username.arr);
- strcpy((char *)password.arr,"test");
- password.len=strlen((char *)password.arr);
- strcpy((char *)db_name.arr,"test");
- db_name.len=strlen((char *)db_name.arr);
-
- EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_name;
- write_log("db","sqlca.sqlcode=%d",sqlca.sqlcode);
- return sqlca.sqlcode;
- }
- void update_traff(char * code,int flag,char * time_str,sql_context context)
- {
- EXEC SQL BEGIN DECLARE SECTION;
- char up_str[20],code1[20];
- int flag1;
- EXEC SQL END DECLARE SECTION;
-
- struct sqlca sqlca;
- EXEC SQL CONTEXT USE :context;
-
- memset(up_str,0,sizeof(up_time_str));
- memset(code1,0,sizeof(code1));
- memcpy(up_str,time_str,sizeof(up_str));
- memcpy(code1,code,sizeof(code));
- flag1=flag;
-
-
-
- EXEC SQL CALL UPDATE_TRAFF(:code1,:flag1,:up_str);
- write_log("db","sqlca.sqlcode=%d",sqlca.sqlcode);
- return ;
- }
复制代码
请大家帮忙看看,为什么会出2134这个错误呢 |
|