C语言连接MySQL,在一个mian函数里没事,放到单独的函数里就运行时出错。 本帖最后由 zwdnet 于 2011-06-02 14:23:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主用C++语言写的C程序?不管怎么样,bool InitDatabase(MYSQL * connect);它们都不能改变connect指针,所以到了下边这个函数调用的时候,connect的值还是初始的connect值。DisconnectDatabase(MYSQL * connect);解决的办法是:1. 对MYSQL*用全局变量,即两个函数都不带参数或者2. 使用双重指针MYSQL** connect当然,使用面向对象封装是比较好的方法。可惜你用C++写C程序。 /初始化mysql数据库bool InitDatabase(MYSQL * connect){ connect = NULL; // 楼上正解,这里你都改变了指针的指向了, //这是局部变量,与你main函数的关系不大 // .....} 多谢两位,我用C++只是为了用STL和string,连类都很少用。改成这样就对了:#include <iostream>#include <cstdlib>#include <mysql/mysql.h>#include <string>using namespace std;//初始化mysql数据库bool InitDatabase(MYSQL ** connect){ *connect = NULL; string server = "localhost"; string user; string password; string database = "libmanager"; cout<<"输入用户名:"; cin>>user; cout<<"输入密码:"; cin>>password; *connect = mysql_init(NULL); if (*connect == NULL) { cout<<"初始化连接失败"<<mysql_error(*connect)<<endl; return false; } if (!mysql_real_connect(*connect, server.c_str(), user.c_str(), password.c_str(), database.c_str(), 0, NULL, 0)) { cout<<"连接MySQL数据库失败,失败代码:"<<mysql_error(*connect)<<endl; return false; } return true;}//断开数据库连接void DisconnectDatabase(MYSQL ** connect){ if (*connect != NULL) { mysql_close(*connect); }}int main(){ MYSQL * connect; connect = NULL; if (!InitDatabase(&connect)) { cout<<"连接数据库失败:"<<mysql_error(connect)<<endl; exit(1); } else { cout<<"数据i库连接成功"<<endl; } cout<<mysql_error(connect)<<endl; DisconnectDatabase(&connect); return 0;} Mysql触发器 mysql workbench 已经停止工作 请教一个累计的问题。 mysql 数据库备份中 用目录拷贝的方法 的问题 linux mysql 中文乱码 求一个sql?谢谢各位! 请教大家一个很常见的select PostgreSQL GUI mysqldump 为什么我的mysql msi安装到最后两步的时候就停止了 我之前安装了了一个解压版的mysql没有卸载但是停掉服务了 遇到个数据库查询的问题,发来大家讨论下 :) mysql从源码安装后怎样卸载?
bool InitDatabase(MYSQL * connect);
它们都不能改变connect指针,
所以到了下边这个函数调用的时候,connect的值还是初始的connect值。
DisconnectDatabase(MYSQL * connect);解决的办法是:
1. 对MYSQL*用全局变量,即两个函数都不带参数
或者
2. 使用双重指针MYSQL** connect当然,使用面向对象封装是比较好的方法。可惜你用C++写C程序。
bool InitDatabase(MYSQL * connect)
{
connect = NULL; // 楼上正解,这里你都改变了指针的指向了,
//这是局部变量,与你main函数的关系不大
// .....
}
改成这样就对了:#include <iostream>
#include <cstdlib>
#include <mysql/mysql.h>
#include <string>using namespace std;//初始化mysql数据库
bool InitDatabase(MYSQL ** connect)
{
*connect = NULL;
string server = "localhost";
string user;
string password;
string database = "libmanager";
cout<<"输入用户名:";
cin>>user;
cout<<"输入密码:";
cin>>password;
*connect = mysql_init(NULL);
if (*connect == NULL)
{
cout<<"初始化连接失败"<<mysql_error(*connect)<<endl;
return false;
}
if (!mysql_real_connect(*connect, server.c_str(),
user.c_str(), password.c_str(),
database.c_str(), 0, NULL, 0))
{
cout<<"连接MySQL数据库失败,失败代码:"<<mysql_error(*connect)<<endl;
return false;
} return true;
}//断开数据库连接
void DisconnectDatabase(MYSQL ** connect)
{
if (*connect != NULL)
{
mysql_close(*connect);
}
}int main()
{
MYSQL * connect;
connect = NULL;
if (!InitDatabase(&connect))
{
cout<<"连接数据库失败:"<<mysql_error(connect)<<endl;
exit(1);
}
else
{
cout<<"数据i库连接成功"<<endl;
}
cout<<mysql_error(connect)<<endl;
DisconnectDatabase(&connect);
return 0;
}