当前位置: 首页 > news >正文

MySQL在C中常用的API接口

常用的API接口

在C中常用的mysql API接口

1、初始化mysql对象。

mysql_init(NULL);

2、mysql连接函数:第一个参数是无连接的mysql对象,第二个参数是mysql地址,后面是用户名、密码、库名。函数返回一个有连接的MySQL对象。

mysql_real_connect(m_mysql, maddr, "root", "123456", "db", 0, NULL, 0);

3、sql查询函数:有连接的mysql对象,SQL语句。

mysql_query(m_mysql, sql.c_str());

4、获取查询结果集:将查询结果放在MYSQL RES* 对象中。

MYSQL_RES* res = mysql_store_result(m_mysql); 

5、从查询结果集中获取结果记录

MYSQL_ROW row = mysql_fetch_row(res);

6、从查询结果集中获取结果数量

mysql_num_rows(res);

7、判断获取最近一次查询结果集的列数,如果最后一个查询不是SELECT查询(无结果集),则此函数返回0。

mysql_field_count(m_mysql);

代码示例

根据用户ID获取其对应的组名

//先从参数列表中获取可连接的mysql地址
int db_c connect(void){MYSQL* mysql = m_mysql; //先拷贝原地址 做副本//寻找可用的连接 定义一个常量迭代器 遍历配置列表for(std::vector<std::string>::const_iterator maddr = g_maddrs.begin() ;maddr != g_maddrs.end() ; ++maddr){//判断当前地址是否可用if(m_mysql = mysql_real_connect(mysql , maddr->c_str(),"root", "123456", "db", 0, NULL, 0)){return OK; //#define OK 1  链接成功返回OK}}//遍历结束后 无可用连接 打印错误日志logger_error("connect database fail: %s",mysql_error(m_mysql = mysql));return ERROR; //#define ERROR 0
}
//根据用户ID获取其组名
int db_c::get(char const* userid, std::string& groupname){//拼接sql语句acl::string sql;sql.format("SELECT group_name FROM t_router WHERE userid='%s';",userid);//执行查询语句if(mysql_query(m_mysql, sql.c_str())){//如果失败打印日志logger_error("query database fail: %s, sql: %s",mysql_error(m_mysql), sql.c_str());return ERROR;}//获取查询结果集MYSQL_RES* res = mysql_store_result(m_mysql);//如果获取失败打印日志if (!res) {logger_error("result is null: %s, sql: %s",mysql_error(m_mysql), sql.c_str());return ERROR;}//从查询结果集中 获取查询记录MYSQL_ROW row = mysql_fetch_row(res);//如果失败打印日志if (!row)logger_warn("result is empty: %s, sql: %s",mysql_error(m_mysql), sql.c_str());else { //成功的话 获取结果groupname = row[0];}return OK;
}
http://www.lryc.cn/news/576108.html

相关文章:

  • TiDB AUTO_RANDOM 超大主键前端精度丢失排查:JavaScript Number 限制与解决方案
  • 玩转Linux CAN/CAN FD—SocketCAN的使用
  • opensuse安装rabbitmq
  • 【编译原理】期末复习知识总结
  • 【大数据】大数据产品基础篇
  • 【开源项目】「安卓原生3D开源渲染引擎」:Sceneform‑EQR
  • ArcGIS Pro利用擦除工具,矢量要素消除另一矢量部分区域
  • 【网络安全】密码学知识普及
  • 高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本
  • OkHttp 简单配置
  • pandas---使用教程
  • 解构SAP RISE与Cloud ERP授权新政:从许可模式到迁移策略的深度指南
  • (一)miniconda安装配置
  • Dubbo服务调用超时问题解决方案
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试
  • Linux tcp_info:监控TCP连接的秘密武器
  • 【RAG面试题】如何获取准确的语义表示
  • MCP-安全(代码实例)
  • ubuntu安装达梦数据库
  • Java8方法引用:简洁高效的编程利器
  • algorithm ——————》双指针(移动0 复写0 快乐数 装水问题 以及数组中找几个数和为指定的元组)
  • TCP四层模型:网络协议核心解密
  • WPF 3D 开发全攻略:实现3D模型创建、旋转、平移、缩放
  • HTTP协议中Connection: Keep-Alive和Keep-Alive: timeout=60, max=100的作用
  • Linux入门攻坚——49、高可用HA之corosync/pacemaker(2)
  • Linux命令行操作基础
  • 关于css的height:100%
  • JAVA-泛型通配符的上界和下界
  • UUDS—常见NRC及其含义
  • 中国双非高校经费TOP榜数据分析