Demo:C++操作MySql

好久没写东西了,上几天想起数据库操作了,用C++基于MySql写了个Demo。主要包含对数据库的 增、删、改、查 基本操作,如有不当请留言。 分享代码如下:

Sql.h:

#ifndef _SQL_H_
#define _SQL_H_
#include <iostream>
#include "mysql.h"
using namespace std;

class SQL
{
public:
    SQL();
    ~SQL();
    void InitMysqlInfo();
    bool Connect_to_Mysql(MYSQL &mysql);
    void Operate_Mysql_Modify(MYSQL &mysql, const char *Mysql_Sentence);
    void Operate_Mysql_Query(MYSQL *mysql, const char *Mysql_Sentence);

    void Disconnect_to_Mysql(MYSQL *mysql);
    MYSQL mysql;

private:
    const char *user;       //username
    const char *pswd;       //password
    const char *host;       //host address
    const char *database;   //database
    unsigned int port;      //server port       

};

#endif

Sql.cpp:

#include "Sql.h"

SQL::SQL()
{
    user = new char[];
    pswd = new char[];
    host = new char[];
    database = new char[];
    InitMysqlInfo();
}

SQL::~SQL()
{
    user = nullptr;
    delete user;
    pswd = nullptr;
    delete pswd;
    host = nullptr;
    delete host;
    database = nullptr;
    delete database;
}

void SQL::InitMysqlInfo()
{   //和自己数据库设置有关
    user = "root";
    pswd = "admin";
    host = "数据库所在机器IP地址";
    database = "test";
    port = 3306;
}

bool SQL::Connect_to_Mysql(MYSQL &mysql)
{
    //初始化数据结构
    mysql_init(&mysql);
    //在连接数据库之前,设置额外的连接选项
    //可以设置的选项很多,这里设置字符集,否则无法处理中文
    if (0 == mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"))
    {
        cout << "mysql_options() succeed" << endl;
    }
    else
    {
        cout << "mysql_options() failed" << endl;
    }

    if (&mysql != nullptr && mysql_real_connect(&mysql,host,user,pswd,database,port,nullptr,0))
    {
        cout << "Connect_to_Mysql Success" << endl;
        return true;
    }
    else
    {
        cout << "Connect_to_Mysql Failed" << endl;
        cout << mysql_error(&mysql) << endl;
        return false;
    }
}

void SQL::Operate_Mysql_Modify(MYSQL &mysql, const char *Mysql_Sentence)
{
    if (0 == mysql_query(&mysql, Mysql_Sentence))
    {
        cout << "Operate_Mysql Modify Success" << endl;
    }
    else
    {
        cout << "Operate_Mysql Modify Failed" << endl;
        cout << mysql_error(&mysql) << endl;
    }
}

void SQL::Operate_Mysql_Query(MYSQL *mysql, const char *Mysql_Sentence)
{
    if (0 == mysql_query(mysql, Mysql_Sentence))
    {
        cout << "Operate_Mysql Query Success" << endl;
        MYSQL_RES *result = nullptr;
        result = mysql_store_result(mysql);
        unsigned int rows = (unsigned int)mysql_num_rows(result);
        cout << "总记录条数: " << rows << endl;
        unsigned int fields = mysql_num_fields(result);
        cout << "每条记录总共 " << fields << " 个字段" << endl;
        MYSQL_FIELD *field = nullptr;
        for (unsigned int i = 0; i < fields; i++)
        {
            field = mysql_fetch_field_direct(result, i);
            cout << field->name << "\t\t";
        }
        cout << endl;
        MYSQL_ROW row = nullptr;
        row = mysql_fetch_row(result);
        while (nullptr != row)
        {
            for (unsigned int i = 0; i < fields; ++i)
            {
                if (row[i] != nullptr)
                    cout << row[i] << "\t\t";
                else
                    cout << "null" << "\t\t";
            }
            cout << endl;
            row = mysql_fetch_row(result);
        }
        mysql_free_result(result);
    }
    else
    {
        cout << "Operate_Mysql Query Failed" << endl;
        cout << mysql_error(mysql) << endl;
    }

}

void SQL::Disconnect_to_Mysql(MYSQL *mysql)
{
    mysql_close(mysql);
}

main.cpp.

#include "Sql.h"

int main()
{
    SQL Mysql;

    cout << "初始化数据库" << endl;//初始化数据库
    if (0 == mysql_library_init(0, NULL, NULL))
        cout << "mysql_library_init() succeed" << endl;
    else
        cout << "mysql_library_init() failed" << endl;

    cout << "连接数据库" << endl;
    if (Mysql.Connect_to_Mysql(Mysql.mysql))
    {
        cout << "新建表" << endl;  //新建表
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "create table if not exists\
                                                test_table(id int(4), name varchar(20) character set gb2312 collate gb2312_chinese_ci)");
        cout << "添加记录" << endl;  //添加记录
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "insert into test_table\
                                                values(1, 'aaa'), (2, 'bbb'), (3, 'ccc')");

        Mysql.Operate_Mysql_Modify(Mysql.mysql, "insert into test_table(id)\
                                                values(11), (22), (33)");
        cout << "查找记录" << endl;  //查找记录
        Mysql.Operate_Mysql_Query(&Mysql.mysql, "select * from test_table\
                                                where id = 22");

        Mysql.Operate_Mysql_Query(&Mysql.mysql, "select * from test_table");
        cout << "修改记录" << endl;  //修改记录
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "update test_table\
                                                set id = 22\
                                                where name = 'aaa'");
        cout << "修改表明" << endl;  //修改表明
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "alter table test_table rename re_test_table");
        cout << "删除记录" << endl;  //删除记录
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "delete from re_test_table\
                                                where  id = 2");//删除表中的特定条件的记录

        cout << "清空表" << endl;  //清空表
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "truncate table re_test_table");//删除表中的所有数据记录,清空表
        //  Mysql.Operate_Mysql_Modify(Mysql.mysql, "delete from test_table");//删除表中的所有数据记录,清空表

        cout << "删除表" << endl;  //删除表
        Mysql.Operate_Mysql_Modify(Mysql.mysql, "drop table re_test_table");//删除表

        cout << "断开连接" << endl;  //断开连接
        Mysql.Disconnect_to_Mysql(&Mysql.mysql);
    }
    else
    {
        cout << "Error...Failed to connect to Mysql !" << endl;
    }
    mysql_library_end();

    system("pause");
    return 0;
}

Coding…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值