今天想学一下linux下用C++连接mysql并实现一些简单的操作,踩到了很多坑。
首先是mysql的环境问题,之前还能用的,突然报错:
Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)”
然后搜索了很多网上的答案,包括改配置文件,下载更新mysql-client、mysql-server、mysql-dev等,但是搞了很久都没搞出个结果,一气之下直接删掉mysql重新安装,详情可以看怎么很爽的删掉mysql,希望有大佬能告诉我上面是啥原因orz 爷找到了,枯了,原因是我刚开机时没开启mysql服务(- _-)。看了这个错误解决才知道。
有一说一,真的很爽,然后重新安装,安装可以自己去网上搜链接,没太多bug。
然后就进入正题,要想用c++操作数据库,可以先在mysql创建好数据库和表,不然是连不上的。我这里了建的表是这样的:
然后就在c++中导入mysql/mysql.h头文件,使用里面的函数来访问数据库。写完代码后直接g++编译会报错:
mysql.h: No such file or directory
出现这个错误是因为体系没有安装mysql开发库
执行下面指令安装
sudo apt-get install libmysql+±dev
编译时须要加连接-lmysqlclient.
编译源法度的时辰,如下号令:
*gcc -I/usr/include/mysql .c -L/usr/lib/mysql -lmysqlclient -o *
也就是加上库路径和库,库路径查找可以看:查看mysql库路径
源码如下:
#include <iostream>
#include <string>
#include <mysql/mysql.h>
using namespace std;
class MysqlDB {
private:
MYSQL mysql;
MYSQL_ROW row;
MYSQL_RES *result;
MYSQL_FIELD *field;
public:
MysqlDB()
{
if( mysql_init( &mysql ) == NULL )
{
cout << "init error, line: " << __LINE__ << endl;
exit(-1);
}
}
~MysqlDB()
{
mysql_close( &mysql );
}
void connect( string host, string user, string passwd, string database )
{
if( !mysql_real_connect( &mysql, host.c_str(), user.c_str(), passwd.c_str(), database.c_str(), 0, NULL, 0 ) )
{
cout << "connect error, line: " << __LINE__ << endl;
exit(-1);
}
}
void add();
void print();
};
void MysqlDB::add()
{
string id, name, sex, birthday;
do {
cout << "请输入学生信息:\n";
cin >> id >> name >> sex >> birthday;
string sql = "insert into info values('" + id + "', '" + name +
"', '" + sex + "', '" + birthday + "');";
mysql_query( &mysql, sql.c_str() );
cout << "是否继续(y/n): ";
cin >> id;
} while( id == "y" );
}
void MysqlDB::print()
{
// string sql = "select * from info where name = '" + name + "';"; //要有''
string sql = "select * from info;";
mysql_query( &mysql, sql.c_str() );
result = mysql_store_result( &mysql );
if( !result )
{
cout << "result error, line : " << __LINE__ << endl;
return ;
}
int num = mysql_num_fields( result ); //返回字段个数
for( int i = 0; i < num; i++ ) {
field = mysql_fetch_field_direct( result, i ); //返回字段类型
cout << field->name << "\t\t"; //输出字段名
}
cout << endl;
while( row = mysql_fetch_row( result ), row )
{
for( int i = 0; i < num; i++ )
{
cout << row[i] << "\t\t";
}
cout << endl;
}
}
int main()
{
MysqlDB db;
db.connect( "localhost", "root", "root用户密码", "student" );
db.print();
db.add();
db.print();
return 0;
}
因为需要用到密码,又去想办法找root密码,网上很多方法,我这里列举一个查看mysql用户密码
运行结果:
数据库中查看:
博客链接: linux下使用C++操作mysql
mysql官方C API库看C API for mysql
数据库相关语句可以看菜鸟教程-mysql语句
更多推荐
使用C++连接数据库并实现相关操作
发布评论