linux下使用c++操作mysql

关于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,   //用户,例如:root
	const char *passwd,   //数据库的密码
	const char *db,   //要连接的数据库,例如:student
	unsigned int port,   //端口,可填0
	const char *unix_socket,   //一般为NULL
	unsigned 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 
#include 
#include 
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

上一篇:ipodtouch4如何重启(苹果死机怎么重启)
下一篇:b470e拆机(联想b470e还有没有维修的价值)