DataBase_IsErrorOccur = FALSE; if (NULL == mysql_init(&st_MySQL))
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_MYSQL;
return FALSE;
}
//设置连接超时
if (0 != mysql_options(&st_MySQL,MYSQL_OPT_CONNECT_TIMEOUT,(char *)&nTimeOut))
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_SETTIMEOUT;
return FALSE;
}
//连接服务器
if (NULL == mysql_real_connect(&st_MySQL,pSt_MySQLConnector->tszHostAddr,pSt_MySQLConnector->tszName,pSt_MySQLConnector->tszPassWord,pSt_MySQLConnector->tszDBName,pSt_MySQLConnector->nPort,NULL,0))
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_ISFAILED;
return FALSE;
}
//设置连接字符集,默认为utf8
if (0 != mysql_set_character_set(&st_MySQL,"utf8"))
{
//如果设置字符集不成功,则关闭连接
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_SETCHAR;
return FALSE;
}
if (0 != mysql_autocommit(&st_MySQL,0))
{
printf("数据库执行错误:%s\n",mysql_error(&st_MySQL));
return FALSE;
}
上面是链接代码,下面是插入代码,哪儿设置有问题 ,用不用批量提交都一样的效果! 怎么回事呢? DataBase_IsErrorOccur = FALSE;
pthread_mutex_lock(&st_csDatabase);
//执行SQL语句
static int i = 0;
if (0 != mysql_query(&st_MySQL,lpszSQLQuery))
{
printf("数据库执行错误:%s,内容:\n%s\n",mysql_error(&st_MySQL),lpszSQLQuery);
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_EXEC_EXECUTE;
pthread_mutex_unlock(&st_csDatabase);
return FALSE;
}
if (i >= 10000)
{
mysql_commit(&st_MySQL);
i = 0;
}
pthread_mutex_unlock(&st_csDatabase);
return TRUE;
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_MYSQL;
return FALSE;
}
//设置连接超时
if (0 != mysql_options(&st_MySQL,MYSQL_OPT_CONNECT_TIMEOUT,(char *)&nTimeOut))
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_SETTIMEOUT;
return FALSE;
}
//连接服务器
if (NULL == mysql_real_connect(&st_MySQL,pSt_MySQLConnector->tszHostAddr,pSt_MySQLConnector->tszName,pSt_MySQLConnector->tszPassWord,pSt_MySQLConnector->tszDBName,pSt_MySQLConnector->nPort,NULL,0))
{
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_ISFAILED;
return FALSE;
}
//设置连接字符集,默认为utf8
if (0 != mysql_set_character_set(&st_MySQL,"utf8"))
{
//如果设置字符集不成功,则关闭连接
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_CONNECT_SETCHAR;
return FALSE;
}
if (0 != mysql_autocommit(&st_MySQL,0))
{
printf("数据库执行错误:%s\n",mysql_error(&st_MySQL));
return FALSE;
}
上面是链接代码,下面是插入代码,哪儿设置有问题 ,用不用批量提交都一样的效果! 怎么回事呢? DataBase_IsErrorOccur = FALSE;
pthread_mutex_lock(&st_csDatabase);
//执行SQL语句
static int i = 0;
if (0 != mysql_query(&st_MySQL,lpszSQLQuery))
{
printf("数据库执行错误:%s,内容:\n%s\n",mysql_error(&st_MySQL),lpszSQLQuery);
DataBase_IsErrorOccur = TRUE;
DataBase_dwErrorCode = ERROR_HELPCOMPONENTS_DATABASE_MYSQL_EXEC_EXECUTE;
pthread_mutex_unlock(&st_csDatabase);
return FALSE;
}
if (i >= 10000)
{
mysql_commit(&st_MySQL);
i = 0;
}
pthread_mutex_unlock(&st_csDatabase);
return TRUE;
我还以为比 mysql_real_query 快的多 结果是一样的。
INSERT INTO `data_session_2013-08-09` (`probe_id`,`src_mac`,`dst_mac`,`src_ip`,`dst_ip`,`src_name`,`dst_name`,`dst_equip_type`,`dst_app_id`,`ip_version`,`ip_tunnel`,`src_port`,`dst_port`,`proto_type`,`proto_sub_type`,`operation`,`log_type`,`log_level`,`opstatus`,`rule_id`,`group_id`,`rulekeyword`,`src_accounts`,`password`,`log_time`,`url`,`str_time`) VALUES('00110A63D088','94DE805033EA','001C54096111','192.168.16.240','183.60.3.126','233','183.60.3.126','0','0','0','0','39957','80','5','508','1','0','1','1','','','','5555555','','1375411294','web2.qq.com','2013-8-2 10:41:34')