MYSQL C API : mysql_real_query()
enum enum_field_types {
MYSQL_TYPE_DECIMAL,
MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT,
MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT,
MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL,
MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,
MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE,
MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME,
MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE,
MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
MYSQL_TYPE_DATETIME2,
MYSQL_TYPE_TIME2,
MYSQL_TYPE_NEWDECIMAL=,
MYSQL_TYPE_ENUM=,
MYSQL_TYPE_SET=,
MYSQL_TYPE_TINY_BLOB=,
MYSQL_TYPE_MEDIUM_BLOB=,
MYSQL_TYPE_LONG_BLOB=,
MYSQL_TYPE_BLOB=,
MYSQL_TYPE_VAR_STRING=,
MYSQL_TYPE_STRING=,
MYSQL_TYPE_GEOMETRY=
} typedef struct st_mysql_field {
char *name; /* Name of column 列名 */
char *org_name; /* Original column name, if an alias */
char *table; /* Table of column if column was a field */
char *org_table; /* Org table name, if table was an alias */
char *db; /* Database for table */
char *catalog; /* Catalog for table */
char *def; /* Default value (set by mysql_list_fields) */
unsigned long length; /* Width of column (create length) */
unsigned long max_length; /* Max width for selected set */
unsigned int name_length;
unsigned int org_name_length;
unsigned int table_length;
unsigned int org_table_length;
unsigned int db_length;
unsigned int catalog_length;
unsigned int def_length;
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
unsigned int charsetnr; /* Character set */
enum enum_field_types type; /* Type of field. See mysql_com.h for types */ // 字段的mysql 数据类型
void *extension;
} MYSQL_FIELD; int mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
说明:执行SQL
参数1:已初始化的MYSQL 实例;
参数2:SQL 语句;
参数3:SQL 语句字符数。 MYSQL_RES *mysql_store_result(MYSQL *mysql);
说明:对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()
参数:已初始化的MYSQL 实例。 // typedef char **MYSQL_ROW;
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
说明:检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。当在mysql_use_result()之后使用时,当没有更多的行可检索时或如果出现一个错误,mysql_fetch_row()返回NULL。
代码范例:
#include <iostream>
#include <mysql.h>
#include <string> #include <assert.h> int main()
{
// 1、初始化MYSQL 实例
MYSQL *ms_conn = mysql_init(NULL);
if (ms_conn == NULL)
{
std::cout << "Error: mysql_init failed." << std::endl;
return ;
}
std::cout << "Info: mysql init successful." << std::endl; // 2、连接MYSQL 服务器
MYSQL *ms_tmp_res = NULL;
ms_tmp_res = mysql_real_connect(ms_conn, "localhost", "root", "123456sx",
"suyh", , NULL, );
if (ms_tmp_res == NULL)
{
std::cout << "Error: connect mysql failed: " << mysql_error(ms_conn) << std::endl;
mysql_close(ms_conn), ms_conn = NULL;
return ;
}
std::cout << "Info: mysql connect successful." << std::endl; // 3、执行SQL 语句
std::string str_sqls = "";
str_sqls += "SELECT id, account, sex, level, powers FROM player_data WHERE id = 100000 OR id = 100001 OR id = 100002"; int res = ;
res = mysql_real_query(ms_conn, str_sqls.c_str(), str_sqls.size());
if (res != )
{
std::cout << "Error: query failed, sql: " << str_sqls.c_str() << std::endl;
std::cout << mysql_error(ms_conn) << std::endl;
}
else
{
std::cout << "Info: query successful." << std::endl; // 取出SQL 语句执行的结果集
MYSQL_RES *ms_res = mysql_store_result(ms_conn);
if (ms_res != NULL)
{
// 字段个数
unsigned int field_num = mysql_num_fields(ms_res); // 每个字段的数据信息
MYSQL_FIELD* field_info = mysql_fetch_field(ms_res);
assert(field_info != NULL); // 每一个字段的值存储在row_data[i] 中,基本都以字符串的形式存储。NULL 的结果 指针也是NULL。
// 二进制数据可以通过mysql_fetch_lengths() 函数得到该字段的二进制数据长度,同样以数组形式取出,即:lens[i];
MYSQL_ROW row_data = NULL; // mysql.h --- typedef char **MYSQL_ROW;
while ()
{
row_data = mysql_fetch_row(ms_res); // 取出下一行结果
if (row_data == NULL)
break; std::cout << "##############################################" << std::endl;
for (int i = ; i < field_num; ++i)
{
if (row_data[i] == NULL)
std::cout << "field name: '" << field_info[i].name << "', values is NULL." << std::endl;
else
std::cout << "field name: '" << field_info[i].name << "', values is " << row_data[i] << std::endl;
}
}
} // 释放结果集
mysql_free_result(ms_res), ms_res = NULL;
} // 使用完释放系统资源
mysql_close(ms_conn), ms_conn = NULL; return ;
}
MYSQL C API : mysql_real_query()的更多相关文章
- mysql C API 字符串玩转备份调优
- The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- MySQL C API概述
以下列表总结了C API中可用的功能.有关更多详细信息,请参见 第27.8.7节“C API函数描述”中的说明. my_init():在线程安全程序中初始化全局变量和线程处理程序 mysql_affe ...
- MySql接口API函数综述
C API函数概述 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换 a ...
- PHP数据库操作:从MySQL原生API到PDO
本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的. 为了后面的测试,先建立数据库表test.包含表名user,s ...
- c++使用mysql的api连接相关问题
记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- MySQL C API(23)
C API 提供了对 MySQL c/s 模型的底层访问.C API 代码在 mysqlclient 库中实现.可以从该库中引用到的变量及含义: 环境变量 含义 MYSQL_UNIX_PORT 本地连 ...
- mysql C API的使用
<MySQL++简介>介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装. 常用函数(名字就能告诉我们用法): M ...
随机推荐
- Google perf tools for nginx
注意:本教程仅适用于Linux. 下面为大家介绍google-perftools的安装,并配置Nginx和MySQL支持google-perftools. 首先,介绍如何优化Nginx: 1,首先下载 ...
- docker nodejs 基本应用
1. 安装docker 环境 2. nodejs 应用布局 package.json { "name": "docker-centos-hello", &qu ...
- c# 调用MD5CryptoServiceProvider出现 System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
进注册表按Win+R运行regedit修改下面的值为0就可以了 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorith ...
- ckeditor中“浏览服务器”的后台操作
此博文,基于CKeditor 4.5.6版本测试通过. 原创博文,转载请注明出处 参考官方文档,以及网络上的一些帖子.经过调试得到正确的期待中的结果. [网络上的一些所谓的帖子,不知道是故意将上传的代 ...
- 程序员书单_sshi框架篇
Struts2权威指南完整版 http://download.csdn.net/detail/shenzhq1980/9103955 精通struts.基于MVC的.java.web设计与开发http ...
- 【shell】case语句
case只能判断一种条件关系,而if能判断多种条件关系 #!/bin/bash read -p "please input your choice (high/middle/low):&qu ...
- nova分析(7)—— nova-scheduler
Nova-Scheduler主要完成虚拟机实例的调度分配任务,创建虚拟机时,虚拟机该调度到哪台物理机上,迁移时若没有指定主机,也需要经过scheduler.资源调度是云平台中的一个很关键问题,如何做到 ...
- nova分析(5)—— nova-conductor
nova-conductor是nova-compute之上的一个服务,这个服务比较简单,主要封装了DB访问和动态迁移相关的代码.转来一篇文章看看它是如何工作的. 更新记录:1. 2013.4.19 ...
- 一个自己做的easyui datagird扩展
var a; $(function () { $("body").bind("contextmenu", function () { return false; ...
- 请使用-Xlint:deprecation重新编译
[已解决]Android Studio编译OsmAnd出现警告:GeoPointParserUtil.java使用或覆盖了已过时的 API.有关详细信息请使用-Xlint:deprecation重新编 ...