我目前正在使用C ++直接写入mySQL数据库,该程序将在数据库中编写前151个项目,但是一旦到达数字152,它就无法连接到数据库并抛出这个确切的错误:
Project1.exe中0x6188F1F9(libmysql.dll)的未处理异常:0xC0000005:访问冲突读取位置0x000003B0
我不知道这意味着什么,似乎无法在互联网上找到任何关于它的内容。下面我将发布写入数据库的代码。虽然我会说它直到152号才能正常工作。
void writeToDB(string coordString, string time, string id){
MYSQL *connect; // Create a pointer to the MySQL instance
connect=mysql_init(NULL); // Initialise the instance
/* This If is irrelevant and you don't need to show it. I kept it in for Fault Testing.*/
if(!connect) /* If instance didn't initialize say so and exit with fault.*/
{
fprintf(stderr,"MySQL Initialization Failed");
}
/* Now we will actually connect to the specific database.*/
connect=mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0);
/* Following if statements are unneeded too, but it's worth it to show on your
first app, so that if your database is empty or the query didn't return anything it
will at least let you know that the connection to the mysql server was established. */
if(connect){
printf("Connection Succeeded\n");
}
else{
printf("Connection Failed!\n");
return;
}
MYSQL_RES *result; /* Create a pointer to recieve the return value.*/
MYSQL_ROW row; /* Assign variable for rows. */
std::string strSql = "INSERT INTO locationtime (id, dateTime, location) VALUES ('" + id + "','" + time + "','" + coordString + "')";;
const char* sql = strSql.c_str();
mysql_query(connect, sql);
/* Send a query to the database. */
mysql_close(connect); /* Close and shutdown */
}
编辑:好的,所以我能够让它停止抛出错误,但它仍然只是神秘地拒绝连接到数据库,我确实用PHP脚本测试它而不是表中有800多个值,完全没有问题。我不确定到底是什么问题!
答案 0 :(得分:3)
如果mysql_real_connect()
失败,您还应该在return;
之后添加exit(1)
或printf("Connection Failed!\n");
:
if(connect) {
printf("Connection Succeeded\n");
}
else {
printf("Connection Failed!\n");
return; // <<<
}
否则您的程序可能会崩溃,甚至没有打印出错误通知
要检查mysql_real_connect()
函数究竟出了什么问题(并且可能提供一些比"Connection Failed!\n"
更有用的信息),您可以使用mysql_errno()
函数。可以找到与此函数相关的错误代码列表here。
另一种可能性是您将无效或空数据传递给INSERT
语句。对从coordString, time, id
传递的数据进行一些完整性检查。
答案 1 :(得分:1)
好的,所以在我第二双眼睛调试后,我终于得到了答案。
在我的函数中,当连接实际成功时实际写入数据库时,mysql_close();
函数在返回语句之后写入。因此,我看到的是一个简单的错误,我多次看了。
感谢评论者提供的所有帮助以及我得到的答案!