- 论坛徽章:
- 0
|
UNIX下的线程与ORACLE数据库的连接问题,在线等待!!
我有用 context 但是不行,我是在UNIXWARE 上编译的,我将代码贴上,请帮忙看一看,怎样才能实现。谢谢。。。
#include <string.h>;
#include <pthread.h>;
#include <stdio.h>;
#include <unistd.h>;
#include <stdlib.h>;
#include <errno.h>;
#include <sys/errno.h>;
#include <math.h>;
#include <time.h>;
#include <varargs.h>;
#include <sys/time.h>;
#include <sqlda.h>;
#include <sqlcpr.h>;
#include <sqlca.h>;
#include <oraca.h>;
EXEC SQL BEGIN DECLARE SECTION;
sql_context envtext;
EXEC SQL END DECLARE SECTION;
/* 连接ORACLE数据库*/
int connectoracle()
{
EXEC SQL BEGIN DECLARE SECTION;
char userid[40];
char passid[40];
int intfilename=0;
EXEC SQL END DECLARE SECTION;
strcpy(userid , "datalook"
strcpy(passid , "datalook"
EXEC SQL CONNECT :userid IDENTIFIED BY :passid;
EXEC SQL CONTEXT ALLOCATE :envtext;
EXEC SQL CONTEXT USE :envtext;
if(sqlca.sqlcode!=0)
{
printf("连接失败 sqlcode=[%d]\n",sqlca.sqlcode);
return(-1);
}
printf("Oracle Connect Sucess!!!\n"
EXEC SQL SELECT FILENAME
INTO :intfilename FROM SYS_TMP;
printf("sqlca.sqlcode =[%d]\n",sqlca.sqlcode);
printf("intfilename =[%d]\n",intfilename);
return(0);
}
void FreeConText()
{
EXEC SQL CONTEXT FREE :envtext;
}
/* Set specify thread stack size */
int SetThreadStackSize(pthread_attr_t *Attr_t,int stacksize)
{
pthread_attr_t thread_attr;
size_t stack_size;
int retcode=0;
retcode=pthread_attr_init(&thread_attr);
if(retcode)
{
printf("pthread_attr_init\n"
return(retcode);
}
retcode=pthread_attr_getstacksize(&thread_attr,&stack_size);
if(retcode)
{
printf("pthread_attr_getstacksize\n"
return(retcode);
}
retcode=pthread_attr_setstacksize(&thread_attr,stack_size*100);
if(retcode)
{
printf("pthread_attr_setstacksize\n"
return(retcode);
}
memcpy((char *)Attr_t,(char *)&thread_attr,sizeof(pthread_attr_t));
return(0);
}
void *firstthread(void *param)
{
int retcode=0;
pthread_t conid;
int memlen=0;
pthread_attr_t attr_val;
retcode= connectoracle();
FreeConText();
printf("firstthread is over..!!!\n"
return(0);
}
int main()
{
int retcode=0;
pthread_t conid;
int memlen=0;
pthread_attr_t attr_val;
memlen=100*16000;
SetThreadStackSize(&attr_val,memlen);
retcode=pthread_create(&conid,&attr_val,firstthread,(void *)NULL);
if(retcode)
{
printf("create ConSumeThread is error [%d]\n",retcode);
perror("error"
return(-1);
}
retcode=pthread_join(conid,NULL);
if(retcode)
{
printf("pthread_join is error [%d]\n",retcode);
perror("error"
return(-1);
}
printf("主线程退出!!!\n"
return(0);
} |
|