標籤:
我之前還是一直想用 connector 來串連的,但是因為 mysql 官方提供的檔案和本地的編譯系統並不一樣,所以需要把 connector 加上
-stdlib=libc++ 重新編譯一遍。Hah 我不。
還能怎樣呢?用 ODBC 吧!嘗試用 mac 的 ODBC administrator,但是這個太老了,而且不方便(我覺得不方便)所以也沒採用。
於是最後選擇使用 mysql 的 C API 來串連資料庫,而以下就是一個極為簡單的例子:
#include <iostream>#include <vector>#include <string>#include <mysql.h>using namespace std;int main(){ ios::sync_with_stdio (false); MYSQL connection; mysql_init (&connection); mysql_real_connect (&connection,"localhost", "root", "1234", "world", 3306, nullptr, 0); // mysql_query 是一個值-結果函數 int query_success = mysql_query (&connection, "SELECT * FROM city LIMIT 10"); if (query_success == 0){ // 儲存查詢結果到 result MYSQL_RES* result = mysql_store_result (&connection); if (result){ std::cout << "Number of result: " << static_cast<size_t>(mysql_num_rows(result)) << "\n"; // 擷取列名 MYSQL_FIELD* field; vector<string> column; while ((field = mysql_fetch_field (result))){ column.emplace_back(field->name); } // 或者使用 mysql_num_fields(result); 得到結果的行數 for (const auto& col : column){ cout << col << "\t"; } cout << "\n"; MYSQL_ROW row; while ((row = mysql_fetch_row(result))){ for (size_t i = 0; i != column.size(); ++i){ std::cout << row[i] << "\t"; } cout << "\n"; } } mysql_free_result(result); } mysql_close(&connection); return 0;}
再做一些小改動:
#include <iostream>#include <vector>#include <string>#include <mysql.h>using namespace std;int main(){ ios::sync_with_stdio (false); MYSQL connection; mysql_init (&connection); mysql_real_connect (&connection,"localhost", "root", "1234", "world", 3306, nullptr, 0); // mysql_query 是一個值-結果函數 int query_success = mysql_query (&connection, "SELECT * FROM city"); if (query_success == 0){ // 儲存查詢結果到 result MYSQL_RES* result = mysql_store_result (&connection); if (result){ cout << "Number of result: " << static_cast<size_t>(mysql_num_rows(result)) << "\n"; MYSQL_FIELD* field; while ((field = mysql_fetch_field (result))){ cout << field->name << "\t"; } cout << "\n"; MYSQL_ROW row; auto const field_num = mysql_num_fields(result); while ((row = mysql_fetch_row(result))){ for (size_t i = 0; i != field_num; ++i){ std::cout << row[i] << "\t"; } cout << "\n"; } } mysql_free_result(result); } mysql_close(&connection); return 0;}
一段極簡單的操作 mysql 的 c++ 代碼