c语言操作mysql

用c语言连接MYSQL数据库包含两个步骤:
1.初始化一个链接句柄结构

2.实际进行连接//mysql_real_connect(...);


首先,使用mysql_init来初始化连接句柄:
#include<mysql.h>
MYSQL *mysql_init(MYSQL *);

通常你传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果你传递一个已有的结构,它将被重新初始化,

这个例程在出错是返回NULL


目前为止,你知识分配和初始化一个结构,你还需要使用mysql_real_connect来向一个连接提供参数。

MYSQL *mysql_real_connect(MYSQL *connection , const char *server_host

const char *sql_user_name , const char * sql_password ,const char * db_name ,

 unsigned int port_number, const char *unix_socket_name , unsigned int flags);

指针connection必须指向已经被mysql_init初始化过的结构。


server_host既可以是主机名,也可以使IP地址。

sql_user_name 和sql_password的含义和它们的字面含义一样。

如果登录名为NULL,则假设登录名为当前LINUX用户的登录ID,如果登录

密码为NULL,你将只能访问服务器上无需密码就可以访问的数据。


port_number和unix_socket_name应该分别是0和NULL,除非你改变了MYSQL安装的默认设置。

它们将默认使用合适的值。

最后,flags参数用来对一些定义的位模式进行OR操作。


如果无法连接,它将返回NULL,mysql_error函数可以提供有帮助的信息。


使用完连接之后,通常程序退出时,你要像下面这样调用函数mysql_close();
void mysql_close(MYSQL *connection);
这将关闭连接。
mysql_option例程(仅能在mysql_init和mysql_real_connect之间调用)可以设置一些选项。
int mysql_option(MYSQL *connection , enum option_to_set , const char *argument);
因为mysql_option一次只能设置一个选项,所以设置一个选项就得调用它一次。
enum选项                                                实际参数类型                                        说明
MYSQL_OPT_TIMEOUT                       const unsigned int *                           连接超时之前等待的秒数
MYSQL_OPT_COMPRESS                  None,使用NULL                                 网络连接中使用压缩机制
MYSQL_OPT_COMMAND                    const char *                                         每次连接建立后发送的命令




执行sql语句
执行sql语句的主要API函数被恰当的命名为:
int mysql_query(MYSQL *connection ,const char *query);
如果成功返回0.
1.不返回数据的SQL语句
my_ulonglong mysql_affected_rows(MYSQL *connection);
返回值是无符号长整型,printf打印时,我们推荐使用%lu将其转换为无符号长整型。返回的是受之前的sql语句影响的行数。
 2.返回数据的语句
一次提取所有数据的函数
MYSQL_RES *mysql_store_result(MYSQL *connecion);

显然,你需要在在成功调用mysql_query之后使用这个函数。这个函数将立刻保存在客户端中返回的所有数据。
在mysql_store_result调用成功之后,你需要调用mysql_num_rows来得到返回记录的数目。
my_ulonglong mysql_num_rows(MYSQL_RES *RESULT);

这个函数接受由mysql_store_result返回的结构结构,并返回结构集中的行数。


MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
这个函数从使用mysql_store_result得到的结果结构中提取一行,并把它放到一个行结构中。当数据用完或发生错误时返回
NULL。

void mysql_data_seek(MYSQL_RES *result , my_ulonglong offset);
这个函数用来在结果集中进行跳转,设置将会被下一个mysql_fetch_row操作返回的行。参数offset的值是一个行号,它必须在

0到结果集总行数减1的范围内、MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);


这个函数返回一个偏移值,它用来表示结果集中的当前位置。它不是一个行号,你不能把它用于mysql_data_seek
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result , MYSQL_ROW_OFFSET offset);
这将在结果集中移动当前位置,并返回之前的位置。
一次提取一行数据
MYSQL _RES *mysql_use_result(MYSQL *connection);


为了逐行提取数据,我们将要使用mysql_use_result而不是mysql_store_result
MYSQL_RES *mysql_use_result(MYSQL *connection);
mysql_field_count函数提供了一些关于查询结果的基本信息,它接受连接对象,并返回结果集中的字段(列)数目

unsigned int mysql_field_count(MYSQL *conneciton);


[cpp]  view plain  copy
 print ?
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include "mysql.h"  
  5.   
  6. MYSQL my_connection;  
  7. MYSQL_RES *res_ptr;  
  8. MYSQL_ROW sqlrow;  
  9.   
  10. void display_row();  
  11.   
  12. int main(int argc, char *argv[]) {  
  13.    int res;  
  14.   
  15.    mysql_init(&my_connection);    
  16.    if (mysql_real_connect(&my_connection, "localhost""rick",   
  17.                                               "secret""foo", 0, NULL, 0)) {  
  18.    printf("Connection success\n");  
  19.      
  20.    res = mysql_query(&my_connection, "SELECT childno, fname, age FROM children WHERE age > 5");  
  21.   
  22.    if (res) {  
  23.       printf("SELECT error: %s\n", mysql_error(&my_connection));  
  24.    } else {  
  25.       res_ptr = mysql_use_result(&my_connection);  
  26.       if (res_ptr) {  
  27.          while ((sqlrow = mysql_fetch_row(res_ptr))) {  
  28.             printf("Fetched data...\n");  
  29.         display_row();  
  30.          }  
  31.          if (mysql_errno(&my_connection)) {  
  32.             printf("Retrive error: %s\n", mysql_error(&my_connection));  
  33.          }  
  34.          mysql_free_result(res_ptr);  
  35.       }  
  36.    }  
  37.    mysql_close(&my_connection);  
  38.   
  39.    } else {  
  40.       fprintf(stderr, "Connection failed\n");  
  41.       if (mysql_errno(&my_connection)) {  
  42.          fprintf(stderr, "Connection error %d: %s\n",  
  43.                   mysql_errno(&my_connection), mysql_error(&my_connection));  
  44.       }  
  45.    }  
  46.   
  47.    return EXIT_SUCCESS;  
  48. }  
  49.   
  50. void display_row() {  
  51.    unsigned int field_count;  
  52.   
  53.    field_count = 0;  
  54.    while (field_count < mysql_field_count(&my_connection)) {  
  55.       printf("%s ", sqlrow[field_count]);  
  56.       field_count++;  
  57.    }  
  58.    printf("\n");  
  59. }  

你可能感兴趣的:(mysql,数据库,linux,unix,posix)