Linux C操作mysql (1)开发工具与代码实现

需求分析:Linux服务器上用vim编译运行C程序,对服务器上的mysql服务器进行读写。(之前的工作参考:Linux如何用vim编写、运行c脚本Linux服务器安装mysqlLinux系统配置mysql允许被远程访问

(1)头文件

#include <mysql/mysql.h>  
(2)代码第一版

这个程序的功能是:登录本地的mysql,连接本地的名为test的数据库。

#include <stdio.h>   
#include <mysql/mysql.h>
int main(int argc, const char *argv[])  
{  
    MYSQL   mysql;  
	const char * host = "127.0.0.1"; //因为是作为本机测试,所以填写的是本地IP 
  const char * user = "root"; //这里改为你的用户名,即连接MySQL的用户名 
  const char * passwd = "password"; //这里改为你的用户密码 
  const char * db = "test"; //这里改为你要连接的数据库的名字,一个数据可能有几张表
  unsigned int port = 3306; //这是MySQL的服务器的端口,如果你没有修改过的话就是3306。 
  const char * unix_socket = NULL; //unix_socket这是unix下的,我在Windows下,所以就把它设置为NULL 
  unsigned long client_flag = 0; //这个参数一般为0 
    if (NULL == mysql_init(&mysql)) {    //分配和初始化MYSQL对象  
        printf("mysql_init(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
   
    //尝试与运行在主机上的MySQL数据库引擎建立连接  
	if ( mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag)  == NULL ) //连接MySQL 
	{  
        printf("mysql_real_connect(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
   
    printf("Connected MySQL successful! \n");  
   
    mysql_close(&mysql);  
    return 0;  
}  

(3)需要注意的是在终端中用gcc命令编译含有mysql操作的c文件时,需要在命令行加入 -lmysqlclient


gcc linuxmysql.c -o linuxmysql  -lmysqlclient
(这一步是为了在编译时加入mysql的链接库,不然的话会出现错误:undefined reference to `mysql_init')

注意:上面的程序中连接了名字为test的database,也就是名字为test的数据库,我是用Navicat软件在本地主机远程连接服务器上的数据库,再在里面新建了数据库test。参考:Linux系统配置mysql允许被远程访问)

(4)代码第二版

这一版代码的功能是连接名为test的数据库,读取其中名为test1的表格,将其中所有的数据打印出来

#include <stdio.h>  
#include <mysql/mysql.h>
#include <string.h>  
int main(int argc, const char *argv[])  
{  
    MYSQL           mysql;  
    MYSQL_RES       *res = NULL;  
    MYSQL_ROW       row;  
    char            *query_str = NULL;  
    int             rc, i, fields;  
    int             rows;  
    if (NULL == mysql_init(&mysql)) {  
        printf("mysql_init(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    if (NULL == mysql_real_connect(&mysql,  
				"localhost",  
                "root",  
                "password",  
                "test",  
                 3306,  
                NULL,  
                0)) {  
        printf("mysql_real_connect(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    printf("1. Connected MySQL successful! \n");  
    query_str = "select * from test1";  //test1为表格的名字,这句话是mysql选中其中表格的命令
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));    //用mysql_real_query执行这条命令
    if (0 != rc) {  
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    res = mysql_store_result(&mysql);  //读取到的表格数据保存在res中
    if (NULL == res) {  
         printf("mysql_restore_result(): %s\n", mysql_error(&mysql));  
         return -1;  
    }  
    rows = mysql_num_rows(res);  //查询表格中的行数,保存到rows里面
    printf("The total rows is: %d\n", rows);  
    fields = mysql_num_fields(res);  //也就是查询表格的列数
    printf("The total fields is: %d\n", fields);  
    while ((row = mysql_fetch_row(res))) { //打印出表格中的所有数据
        for (i = 0; i < fields; i++) {  
            printf("%s\t", row[i]);  
        }  
        printf("\n");  
    }  
    mysql_close(&mysql);  
    return 0;  
}  

示例表格:


运行结果:


(5)代码第三版(连接数据mysql数据库test中的表格test1,修改表里面的数据,使用Navicat for MySQL远程连接服务器上的数据库查看数据修改)

#include <stdio.h>  
#include <mysql/mysql.h>
#include <string.h>  
int main(int argc, const char *argv[])  
{  
    MYSQL           mysql;  
    MYSQL_RES       *res = NULL;  
    MYSQL_ROW       row;  
    char            *query_str = NULL;  
    int             rc, i, fields;  
    int             rows;  
    if (NULL == mysql_init(&mysql)) {  
        printf("mysql_init(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    if (NULL == mysql_real_connect(&mysql,  
				"localhost",  
                "root",  
                "password",  
                "test",  
                 3306, 
                NULL,  
                0)) {  
        printf("mysql_real_connect(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    printf("1. Connected MySQL successful! \n");  
//执行插入请求  
    query_str = "insert into test1 values (12345, 'justtest', '2015-5-5')";  //插入一行数据,这一行数据有三列,也就是这个表格要有三列
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));  
    if (0 != rc) {  
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
//执行删除请求  
    query_str = "delete from test1 where nihao=3";  //删除一行数据,删除nihao是3的这一行
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));  
    if (0 != rc) {  
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
//然后查询表格中的所有数据,并打印出来  
    query_str = "select * from test1";  
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));  
    if (0 != rc) {  
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));  
        return -1;  
    }  
    res = mysql_store_result(&mysql);  
    if (NULL == res) {  
         printf("mysql_restore_result(): %s\n", mysql_error(&mysql));  
         return -1;  
    }  
    rows = mysql_num_rows(res);  
    printf("The total rows is: %d\n", rows);  
    fields = mysql_num_fields(res);  
    printf("The total fields is: %d\n", fields);  
    while ((row = mysql_fetch_row(res))) {  
        for (i = 0; i < fields; i++) {  
            printf("%s\t", row[i]);  
        }  
        printf("\n");  
    }  
    mysql_free_result(res);  
    mysql_close(&mysql);  
    return 0;  
}  
原始表格:

删除一行插入一列执行后的结果:

     

(6)更详尽的mysql c语言API函数描述参考:MySQL入门之常用C语言API

(7)参考链接:

https://www.cnblogs.com/uolo/p/6115448.html

http://blog.csdn.net/alexdream/article/details/2213201

http://www.linuxidc.com/Linux/2011-04/35157.htm

http://blog.csdn.net/qq_21111579/article/details/52051913



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值