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

4 篇文章 0 订阅

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

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,由于篇幅限制,不能在这里提供完整的代码。但是,我可以为您提供一个简单的示例,帮助您了解如何使用C++连接数据库实现基本操作。以下是一个使用MySQL数据库和MySQL Connector/C++库的示例: ```c++ #include <iostream> #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/exception.h> #include <cppconn/prepared_statement.h> #include <cppconn/resultset.h> using namespace std; using namespace sql; int main() { try { // 连接数据库 sql::Driver *driver; sql::Connection *con; driver = get_driver_instance(); con = driver->connect("tcp://localhost:3306", "root", "password"); con->setSchema("database_name"); // 插入学生信息 sql::PreparedStatement *pstmt; pstmt = con->prepareStatement("INSERT INTO students (name, age, gender) VALUES (?, ?, ?)"); pstmt->setString(1, "张三"); pstmt->setInt(2, 18); pstmt->setString(3, "男"); pstmt->executeUpdate(); // 查询学生信息 sql::Statement *stmt; sql::ResultSet *res; stmt = con->createStatement(); res = stmt->executeQuery("SELECT * FROM students"); while (res->next()) { cout << res->getString("name") << "\t" << res->getInt("age") << "\t" << res->getString("gender") << endl; } // 删除学生信息 pstmt = con->prepareStatement("DELETE FROM students WHERE name = ?"); pstmt->setString(1, "张三"); pstmt->executeUpdate(); // 关闭连接 delete res; delete stmt; delete pstmt; delete con; } catch (sql::SQLException &e) { cout << "SQLException: " << e.what() << endl; } return 0; } ``` 这个示例中,我们首先使用MySQL Connector/C++库连接到MySQL数据库,并指定要操作的数据库名称。然后,我们使用PreparedStatement对象向数据库中插入学生信息,使用Statement对象查询学生信息,以及使用PreparedStatement对象删除学生信息。最后,我们关闭连接并捕获任何可能发生的异常。 需要注意的是,这只是一个简单的示例,实际应用中还需要进行更多的错误处理和数据校验,以确保程序的稳定性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值