⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threads.cpp

📁 linux 多线程 proc*c的oracle接口
💻 CPP
字号:

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[11];
};
static const struct sqlcxp sqlfpn =
{
    10,
    "threads.pc"
};


static unsigned int sqlctx = 80595;
 
 int start1() ;
int GetUserPassWord(int nCC_ID, char* pPassWord,sql_context context) ;
static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
              int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[4];
   unsigned int   sqhstl[4];
            int   sqhsts[4];
            void  *sqindv[4];
            int   sqinds[4];
   unsigned int   sqharm[4];
   unsigned int   *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {12,4};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(char *, int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4138,852,0,0,
5,0,0,0,0,0,60,60,0,0,0,0,0,1,0,
20,0,0,0,0,0,58,61,0,0,1,1,0,1,0,3,109,0,0,
39,0,0,1,0,0,27,64,0,0,4,4,0,1,0,1,97,0,0,1,10,0,0,1,10,0,0,1,10,0,0,
70,0,0,2,0,0,30,72,0,0,0,0,0,1,0,
85,0,0,0,0,0,59,80,0,0,1,1,0,1,0,3,109,0,0,
104,0,0,3,36,0,3,102,0,0,2,2,0,1,0,1,97,0,0,1,3,0,0,
};


#include "stdio.h"  
#include "unistd.h"
#include "string.h"  
#include<pthread.h> /* Linux线程库头文件 */  
#include "sqlca.h" /* Oracle头文件 */  
#include <iostream>
#include <time.h>    
using namespace std;

#define SQLCODE sqlca.sqlcode  

static int insert_data( sql_context );  
static int select_data( sql_context );  
static int delete_data( sql_context context ) ;
static int start();  

int main(void)
{  	
	pthread_t tid1, tid2,tid3;  


	if( pthread_create( &tid1,NULL,(void *(*)(void *))start,NULL ) )
	{  
		printf( "创建线程失败!\n" );  
		return -1;  
	}  
#if 0
	if( pthread_create( &tid2,NULL,(void *(*)(void *))start,NULL ) )
	{
		printf( "创建线程失败!\n" );  
		return -1;   
	}  
       	if( pthread_create( &tid3,NULL,(void *(*)(void *))start,NULL ) )
	{
		printf( "创建线程失败!\n" );  
		return -1;   
	}  
#endif
	if( pthread_join( tid1,NULL ) )
	{
		printf( "等待线程结束失败!\n" );  
		return -1;  
	}  

	if( pthread_join( tid2,NULL ) )
	{
		printf( "等待线程结束失败!\n" );  
		return -1;   
	}  
	
	if( pthread_join( tid3,NULL ) )
	{
		printf( "等待线程结束失败!\n" );  
		return -1;   
	}  
		return 0;  
}  


 
 int start1() 
 {
	return 0;
 }
  
  int GetUserPassWord1(int nCC_ID, char* pPassWord,sql_context context) 
  {
	return 0;
  }


  
 int start() 
{  

		/* 以下SQL语句的执行顺序不能更改 */  
		
		/* EXEC SQL BEGIN DECLARE SECTION; */ 

		
		sql_context context;  
		struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */  
		char uid[] = "pm/mingshe@orcl";  
		
		/* EXEC SQL END DECLARE SECTION; */ 

		
		/* EXEC SQL ENABLE THREADS; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 0;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}

  
		/* EXEC SQL CONTEXT ALLOCATE :context; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )20;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&context;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(void *);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}

  
		/* EXEC SQL CONTEXT USE :context; */ 
  

		/* EXEC SQL CONNECT :uid; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )10;
  sqlstm.offset = (unsigned int  )39;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)uid;
  sqlstm.sqhstl[0] = (unsigned int  )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlstm.sqlcmax = (unsigned int )100;
  sqlstm.sqlcmin = (unsigned int )2;
  sqlstm.sqlcincr = (unsigned int )1;
  sqlstm.sqlctimeout = (unsigned int )0;
  sqlstm.sqlcnowait = (unsigned int )0;
  sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}
	
  
	if( SQLCODE < 0 )
	{  
		printf( "创建数据库连接失败,%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc);  
		return -1;  
	}
	time_t BeginTime,EndTime;
	
	int nCC_ID =12345;
	char pPassWord[10]={0};
	int i;
	int j ;
	//BeginTime = time((time_t*)0);
	//delete_data(  context ) ;
	//EndTime = time((time_t*)0);
	//printf("total time = %d context =%d \r\n",(EndTime - BeginTime),(int)context);

	for( i=0; i<10; i++ )
	{
		BeginTime = time((time_t*)0);
		for(j= 0;j<10000;j++ )
		{	
			insert_data( context );	
			
		} 
		
		printf("j= %d\r\n",j);
		j= 0;
		EndTime = time((time_t*)0);
		printf("j= %d\r\n",j);
		printf("total time = %d context =%d \r\n",(EndTime - BeginTime),(int)context);
	}
	/* EXEC SQL COMMIT WORK RELEASE; */ 

		

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )70;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}

  

		if( SQLCODE < 0 )
		{  
			printf( "断开数据库连接失败!%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc );  
			return -1;  
		}
		
		/* EXEC SQL CONTEXT FREE :context; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )85;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)&context;
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(void *);
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}

 
		return 0;  
}  


static int insert_data( sql_context context )  
{  
	struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */  
	
	int i;  
	
	/* EXEC SQL BEGIN DECLARE SECTION; */ 
	
	char name[11];  
	int age;  	
	/* EXEC SQL END DECLARE SECTION; */ 

	
	strcpy( name, "chenqy" );  
	age = 20;  
//EXEC SQL SELECT * FROM table1 VALUES (:name,:age);
	/* EXEC SQL CONTEXT USE :context; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "insert into TABLE1  values (:b0,:b1)";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )104;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (         void  *)name;
  sqlstm.sqhstl[0] = (unsigned int  )11;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         void  *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned int  )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (         void  *)&age;
  sqlstm.sqhstl[1] = (unsigned int  )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         void  *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned int  )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}


	if( SQLCODE < 0 )
	{
		printf( "插入纪录失败!%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc );  
		return -1;  
	}  
	/* EXEC SQL   COMMIT WORK ; */ 

{
  struct sqlexd sqlstm;
  sqlstm.sqlvsn = 12;
  sqlstm.arrsiz = 4;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )127;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)256;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}
	return 0;  
} 


static int insert_data1( sql_context context )  
{  


	return 0;  
} 

static int select_data( sql_context context )  
{
	return 0;
}

int GetUserPassWord(int nCC_ID, char* pPassWord,sql_context context) 
{
	return 0;
}



static int delete_data( sql_context context )  
{  
	struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */  
			
	/* EXEC SQL CONTEXT USE :context; */ 
 /* 指定执行SQL语句的上下文 */  
	/* EXEC SQL DELETE FROM TABLE1; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 12;
 sqlstm.arrsiz = 4;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "delete from TABLE1 ";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )188;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}

if( SQLCODE < 0 )
{
	printf( "插入纪录失败!%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc );  
	return -1;  
}  
/* EXEC SQL   COMMIT WORK ; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 12;
 sqlstm.arrsiz = 4;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )203;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlcxt(&context, &sqlctx, &sqlstm, &sqlfpn);
}

   
	return 0;  
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -