我在用vc写程序,写随机数插入数据如下:
for (int i=0;i<20;i++)
{
srand((unsigned)time(NULL)); /*设置种子,并生成伪随机序列*/ for( int zhang1_times=0;zhang1_times<10000;zhang1_times++)
{
unsigned int x ,MAX = 30000;
x = rand() % MAX; // 产生[0,MAX)
unsigned long id =dizi + x ;//随机产生
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) {
}
m_res = mysql_store_result(&mysql);
int num_aa= mysql_num_rows(m_res);
if (num_aa==1)
{
m_row = mysql_fetch_row(m_res) ;
int type1 = atoi(m_row[6]);
if (type1==0)
{
sprintf(szsql,"update map_compar set type='7' where id='%d' ", id);
mysql_query(&mysql,szsql);
}else{
zhang1_times = zhang1_times-1;
}
}else{
zhang1_times= zhang1_times-1;
}
}
dizi+=30000;
}会出现错误: 0x10007e54 指令引用的0x00000000内存。该内存不能为读,请教这是为什么?我想插入20w,只插入了6w左右就这样了!
for (int i=0;i<20;i++)
{
srand((unsigned)time(NULL)); /*设置种子,并生成伪随机序列*/ for( int zhang1_times=0;zhang1_times<10000;zhang1_times++)
{
unsigned int x ,MAX = 30000;
x = rand() % MAX; // 产生[0,MAX)
unsigned long id =dizi + x ;//随机产生
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) {
}
m_res = mysql_store_result(&mysql);
int num_aa= mysql_num_rows(m_res);
if (num_aa==1)
{
m_row = mysql_fetch_row(m_res) ;
int type1 = atoi(m_row[6]);
if (type1==0)
{
sprintf(szsql,"update map_compar set type='7' where id='%d' ", id);
mysql_query(&mysql,szsql);
}else{
zhang1_times = zhang1_times-1;
}
}else{
zhang1_times= zhang1_times-1;
}
}
dizi+=30000;
}会出现错误: 0x10007e54 指令引用的0x00000000内存。该内存不能为读,请教这是为什么?我想插入20w,只插入了6w左右就这样了!
解决方案 »
- 菜鸟的mysql更新语句问题
- 求解?在win7 64位的cmd中访问mysqldump命令出现“拒绝访问”?
- VFP的DBC數據庫如何導入到MYSQL
- mysql如何写一段sql块,往表插入10000条测试记录?
- mysql 表死锁
- 关于MYSQL数据库事务处理的问题,大家来讨论下
- MySql有静态库吗?
- 用delete,如果匹配条件是对两个表,怎么办呢?(谢谢)
- mysql 预处理无法正常查询??
- mysql 是部署有master-slave、双master、cluster模式,请问哪一种模式比较好?
- Copying to tmp table 时间很慢,调整了tmp_table_size也没用
- mysql 触发器
有一个很严重的错误,在update这前,应该先把前一个select出来的m_res给close掉,不释放这块内存,有隐患的。再试一下吧。
建议下次帖帖子,把代码好好整理一下吧,可读性不是很好。
0x00000000内存,该内存不能为读!
char szsql[2048];
MYSQL_RES *m_res = NULL;
MYSQL_ROW m_row = NULL;
unsigned long dizi=0;
for (int i=0;i<20;i++)
{
srand((unsigned)time(NULL)); /*设置种子,并生成伪随机序列*/ for( int zhang1_times=0;zhang1_times<10000;zhang1_times++)
{
unsigned int x ,MAX = 30000;
x = rand() % MAX; // 产生[0,MAX)
unsigned long id =dizi + x ;//随机产生
//dizi 是一个递增的数值,用来产生不同阶段的随机值
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) {
}
m_res = mysql_store_result(&mysql);
int num_aa= mysql_num_rows(m_res);
mysql_free_result(m_res);
if (num_aa==1)//判断此处id是否存在
{
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) {
}
m_res = mysql_store_result(&mysql);
m_row = mysql_fetch_row(m_res) ;
mysql_free_result(m_res);
int type1 = atoi(m_row[6]);
if (type1==0)//判断是否已经写了
{
sprintf(szsql,"update map_compar set type='7' where id='%d' ", id);
mysql_query(&mysql,szsql);
}else{//写了回退一下,继续随机
zhang1_times = zhang1_times-1;
}
}else{
zhang1_times= zhang1_times-1;
}
}
dizi+=30000;
}
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
这个SQL查询为何要执行两遍?
即算有判断条件:if (num_aa==1)//判断此处id是否存在
也只需要执行一遍查询,一样可以取出各列的值的。
再改改吧。
这样的代码,说实话,真的要下功夫改改了。