当前位置:文档之家› C语言调用mysql快速教程(精华篇)

C语言调用mysql快速教程(精华篇)

即可 上面语句实现的功能是,把编号小于 5 的所有孩子的年龄全部改成 20 岁
检索:select
看代码之前,最好是先看蓝色字体的部分[介绍了代码中用到的一些函数的作用] ////////////////////////////////////////////////// /* select.c */
#include <stdio.h> #include <stdlib.h> #include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc, char *argv[]) { MYSQL my_connection; MYSQL_RES *res_ptr; MYSQL_ROW sqlrow;
} }
return EXIT_SUCCESS; } ///////////////////////////////////////////// 代码写完了,要编译哦 #gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lz ok,现在我们执行看看 #./insert Connection Success Inserted 1 rows
int res;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/ if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {
一旦检索了数据,则可以使用 mysql_fetch_row 来检索它,并且使用 mysql_data_seek、mysql_row_seek、mysql_row_tell 操作结果集。在开 始检索数据阶段之前,让我们先讨论一下这些函数。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
printf("Connection successn"); res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");
if (res) {
printf("SELECT error:%sn",mysql_error(&my_connection)); }
使用等价的 PostgreSQL 时,应该知道返回 NULL 意味着已经发生了错误, 并且这与未检索到数据的情况不同。即使,返回值不是 NULL,也不意味 着当前有数据要处理。
如果未返回 NULL,则可以调用 mysql_num_rows 并且检索实际返回的行 数,它当然可能是 0。
my_ulonglong mysql_num_rows(MYSQL_RES *result);
year,果然可以,呵呵 不信到 mysql 下看看表 children 中是否多了刚才插入的那一行数据
注:也许你会问上面 gcc 的命令参数是什么意思阿,其实,我也不太清楚,呵呵 大概是要把 mysql 下的某个特定库包含进来,可是我不知道具体是个什么库,所以用*.a 全 部包含进来拉 其实只要包含 mysqlclient.a 就可以,你试试看
} else { //分别打印出错误代码及详细信息
fprintf(stderr, "Insert error %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));
} mysql_close(&my_connection); }
1,使用 c 语言操作 mysql 之前,先在 mysql 里头创建一个数据库,一个表,在表里头添加 数据如下:
创建数据库,库名为 cusemysql: mysql>create database cusemysql; 创建表,表名为: mysql>use cusemysql; mysql>create table children(childno int not null unique,fname varchar(20),age int); 添加一点数据哦: mysql>insert into children values(5,"花儿",10); 对拉,为了方便起见,把表的大致样子给大家看看
printf("Connection successn"); res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");4;Inserted %lu rowsn",(unsigned long)mysql_affected_rows(&my_connection)); /*里头的函数返回受表中影响的行数*/
这个函数采用从存储结果中获取的结果结构,并且从中检索单一行,在行 结构中返回分配给您的数据。当没有更多数据或者发生错误时,返回 NULL。稍后,我们将回来处理这一行中的数据。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
这个函数允许您进入结果集,设置将由下一个获取操作返回的行。offset 是行号,它必须在从 0 到结果集中的行数减 1 的范围内。传递 0 将导致在 下一次调用 mysql_fetch_row 时返回第一行。
else {
res_ptr=mysql_store_result(&my_connection); if(res_ptr) {
printf("Retrieved %lu Rowsn",(unsigned long)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:%sn",mysql_error(&my_connection)); } } mysql_free_result(res_ptr); } mysql_close(&my_connection); }
完成结果集时, 必须总是调用这个函数,以允许 MySQL 库整理分配给它 的对象。
else {
fprintf(stderr, "Connection failedn");
if (mysql_errno(&my_connection)) {
fprintf(stderr, "Connection error %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));
MYSQL_ROW_OFFEST mysql_row_tell(MYSQL_RES *result);
这个函数返回一个偏移值,它表示结果集中的当前位置。它不是行号,不
能将它用于 mysql_data_seek。但是,可将它用于:
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);
它移动结果集中的当前位置,并返回以前的位置。
有时,这一对函数对于在结果集中的已知点之间跳转很有用。请注意,不 要将 row tell 和 row seek 使用的偏移值与 data_seek 使用的行号混淆。这 些是不可交换的,结果将是您所希望看到的。
void mysql_free_result(MYSQL_RES *result);
这里介绍上面用到的几个函数:
可以从 SELECT 语句(或其他返回数据的语句)中检索完所有数据,在单 一调用中,使用 mysql_store_result:
MYSQL_RES *mysql_store_result(MYSQL *connection);
必须在 mysql_query 检索数据后才能调用这个函数,以在结果集中存储该 数据。这个函数从服务器中检索所有数据并立即将它存储在客户机中。它 返回一个指向以前我们从未遇到过的结构(结果集结构)的指针。如果语 句失败,则返回 NULL。
错误,因为对于程序所有数据都是本地的。还可以立即发现返回的行数, 它可以使编码更简便。如前所述,它将所有结果立即地发送回客户机。对 于大结果集,它可 能耗费大量的服务器、网络和客户机资源。由于这些原因,使用更大的数 据集时,最好仅检索需要的数据。不久,我们将讨论如何使用 mysql_use_result 函数来完成该操作。
它从 mysql_store_result 取得返回的结果结构,并且在该结果集中返回行 数,行数可能为 0。如果 mysql_store_result 成功,则 mysql_num_rows 也总是成功的。
这 种 mysql_store_result 和 mysql_num_rows 的组合是检索数据的一种简便 并且直接的方法。一旦 mysql_store_result 成功返回,则所有查询数据都已经存储在客户机上并 且我们知道可以从结果结构中检索它,而不用担心会发生数据库或网络
相关主题