使用C++连接数据库并实现相关操作

今天想学一下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语句

猜你喜欢

转载自blog.csdn.net/weixin_45146520/article/details/109165849
今日推荐