C++存取MySQL BLOB字段的问题
C++调用MySQL(版本:5.051a)的API访问数据库,我设定的字段为LongBLOB,理论上支持4G存储空间,但我在调用mysql_stmt_bind_param(stmt, bind)和mysql_stmt_execute(stmt)的时候发生LIBMYSQL.DLL崩溃的错误,0xC0000005:Access Violation。
询问正确写LongBLOG字段的代码。
我有问题的代码:这个代码只能插入长度小于13K字节的数据到数据库,超出会导致LIBMYSQL.DLL崩溃
//char *LESSTHEN16M //变量的值从文件中读取,作为参数传入,类型是Char *
stmt = mysql_stmt_init(DBhandle);
bind[1].buffer_type= MYSQL_TYPE_BLOB;
bind[1].buffer= (char *)&LESSTHEN16M;
bind[1].buffer_length = LESSTHEN16MLenth; //它的长度也一并作为参数传入
bind[1].is_null= &is_null;
bind[1].length= &LESSTHEN16MLenth;
mysql_stmt_prepare(stmt, InsertECGData, strlen(InsertECGData))
mysql_stmt_bind_param(stmt, bind) //前面都正常
mysql_stmt_execute(stmt) //但执行到这一句,DLL就崩溃
修改后的代码:可以插入长度小于1M的数据,但大于1M会导致
char LESSTHEN16M[1024000]; // 我修改了类型定义,变为字符型数组,当大小为1M以下,可以正常插入,而大于1M时,会导致NTDLL.DLL错误:Unhandled exception in trymysql.exe(NTDLL.DLL):0xc00000FD:Stack Overflow
stmt = mysql_stmt_init(DBhandle); //程序在执行到这一句发生错误,NTDLL.DLL溢出程序崩溃
bind[1].buffer_type= MYSQL_TYPE_BLOB; //下面的没有变化
bind[1].buffer= (char *)&LESSTHEN16M;
bind[1].buffer_length = LESSTHEN16MLenth;
bind[1].is_null= &is_null;
bind[1].length= &LESSTHEN16MLenth;
mysql_stmt_prepare(stmt, InsertECGData, strlen(InsertECGData))
mysql_stmt_bind_param(stmt, bind)
mysql_stmt_execute(stmt)