利用C语言访问mysql

利用C语言访问mysql,第1张

利用C语言访问mysql

利用C语言访问mysql
  • 一、相关头文件以及函数:
    • 1、连接数据库使用的头文件和库文件
    • 2、初始化连接句柄
    • 3、连接数据库
    • 4、关闭连接
    • 5、提取结果
    • 6、获取结果集的行数
    • 7、取出结果集中的一行记录
    • 8、查看记录行的列数
    • 9、释放结果集占用的内存
    • 10、获取错误信息
  • 二、程序示例
    • 1、对数据库的表进行增删改 *** 作,并不需要程序返回相应的结果:
    • 2、执行select查询语句的时候,需要程序将数据表中查询的语句返回

一、相关头文件以及函数: 1、连接数据库使用的头文件和库文件
#inlcude 

程序中使用访问mysql的有关函数接口,需要在连接时指定库名:
例如编译链接的时候指令如下:
gcc -o main mian.c -lmysqlclient

2、初始化连接句柄

该方法用来初始化一个连接句柄。
①如果参数为空,则返回一个指向新分配的连接句柄的指针。示例如下:

MYSQL * mysql=mysql_init(NULL);

②如果传递一个已有的结构,它将被重新初始化。

MYSQL * mysql_init(MYSQL * mysql);

出错时返回NULL

3、连接数据库
MYSQL * mysql_real_connect(MYSQL * mysql,const char* host,const char* user,const char* password,const char* db,unsigned int port,const char* unix_socket,unsigned long clientflag);

参数介绍:
mysql:上一步mysql_init()初始化返回的指针。
host:主机名(连接的服务器的IP地址)本地可以使用"localhost"或"127.0.0.1"或NULL。
user:用户名。
password:用户密码。
db:数据库的名字。
port:数据库的端口3306,也可以填写0,意味着使用mysql的默认端口3306。
unix_socket:一般为NULL,表示不适用unix套接字或者管道。
clientflag:标志位,一般给0。

4、关闭连接
void mysql_close(MYSQL* mysql);
5、提取结果
MYSQL_RES *mysql_store_result(MYSQL* mysql);//一次性提取所有数据
MYSQL_RES *mysql_use_result(MYSQL* mysql);//依次提取一行数据

该方法可以保存客户端中接收到的所有数据

6、获取结果集的行数
uint6_t mysql_num_rows(MYSQL_RES* res);

该方法获取结果集中的行数

7、取出结果集中的一行记录
MYSQL_ROW mysql_fetch_row(MYSQL_RES* res);

从结果集中取出一行,并把它存放到一个行结构中。当数据用完或者出错时,返回为NULL。所以通常情况下该方法需要循环调用。

8、查看记录行的列数
unsigned in mysql_field_count(MYSQL * mysql);
9、释放结果集占用的内存
void mysql_free_result(MYSQL_RES* res);

执行完sql语句,得到返回的结果集,处理完数据后,需要调用该方法释放结果集的内存空间

10、获取错误信息
unsigned int mysql_error(MYSQL *mysql);//返回错误码
const char* mysql_error(MYSQL* mysql);//返回错误信息描述

二、程序示例 1、对数据库的表进行增删改 *** 作,并不需要程序返回相应的结果:

①数据库的前期准备:

②代码:

//没有结果的查询
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
    MYSQL* mysql=mysql_init(NULL);
    if(mysql==NULL)
    {
        printf("mysql init errn");
        exit(0);
    }

    //root有两个用户,一个是本地登陆的,一个是远程登录的用户
    mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","c215",3306,NULL,0);
    if(mysql==NULL)
    {
        printf("mysql connect errn");
        exit(0);
    }

    //执行sql语句
    //1、char* sql="insert into stu values('小名',21)";//这个插入语句最后可以加分号也可以不加分号
    //2、char * sql="delete stu from stu where name='小王'";
    //3、
    char* sql="update stu set age=18 where name='小名'";
    int res=mysql_query(mysql,sql);
    if(res!=0)
    {
        printf("mysql query er:%srn",mysql_error(mysql));
    }

    mysql_close(mysql);
}

③执行sql1语句在mysql中看到的结果:

④执行sql2语句在mysql中看到的结果:

⑤执行sql3语句在mysql中看到的结果:

2、执行select查询语句的时候,需要程序将数据表中查询的语句返回

①前期准备;
将之前c215中stu表的数据删完,然后进行下面 *** 作:

②代码:

//没有结果的查询
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
    MYSQL* mysql=mysql_init(NULL);
    if(mysql==NULL)
    {
        printf("mysql init errn");
        exit(0);
    }

    //root有两个用户,一个是本地登陆的,一个是远程登录的用户
    mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","c215",3306,NULL,0);
    if(mysql==NULL)
    {
        printf("mysql connect errn");
        exit(0);
    }

    char* sql="select * from stu";
    int res=mysql_query(mysql,sql);
    if(res!=0)
    {
        printf("mysql query er:%srn",mysql_error(mysql));
    }

    //准备拿到结果集,进行空间的分配
    //不能通过结果的成功与否判断是否有数据
    //而应该通过返回的几条决定是否有数据
    MYSQL_RES* mysql_res=mysql_store_result(mysql);
    //这里只能看获取结果是否成功
    if(mysql_res==NULL)
    {
        printf("提取数据失败:%sn",mysql_error(mysql));
        exit(0);
    }
    //提取当前有多少条记录,这里可能会有条件限制,我需要那种数据
    int num=mysql_num_rows(mysql_res);
    if(num==0)//认为没有记录
    {
        printf("没有记录n");
    }
    else//有数据
    {
        //取出结果集中的数据
        printf("当前记录条数:%dn",num);
        //计算列数
        int m=mysql_field_count(mysql);
        printf("一行记录有%d列n",m);
        //循环打印
        for(int i=0;i 

③程序运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存