- 一、相关头文件以及函数:
- 1、连接数据库使用的头文件和库文件
- 2、初始化连接句柄
- 3、连接数据库
- 4、关闭连接
- 5、提取结果
- 6、获取结果集的行数
- 7、取出结果集中的一行记录
- 8、查看记录行的列数
- 9、释放结果集占用的内存
- 10、获取错误信息
- 二、程序示例
- 1、对数据库的表进行增删改 *** 作,并不需要程序返回相应的结果:
- 2、执行select查询语句的时候,需要程序将数据表中查询的语句返回
#inlcude
程序中使用访问mysql的有关函数接口,需要在连接时指定库名:
例如编译链接的时候指令如下:
gcc -o main mian.c -lmysqlclient
该方法用来初始化一个连接句柄。
①如果参数为空,则返回一个指向新分配的连接句柄的指针。示例如下:
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。
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中看到的结果:
①前期准备;
将之前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 ③程序运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)