在MySQL数据库中使用C执行SQL语句(3)

检索数据

现在开始编写从数据库中检索数据的第一个程序。我们将选择所有年龄大于5的行的内容。不幸的是我们还不知道如何处理这个数据,所以我们能做的只有循环检索它。这便是 select1.c:

#include
            #include
            #include "mysql.h"
            MYSQL my_connection;
            MYSQL_RES *res_ptr;
            MYSQL_ROW sqlrow;
            int main(int argc, char *argv[]) {
            int res;
            mysql_init(&my_connection);
            if (mysql_real_connect(&my_connection, "localhost", "rick",
            "bar", "rick", 0, NULL, 0)) {
            printf("Connection success\n");
            res = mysql_query(&my_connection, "SELECT childno, fname,
            age FROM children WHERE age > 5");
            if (res) {
            printf("SELECT error: %s\n", mysql_error(&my_connection));
            } else {
            res_ptr = mysql_store_result(&my_connection);
            if (res_ptr) {
            printf("Retrieved %luows\n",(unsignedlong)mysql_num_rows(res_ptr));
            while ((sqlrow = mysql_fetch_row(res_ptr))) {
            printf("Fetched data...\n");
            }
            if (mysql_errno(&my_connection)) {
            fprintf(stderr, "Retrive error: s\n",mysql_error(&my_connection));
            }
            }
            mysql_free_result(res_ptr);
            }
            mysql_close(&my_connection);
            } else {
            fprintf(stderr, "Connection failed\n");
            if (mysql_errno(&my_connection)) {
            fprintf(stderr, "Connection error %d: %s\n",
            mysql_errno(&my_connection),mysql_error(&my_connection));
            }
            }
            return EXIT_SUCCESS;
            }
          
 
检索结果集并循环通过已检索的数据的重要部分都已突出显示。

一次检索一行数据

要按需要逐行检索数据,而不是立即获取全部数据并将它存储在客户机中,可以将mysql_store_result调用替换成 mysql_use_result:
            MYSQL_RES *mysql_use_result(MYSQL *connection);
            
 
这个函数还取得一个连接对象并返回结果结合指针,或者出错时返回NULL。与mysql_store_result相似,它返回指向结果集对象的指针;关键的不同点在于返回时,实际上没有将任何数据检索到结果集,只是初始化结果集以准备好检索数据。

参考资料

您可以参阅本文在developerWorks全球站点上的英文原文.

本文章取自Wrox Press Ltd出版的Professional Linux一书的第5章。

关于作者

Rick Stones是一位系统设计师,他在一家大型泛欧制药分销和分配公司的IT部门工作。从1985年开始,他一直在使用各种形式的 UNIX,并且发现带有早期 .99 CD-ROM发行版的Linux。他用各种语言编写UNIX、Linux和其它平台的软件,同时还安装并管理几台Linux服务器。在非常有限的业余时间,他努力提高他的钢琴演奏技巧。

时间: 2024-12-23 22:35:25

在MySQL数据库中使用C执行SQL语句(3)的相关文章

在MySQL数据库中使用C执行SQL语句

mysql|数据|数据库|语句|执行 与PostgreSQL相似,可使用许多不同的语言来访问MySQL,包括C.C++.Java和Perl.从Professional Linux Programming中第5章有关MySQL的下列章节中,Neil Matthew和Richard Stones使用详尽的MySQL C接口向我们介绍了如何在MySQL数据库中执行SQL语句.他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE.然后,他们将编写从数据库检索数据

在MySQL数据库中使用C执行SQL语句(1)

与PostgreSQL相似,可使用许多不同的语言来访问MySQL,包括C.C++.Java和Perl.从Professional Linux Programming中第5章有关MySQL的下列章节中,Neil Matthew和Richard Stones使用详尽的MySQL C接口向我们介绍了如何在MySQL数据库中执行SQL语句.他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE.然后,他们将编写从数据库检索数据的简单程序. 执行SQL语句 现在,我

在MySQL数据库中使用C执行SQL语句(2)

返回数据的语句 现在是时候讨论SQL的最普遍用法了,从数据库检索数据的SELECT语句. MySQL 还支持返回结果的SHOW.DESCRIBE和EXPLAIN SQL语句,但是这里不考虑它们.按惯例,手册中包含这些语句的说明. 您将会从PostgreSQL章记起,可以从PQexec中的SQL SELECT 语句检索数据,这里马上获取所有数据,或者使用游标从数据库中逐行检索数据,以便搞定大数据. 由于完全相同的原因,MySQL的检索方法几乎完全相同,虽然它实际上不用游标的形式描述逐行检索.但是,

在MySQL数据库中使用C执行SQL语句的方法_Mysql

他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE.然后,他们将编写从数据库检索数据的简单程序 执行SQL语句 现在,我们已经有了一个连接,并且知道如何处理错误,是时候讨论使用我们的数据库来作一些实际工作了.执行所有类型的SQL的主关键字是mysql_query: int mysql_query(MYSQL *connection, const char *query) 正如您所见,它非常简单.它取一个指向连接结构的指针和包含要执行的SQL的文本字符串

异常-mysql 中多次执行sql语句,提示too many connections

问题描述 mysql 中多次执行sql语句,提示too many connections 解决方案 mysql Too many connectionsmysql: Too many connectionsmysql Too many connections 解决方案二: 看代码是结合上下文.第一份有一个关闭流,是否正确.这是一个jdbc操作mysql,参考一下吧:http://blog.csdn.net/qq_19558705/article/details/49947317 解决方案三: 为

mysql数据库实现关联表更新sql语句

比如有两张表,其中一张表某个字段的值要关联另一张表进行统计,就要用到mysql的update方法,并且left join另一张表进行联合查询. 表1 表2 需求是:统计表1中id,也就是表2中的tagid出现的次数,更新到表1的videonum字段中.这时候需要关联两张表更新表1并且进行统计. mysql关联表更新统计 sql语句如下:  代码如下 复制代码 UPDATE v9_keyword as a LEFT JOIN v9_keyword_data as b on a.id=b.tagid

Mysql数据库使用concat函数执行SQL注入查询_Mysql

SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 复制代码 代码如下: select username,email,content from test_table where user_id=uid; 其中uid,是用户输入的.正常显示结果会出现用户名,用户邮箱,用户留言内容.但是如果uid过滤不严,我们可以构造如下SQL语句来获得任意数据表信息. 复制代码 代码如下: u

检查Oracle数据库中不合理的sql语句

oracle|数据|数据库|语句 代码: select sql_text ,sharable_mem from v$sql where sharable_mem > '100000' order by sharable_mem ; 上面的sql语句是查询shared pool中占用内存超过100K的sql语句. 这个sql可以非常有效的检查出Oracle shared pool中那些严重占用内存的sql,根据我的经验,绝大多数有问题的sql语句都会在这里留下痕迹,通过在这里找出有问题的sql语句

.net中关于linq执行sql语句分页查询的功能

问题描述 publicList<V_NoEpay_User>GetOrderDatas(intstart,intcount,outinttotCount,DateTime?starTime,DateTime?endTime),应该怎么样来下逻辑呢,求大神们帮忙,如果能帮忙写出来就最好 解决方案 解决方案二:去Linq专区吧......现在Linq专区都成翻译了..解决方案三:returnquery.OrderBy(x=>排序条件).Skip((页码-1)*每页数).Take(每页数)解决