linux下使用C++操作mysql

linux下使用C++操作mysql

一、常用类型介绍

1. MYSQL

用于定义一个mysql对象,便于后续操作确定要操作的数据库是哪一个。

MYSQL mysql;  //mysql标记对应某个数据库

2. MYSQL_ROW

用于定义一个行对象,其内容含有一行的数据。

MYSQL_ROW row;  //row[i]可用于输出该行第i个字段的数据

3. MYSQL_FIELD

用于定义一个存储字段信息的对象。

MYSQL_FIELD *field;  //field->name存储对应字段名称

4. MYSQL_RES

用于定义一个存储数据库检索信息结果的对象。

MYSQL_RES *result;

二、常用函数介绍

其实在操作mysql数据库时,最常使用的函数有以下几个:

1. mysql_init()

用于初始化一个MYSQL对象,来连接mysql服务端。

//原型
MYSQL *mysql_init( MYSQL *mysql );

//example
MYSQL mysql;
mysql_init( &mysql );

2. mysql_real_connect()

用于连接数据库

//原型
MYSQL *mysql_real_connect (
    MYSQL *mysql,   //初始化的MYSQL对象,与mysql_init()对应,就是mysql操作具柄
    const char *host,   //主机地址,链接mysql所在的IP
    const char *user,   //用户,就是拿那个用户身份登陆mysql,例如:root
    const char *passwd,   //数据库的密码...
    const char *db,   //要连接的数据库,例如:student
    unsigned int port,   //端口,一般为3306
    const char *unix_socket,   //一般为NULL
    unsigned long client_flag);  //一般为0

//example
if(mysql_real_connect( &mysql, "localhost", "root", 
      					"mypasswd", "student", 0, NULL, 0 ) == NULL)
{
	printf("链接失败!%s\n",mysql_error(&mysql));
}

3. mysql_query()

用于执行mysql命令。其参数应使用c风格字符串。

//原型
int mysql_query( MYSQL *mysql, char * command );

//example
string command = "select * from info";
int ret = mysql_query( &mysql, command.c_str() );
if(ret < 0)
{
	printf("出错了!%s\n",mysql_error(&mysql));
}

4. mysql_store_result()

用于获取mysql操作的检索结果。

//原型
MYSQL_RES *mysql_store_result(MYSQL *mysql);

//example
MYSQL_RES *result;
result = mysql_store_result( &mysql );

5. mysql_num_rows()

用于获取结果集的行数。

//原型
int mysql_num_rows( MYSQL_RES *result );


int rows = mysql_num_rows(result )

6. mysql_num_fields()

用于获取结果集的字段数(列数)。

//原型
int mysql_num_fields( MYSQL_RES *result );

//example
int fields;
fields = mysql_num_fields( result );

7. mysql_fetch_field()

用于获取下一个字段的类型。

//原型
MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);

8. mysql_fetch_row()

从结果集中获取下一行,调用一次获取一行数据,结束返回NULL。

//原型
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 

//example
MYSQL_ROW row;
while( row = mysql_fetch_row( result ), row != NULL ) {
    for( int i = 0; i < num; i++ ) {
        cout << row[i] << "\t\t";
    }
    cout << endl;
}

9. mysql_fetch_field_direct()

给定字段序号,返回字段类型,结束返回NULL。

MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i); 

//example
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;

10.mysql_free_result()

释放结果结合

mysql_free_result(MYSQL_RES *result);

11.mysql_set_character_set()

设置编码方式

//原型
mysql_set_character_set(MYSQL *mysql,const char* csname)


mysql_set_character_set(connect_fd,"utf8");

12. mysql_close()

用于关闭连接。

mysql_close( MYSQL *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", "niliushall", "student" ); 

    db.print();
    db.add();
    db.print();

    return 0;
}
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页