系统平台:Centos7

MySQL版本:5.7.19

连接MySQL数据库

MySQL::MySQL(string host, string user, string passwd, string db, unsigned port)
{
m_host = host;
m_user = user;
m_passwd = passwd;
m_dbname = db;
m_port = port; mysql_init(&connect);
} bool MySQL::connectDB()
{
if (!mysql_real_connect(&connect, m_host.c_str(), m_user.c_str(), m_passwd.c_str(), m_dbname.c_str(), m_port, NULL, ))
{
cout << "mysql connect error with " << mysql_errno(&connect) << endl;
return false;
}
return true;
}

增:

bool MySQL::Insert(string table, map<string, string> values)
{
sql.clear();
if (values.size() == )
{
cout << "Input Error!!!" << endl;
return false;
}
else
{
sql = "INSERT INTO " + table + "(";
auto iter = values.begin();
while (iter != values.end())
{
sql += iter->first + ',';
iter++;
}
sql = sql.substr(, sql.rfind(',')) + ") VALUES("; iter = values.begin();
while (iter != values.end())
{
sql += string("\"") + iter->second + "\",";
iter++;
}
sql = sql.substr(, sql.rfind(',')) + ");";
ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
}
ret = mysql_query(&connect, "commit");
return true;
}
}

删:

bool MySQL::Delete(string table, map<string, string> values)
{
sql.clear();
if (values.size() == )
{
cout << "Input Error!!!" << endl;
return false;
}
else
{
sql = "DELETE FROM " + table + " WHERE ";
auto iter = values.begin();
while (iter != values.end())
{
sql += iter->first + " = " + iter->second + " and ";
iter++;
}
sql = sql.substr(, sql.rfind("and")) + ";";
ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
}
ret = mysql_query(&connect, "commit");
return true;
}
}

改:

bool MySQL::Update(string table, map<string, string> values)
{
sql.clear();
if (values.size() == )
{
cout << "Input Error!!!" << endl;
return false;
}
else
{
sql = "UPDATE " + table + " SET ";
auto iter = values.begin();
while (iter != values.end())
{
sql += iter->first + " = \"" + iter->second + "\" and ";
iter++;
}
sql = sql.substr(, sql.rfind("and")) + ";";
ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
}
ret = mysql_query(&connect, "commit");
return true;
}
}

查:

bool MySQL::Select(string table, map<string, string> values)
{
sql.clear(); if(values.size() == )
sql = "SELECT * FROM " + table + " ;";
else
{
sql = "SELECT * FROM " + table + " where ";
auto iter = values.begin();
while (iter != values.end())
{
sql += iter->first + " = \"" + iter->second + "\" and ";
iter++;
}
sql = sql.substr(, sql.rfind("and")) + ";";
} ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
} showDetails(connect); return true;
}

自己编写sql语句查询:

bool MySQL::Query(string cmd)
{
size_t pos = cmd.find("select");
if (pos < || pos > cmd.size())
{
sql = cmd;
ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
}
return true;
}
else
{
ret = mysql_query(&connect, sql.c_str());
if (ret != )
{
cout << "mysql query error with " << ret << " Reason: " << mysql_error(&connect) << endl;
return false;
}
showDetails(connect);
return true;
}
}

MySQL执行完查询语句后会返回一个结果集,使用showDetails()函数输出结果集:

void MySQL::showDetails(MYSQL connect)
{
int col = mysql_field_count(&connect); res = mysql_store_result(&connect);
if (res == NULL)
{
cout << "mysql store result error with " << mysql_error(&connect) << endl;
exit(-);
} fields = mysql_fetch_fields(res);
for (int i = ; i < col; ++i)
cout << setw() << fields[i].name << " | ";
cout << endl; while ((row = mysql_fetch_row(res)))
{
for (int i = ; i < col; ++i)
{
if (row[i] == NULL)
cout << setw() << "NULL | ";
else
cout << setw() << row[i] << " | ";
}
cout << endl;
}
}

完整代码详见GitHub:https://github.com/MasterMeng/MySQLOperate

最新文章

  1. Hadoop学习笔记系列文章导航
  2. iOS 视图与视图层次结构(内容根据iOS编程)
  3. ado.net excel 模版
  4. asp.net中的窗口弹出实现,包括分支窗口 . ASP.NET返回上一页面实现方法总结 .
  5. [整理]通过AngularJS directive对bootstrap日期控件的的简单包装
  6. linux 通过 ulimit 改善系统性能
  7. hdu5876 Sparse Graph(补图最短路 bfs)
  8. cf 363D
  9. ASP.NET MVC3 Web应用程序中启用GZip压缩示例
  10. POJ1006 - Biorhythms(中国剩余定理)
  11. Java线程Dump分析工具--jstack【转载】
  12. NSIS Installer(被NSI脚本编译出来的target)获取命令行参数
  13. Form表单插件jquery.form.js
  14. poj1580---欧几里得算法(辗转相除法)
  15. Ubuntu adb devices 出现??? no permissions 的解决方法
  16. Eclipse生成jsp 如何将GB18030 改成默认UTF-8
  17. 基于HTML5 Canvas 实现弹出框
  18. [OpenCV] How to install opencv by compiling source code
  19. JavaScript ES6 新特性详解
  20. io.lettuce.core.RedisCommandTimeoutException: Command timed out

热门文章

  1. iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码
  2. matlab 启动图标
  3. shell的集合运算
  4. numpy 加速 以及 ipython
  5. Java中的堆、栈、方法区
  6. Debian8.8下的VIM的配置文件
  7. Java统计内存
  8. 函数动态传参,命名空间,gloabal,nonlocal关键字
  9. [Sdoi2013]森林(启发式合并+主席树)
  10. Pickle的简单使用