📄 threads.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 + -