安裝好MySQL,建好數據表的前提下。
如果只是想簡單實現添加數據或者其他一個操作數據,可以參考另一篇博客。 https://www.cnblogs.com/ming-4/p/11544514.html
先定義一個數據庫管理的cpp文件和頭文件。
MySQLManager.h 文件:
/*MySQLManager.h 文件: 文件名: MySQLManager.h 內 容: MySQL連接數據庫管理類 創建日期: 2016年10月18日 創建人: AceTan */ #pragma once // 網絡通信頭文件 #include <WinSock.h> // 引入mysql頭文件(比較好的做法是把文件夾拷到工程目錄,也可以在vc目錄里面設置) #include "include/mysql.h" #include <Windows.h> // 包含附加依賴項,也可以在工程--屬性里面設置 #pragma comment(lib, "wsock32.lib") #pragma comment(lib, "libmysql.lib") // 連接數據庫的一些必要信息 struct ConnectionInfo { const char* host; // 主機地址 const char* user; // 用戶名 const char* password; // 密碼 const char* database; // 數據庫名 unsigned int port; // 端口號 const char* unix_socket; // unix連接標識 unsigned long clientflag; // 客戶端連接標志 // 構造函數,設置一些默認值 ConnectionInfo() : host("127.0.0.1"), port(3306), unix_socket(NULL), clientflag(0) { } }; class MySQLManager { public: // 連接數據庫 bool Init(ConnectionInfo& info); // 釋放連接 bool FreeConnect(); // 增加數據 // bool InsertData(const char* sql); // 刪除數據 // bool DeleteData(const char* sql); // 更新數據 // bool UpdateData(const char* sql); // 執行sql語句, 包括增加、刪除、更新數據 bool ExecuteSql(const char* sql); // 查詢數據 MYSQL_RES* QueryData(const char* sql); // 打印結果集 void PrintQueryRes(); private: MYSQL m_mysql; // mysql連接 MYSQL_RES* m_res; // 查詢結果集 };
MySQLManager.cpp 文件:
#include <iostream> #include <stdio.h> using namespace std; // 連接數據庫 bool MySQLManager::Init(ConnectionInfo& info) { // 初始化mysql,連接mysql,數據庫 mysql_init(&m_mysql); // 連接失敗 if (!(mysql_real_connect(&m_mysql, info.host, info.user, info.password, info.database, info.port, info.unix_socket, info.clientflag))) { return false; } return true; } // 釋放連接 bool MySQLManager::FreeConnect() { //釋放資源 mysql_free_result(m_res); mysql_close(&m_mysql); return false; } // 執行sql語句, 包括增加、刪除、更新數據 bool MySQLManager::ExecuteSql(const char * sql) { if (mysql_query(&m_mysql, sql)) { // 打錯誤log,這里直接顯示到控制台 cerr << "執行sql語句失敗,錯誤信息為: " << mysql_error(&m_mysql) << endl; return false; } else { cout << "執行sql語句成功!" << endl; } return true; } // 查詢數據 MYSQL_RES* MySQLManager::QueryData(const char* sql) { if (mysql_query(&m_mysql, sql)) { // 打錯誤log,這里直接顯示到控制台 cerr << "查詢語句執行失敗,錯誤信息為: " << mysql_error(&m_mysql) << endl; return nullptr; } else { cout << "查詢語句執行成功!" << endl; } // 存儲查詢結果 m_res = mysql_store_result(&m_mysql); return m_res; } // 遍歷結果集 void MySQLManager::PrintQueryRes() { if (nullptr == m_res || NULL == m_res) { return; } // 獲取行數 // unsigned int rows = mysql_affected_rows(m_mysql); // 字段列數組 MYSQL_FIELD* field = nullptr; //存字段名二維數組 char fieldName[64][32]; // 獲取字段名 for (int i = 0; field = mysql_fetch_field(m_res); ++i) { strcpy_s(fieldName[i], field->name); } // 獲取列數 int columns = mysql_num_fields(m_res); for (int i = 0; i < columns; ++i) { // 使用C語言的printf格式化更方便一點 printf("%10s\t", fieldName[i]); } cout << endl; MYSQL_ROW row; while (row = mysql_fetch_row(m_res)) { for (int i = 0; i < columns; ++i) { printf("%10s\t", row[i]); } cout << endl; } }
main函數:
#include <iostream> #include "MySQLManager.h" using namespace std; int main() { MySQLManager mysql; ConnectionInfo info; // 填充ConnectionInfo這個結構體,項目中一般從配置文件這讀取 info.user = "root"; info.password = "your_password"; info.host = "localhost"; info.port = 3306; info.database = "test"; info.unix_socket = NULL; info.clientflag = 0; // mysql連接 if (!mysql.Init(info)) { return -1; } // 增加數據測試 const char* sql1 = "insert into user values (NULL, 'Ada', 'password')"; mysql.ExecuteSql(sql1); // 刪除數據測試 const char* sql2 = "delete from user where name = 'AceTan'"; mysql.ExecuteSql(sql2); // 修改數據測試 const char* sql3 = "update user set password='update_password' where name = 'Ada'"; mysql.ExecuteSql(sql3); // 查詢數據測試 const char* sql4 = "select * from user"; mysql.QueryData(sql4); mysql.PrintQueryRes(); // 釋放mysql資源 mysql.FreeConnect(); return 0; }