关于mysql的基础知识可以参考 mysql基础
首先,需要确保已安装mysql-server,mysql-client,mysql-devel。
一、常用类型介绍
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()对应const char *host, //主机地址const char *user, //用户,例如:rootconst char *passwd, //数据库的密码const char *db, //要连接的数据库,例如:studentunsigned int port, //端口,可填0const char *unix_socket, //一般为NULLunsigned long client_flag); //一般为0//example
mysql_real_connect( &mysql, "localhost", "root", "mypasswd", "student", 0, NULL, 0 );
3. mysql_query()
用于执行mysql命令。其参数应使用c风格字符串。
mysql_query( MYSQL *mysql, char * command );//example
string command = "select * from info";
mysql_query( &mysql, command.c_str() );
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()
用于获取结果集的行数。
mysql_num_rows( MYSQL_RES *result );
6. mysql_num_fields()
用于获取结果集的字段数。
mysql_num_fields( MYSQL_RES *result );//example
int row_num;
row_num = 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_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;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;
}
编译:
g++ t.cpp `mysql_config --cflags --libs`
参考:
https://blog.csdn.net/tanswer_/article/details/72796570