批量数据入库
由XGCIExecDirectBatch()和XGCIBindParamArrayByPos()函数的组合使用实现。
...
int i,j;
int field_num =6;
int param_num =6;
int array_num=10;//
int ret;
//c1 bool ,c2 tinyint, c3 smallint , c4 bigint, c5 float ,c6 binary
char * sql="insert into t_bindarray_2(C1,C2,C3,C4,C5,C6) values(?,?,?,?,?,?)";
int ** rp =(int**)malloc(field_num*sizeof(int*));
int ** a_clen =(int**)malloc(field_num*sizeof(int*));
int sqltype[6]={0};
int ctypes[6]={0};
void** ptr_data =(void**)malloc(field_num*sizeof(void*));
int clen[6]={0};
ptr_data[0]= malloc(field_num*sizeof(bool));
a_clen[0]= (int*)malloc(sizeof(int)*array_num);
for( i=0;i<array_num;i++)
{
if(i%2==0)
((bool*) ptr_data[0])[i]= true;
else
((bool*) ptr_data[0])[i]= false;
a_clen[0][i] = sizeof(bool);
}
clen[0]=2;
ctypes[0]=Xugu_C_BOOL ;
sqltype[0]=SQL_BOOL ;
a_clen[1]= (int*)malloc(sizeof(int)*array_num);
ptr_data[1]= malloc(array_num*sizeof(char));
for( i=0;i<array_num;i++)
{
((char*) ptr_data[1])[i]=i+35;
a_clen[1][i] = 1;
}
clen[1]=1;
ctypes[1]=Xugu_C_TINYINT ;
sqltype[1]=SQL_TINYINT ;
a_clen[2]= (int*)malloc(sizeof(int)*array_num);
ptr_data[2]= malloc(array_num*sizeof(short));
for( i=0;i<array_num;i++)
{
((short*) ptr_data[2])[i]=i+2001;
a_clen[2][i] = 2;
}
clen[2]=2;
ctypes[2]=Xugu_C_SHORT ;
sqltype[2]=SQL_SMALLINT ;
a_clen[3]= (int*)malloc(sizeof(int)*array_num);
ptr_data[3]= malloc(array_num*sizeof(int64));
for( i=0;i<array_num;i++)
{
((int64*) ptr_data[3])[i]=35+i+9988822000000;
a_clen[3][i] = 8;
}
clen[3]=8;
ctypes[3]=Xugu_C_BIGINT ;
sqltype[3]=SQL_BIGINT ;
a_clen[4]= (int*)malloc(sizeof(int)*array_num);
ptr_data[4]= malloc(array_num*sizeof(float));
for( i=0;i<array_num;i++)
{
((float*) ptr_data[4])[i]= i+23823.222 ;
a_clen[4][i] = 4;
}
clen[4]=4;
ctypes[4]=Xugu_C_FLOAT ;
sqltype[4]=SQL_FLOAT ;
ptr_data[5]= malloc(array_num*sizeof(char*));
a_clen[5]= (int*)malloc(sizeof(int)*array_num);
char * path =PATH_BBINARY ;
FILE* fp= fopen(path,"rb");
for( i=0;i<array_num;i++)
{
((char**)ptr_data[5])[i]=(char*)malloc(200+10*i);
int len = fread(((char**)ptr_data[5])[i] ,1,200+10*i,fp);
a_clen[5][i] = len;
}
clen[5]=300;
ctypes[5]=Xugu_C_BINARY ;
sqltype[5]=SQL_BINARY ;
for (j=0;j<field_num;j++)
{
rp[j] = (int*)malloc(sizeof(int)*array_num);
ret= XuguCIBindParamArrayByPos(connp->hdstmt,j+1,param_num,PARAM_IN,array_num,ptr_data[j],clen[j],ctypes[j],rp[j],a_clen[j],sqltype[j]);
if(ret<0)
{
printf("bind column NO %d error \n",j);
}
}
int a_len =strlen(sql);
ret= XuguCIExecDirectBatch(connp->hdstmt,sql,a_len);
if (ret<0)
{
print_error(connp,ret,sql);
return -1;
}
...
详见:demo1里面的 BulkInsert()函数