#include "stdafx.h"
|
#include "MySQLDB.h"
|
|
|
MySQLDB::MySQLDB()
|
{
|
//Õýʽ¿ªÊ¼¹¹Ôì
|
if (init_mysql())
|
{
|
if (connect_mysql())
|
{
|
//Á¬½Ó³É¹¦
|
cout << "mysql connect success..." << endl;
|
}
|
else
|
{
|
//Á¬½Óʧ°Ü
|
cout << "mysql connect fail !" << endl;
|
}
|
}
|
else
|
{
|
//³õʼ»¯Ê§°Ü
|
cout << "mysql init fail !" << endl;
|
}
|
}
|
|
|
MySQLDB::~MySQLDB()
|
{
|
mysql_close(my_mysql);//¹Ø±Õ
|
}
|
|
/* Êý¾Ý¿â²éѯ */
|
size_t MySQLDB::execSQL(const string & sql, vector<vector<string>>& result)
|
{
|
//¸ù¾Ý×Ö·û´®sql£¬·¢¸øÊý¾Ý¿â
|
//µÃµ½½á¹û¼¯
|
//½âÎö½á¹û¼¯£¬ÌáÈ¡Êý¾Ýµ½resultÖÐ
|
//·µ»ØµÃµ½µÄ½á¹û¼¯µÄÊý¾ÝÐÐÊý
|
|
if (mysql_real_query(my_mysql, sql.c_str(),(unsigned long)sql.length())) {
|
//·µ»ØÖµÎª·Ç0£¬´ú±íʧ°Ü
|
cout << "execSQL fail !" << mysql_error(my_mysql) << endl;
|
return -1;
|
}
|
|
//SQLÓï¾ä·¢Ëͳɹ¦
|
|
//È¡µÃ½á¹û¼¯¡¾×¢Ò⣬ÓÃÍêºó£¬ÐèÒªÊÍ·Å¡¿
|
MYSQL_RES * res = mysql_store_result(my_mysql);
|
|
//Ôٵõ½½á¹û¼¯µÄÁÐÊý£¬·½±ãÈ·¶¨Ò»¸övectorÖеÄstringÐÍÊý¾ÝµÄ¸öÊý
|
unsigned int res_colomn_count = mysql_num_fields(res);
|
|
//µÃµ½½á¹û¼¯µÄÐÐÊý
|
MYSQL_ROW row;
|
|
//Ñ»·¶Á³ö½á¹û¼¯µÄ¸÷¸öÐУ¬ÁеÄÊý¾Ý
|
while ( (row = mysql_fetch_row(res)) )
|
//ÅжÏÖеÄÕâ¸öÓï¾äµÄЧ¹ûÊÇ×Ô¶¯µÄ£¬ÔÚÿ´ÎÑ»·ºó£¬ÔÙ´ÎÀ´µ½ÕâÀ·µ»ØµÄ½á¹ûÊDz»Ò»ÑùµÄ
|
//ÿһ´Î£¬¶¼»á·µ»Ø ´æ´¢×ÅÕâÒ»ÐеÄËùÓÐÁеÄÊý¾ÝµÄ"Êý¾Ý½áºÏÌå"Ö¸Õ룬¸ñʽ¾ÍÏñ×Ö·û´®Êý×éÒ»Ñù£¨char **£©== MYSQL_ROW
|
//Ö±µ½£¬×ßµ½×îºóÒ»Ðкó£¬Ã»ÓÐеÄÐÐʱ£¬·µ»ØNULL£¬while¾Í»á½áÊø
|
{
|
vector<string> one_line;
|
for (unsigned int i = 0;i < res_colomn_count;i++)
|
{
|
one_line.push_back(row[i]);
|
}
|
result.push_back(one_line);
|
}
|
|
//ÊͷŽá¹û¼¯
|
mysql_free_result(res);
|
|
//·µ»Ø½á¹û¼¯µÄÐÐÊý
|
return result.size();
|
}
|
|
/* Êý¾Ý¿â²åÈë */
|
uint64_t MySQLDB::exec_insSQL(const string & sql, char *info)
|
{
|
//¹Ø¼üº¯Êý
|
if (mysql_real_query(my_mysql, sql.c_str(), (unsigned long)sql.length())) {
|
//·µ»ØÖµÎª·Ç0£¬´ú±íʧ°Ü,¼Ç¼´íÎóÐÅÏ¢
|
strcpy_s(info,100, mysql_error(my_mysql));
|
cout << "execSQL fail !" << info << endl;
|
return 0;
|
}
|
|
//³É¹¦·µ»ØÕý³£id£¬Ê§°Ü·µ»Ø0
|
strcpy_s(info, 100, "");
|
return mysql_insert_id(my_mysql);
|
}
|
|
/* ³õʼ»¯ */
|
bool MySQLDB::init_mysql()
|
{
|
my_mysql = mysql_init(nullptr);//Ö¸Õ룺³õʼ»¯,·µ»ØµÄÊÇMYSQLÖ¸ÕëÀàÐÍ
|
if (my_mysql != nullptr)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
/* Á¬½Ó */
|
bool MySQLDB::connect_mysql()
|
{
|
//Á¬½ÓMYSQL
|
MYSQL * conn = mysql_real_connect(
|
my_mysql, //mysql_initµÃµ½µÄ¾ä±ú
|
"127.0.0.1", //µÇ½µÄmysqlµÄIPµØÖ·
|
"root", //µÇ¼ʹÓõÄÓû§Ãû
|
"066733", //µÇ¼ʹÓõÄÓû§ÃÜÂë
|
"face_link_ai", //Êý¾Ý¿âµÄÃû³Æ
|
3306, //¶Ë¿ÚºÅ
|
nullptr, //**ÎÒÃÇʹÓÃĬÈÏ
|
0 //**ÎÒÃÇʹÓÃĬÈÏ
|
);
|
if (conn)
|
{
|
//Á¬½ÓÉÏÁË
|
//ÉèÖÃÊý¾Ý¿â´«Êä¹ýÀ´µÄ×Ö·û±àÂë²ÉÓÃGBK
|
|
string sql = "set names gbk";//MYSQLµÄÃüÁÉèÖÃMySQLÁ¬½ÓµÄ×Ö·û¼¯ÎªGBK±àÂë
|
|
/*
|
ÕâÌõÃüÁî¸æËßMySQL·þÎñÆ÷£º
|
|
¿Í»§¶Ë·¢Ë͵ÄSQLÓï¾äʹÓÃGBK±àÂë
|
|
Ï£Íû·þÎñÆ÷·µ»ØµÄ½á¹ûҲʹÓÃGBK±àÂë
|
|
·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼äµÄͨÐÅʹÓÃGBK±àÂë
|
|
*/
|
|
if (mysql_real_query(my_mysql,sql.c_str(),(unsigned long)sql.length()))
|
{
|
//³É¹¦·µ»Ø0£¬if¿éÓï¾ä²»Ö´ÐУ¬Ê§°Ü²ÅÖ´ÐÐ
|
cout << "set names gbk --- error : " << mysql_error(my_mysql) << endl;
|
return false;
|
}
|
return true;
|
}
|
return false;
|
}
|