Linux下mysql库函数的使用

这篇博客详细介绍了在Linux系统中如何使用MySQL的库函数进行数据库操作,包括HandleDB.h、HandleDB.cpp和test.cpp三个关键文件的实现,以及参考了一个详细的教程链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HandleDB.h

/*
  数据库操作类
*/
#ifndef _HANDLEDB_H
#define _HANDLEDB_H
#include <iostream>
#include <stdlib.h>
#include <mysql/mysql.h>
using namespace std;
#define TIMEOUT 1 //设置连接超时选项的宏标识
#define COMPRESS 2 //设置传输中压缩数据的宏标识

typedef struct SysInfo {
	const char* m_clientinfo; //客户端库文件版本信息
	const char* m_hostinfo; //服务器连接信息
	const char* m_serverinfo; //当前连接的服务器信息
	const char* m_queryinfo; //最近一次执行的query的信息,只针对update和insert有效
} SysInfo;

class HandleDB {
public:
	//构造函数,初始化连接句柄
	HandleDB();
	//析构函数,释放连接
	~HandleDB();
	//连接选项设置
	int setOptions(int flag, const char* timeout = NULL);
	MYSQL* createConnection(const char* p_sql_server_host, 
							const char* p_sql_user_name,
							const char* p_sql_user_pwd, 
							const char* p_sql_db_name);
	//执行SQL命令
	int executeSQL(const char* str_sql, bool isselect = false);
	//获取系统信息
	SysInfo getSysInfo();
	//中断操作并退出系统
	void endHandle();
	//打印错误信息
	void printErrInfo();
private:
	MYSQL* mp_connection;
	MYSQL_RES* mp_res;
	MYSQL_ROW m_row;
};

#endif //_HANDLEDB_H


HandleDB.cpp

/*
  数据库操作类
*/
#include "HandleDB.h"

//构造函数,初始化连接句柄
HandleDB::HandleDB() {
	mp_connection = mysql_init(NULL);
	if(mp_connection == NULL) {
		cout << "error: init connection failed!" << endl;
		exit(-1);
	}
}
//析构函数,关闭连接
HandleDB::~HandleDB() {
	if(mp_connection != NULL) {
		mysql_close(mp_connection);
	}
}
//连接选项设置
int HandleDB::setOptions(int flag, const char* timeout) {
	if(flag == TIMEOUT) {
		return mysql_options(mp_connection, MYSQL_OPT_CONNECT_TIMEOUT, timeout);
	}else if(flag == COMPRESS){
		return mysql_options(mp_connection, MYSQL_OPT_COMPRESS, 0);
	}else {
		cout << "error: please input incorrect flag(TIMEOUT/COMPRESS)!" << endl;
		return -1;
	}
}
//创建连接
MYSQL* HandleDB::createConnection(const char* p_sql_server_host, 
								  const char* p_sql_user_name,
								  const char* p_sql_user_pwd, 
								  const char* p_sql_db_name) {
	MYSQL* p_tempconnection = mysql_real_connect(mp_connection, 
												 p_sql_server_host,
												 p_sql_user_name,
												 p_sql_user_pwd,
												 p_sql_db_name,
												 0, NULL, 0);
	if(p_tempconnection == NULL) {
		endHandle();
	}
}
//执行SQL命令
int HandleDB::executeSQL(const char* str_sql, bool isselect) {
	if(mysql_query(mp_connection, str_sql)) {
		printErrInfo();
		return -1;
	}
	mp_res = mysql_store_result(mp_connection);
	if(isselect) {
		cout << "查询到" << mysql_num_rows(mp_res) << "条记录" << endl;
		while((m_row = mysql_fetch_row(mp_res))) {
			for(size_t i = 0; i < mysql_field_count(mp_connection); i++) {
				cout << m_row[i] << "		";
			}
			cout << endl;
		}
	}else {
		cout << "影响到了" << mysql_affected_rows(mp_connection) << "条记录" << endl;
	}
	return 0;
}
//获取系统信息
SysInfo HandleDB::getSysInfo() {
	SysInfo sysinfo = {};
	sysinfo.m_clientinfo = mysql_get_client_info();
	sysinfo.m_hostinfo = mysql_get_host_info(mp_connection);
	sysinfo.m_serverinfo = mysql_get_server_info(mp_connection);
	sysinfo.m_queryinfo = mysql_info(mp_connection);
	return sysinfo;
}
//中断操作并退出系统
void HandleDB::endHandle() {
	printErrInfo();
	exit(-1);
}
//打印错误信息
void HandleDB::printErrInfo() {
	cout << "error: " 
		 << mysql_errno(mp_connection) 
		 << ": " 
		 << mysql_error(mp_connection) 
		 << endl;
}

test.cpp

#include "HandleDB.h"

int main() {
	HandleDB mydb;
	unsigned int timeout = 3;
	//设置连接超时
	mydb.setOptions(TIMEOUT, (const char*)&timeout);
	//设置传输压缩
	mydb.setOptions(COMPRESS);
	mydb.setOptions(3);
	mydb.createConnection("localhost", "***", "***", "***");
	//mydb.executeSQL("select * from PlayerInfo order by logname", true);
	//mydb.executeSQL("insert into PlayerInfo values(2, 'Tony', 'Tony123')", false);
	//mydb.executeSQL("delete from PlayerInfo where id=7", false);
	mydb.executeSQL("insert into PlayerInfo values(8, 'jay', 'jay123')", false);
	SysInfo sysinfo = mydb.getSysInfo();
	cout << "客户端库文件版本:" << sysinfo.m_clientinfo << endl;
	cout << "服务器连接信息:" << sysinfo.m_hostinfo << endl;
	cout << "当前连接的服务器信息:" << sysinfo.m_serverinfo << endl;
	cout << "最近一次执行的query:" << sysinfo.m_queryinfo << endl;
	return 0;
}


参考文章:http://blog.youkuaiyun.com/junlixxu/article/details/5534752


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值