问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C语言如何对MySQL数据库进行操作

发布网友 发布时间:2022-04-23 07:37

我来回答

3个回答

热心网友 时间:2022-04-07 23:37

有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#include<windows.h#endif#include<stdio.h#include<stdlib.h#includemysql.h我的机器上该文件在/usr/local/include/mysql下定义MySQL数据库操作的宏,也可以不定义留着后面直接写进代码defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res;查询结果集,结构类型MYSQL_FIELD *fd ;包含字段信息的结构MYSQL_ROW row ;存放一行查询结果的字符串数组char qbuf[160];存放查询sql语句字符串if(argc!=2){//检查输入参数fprintf(stderr,usage:mysql_select<userid\n\n);exit(1);}mysql_init(&mysql);if(!(sock=mysql_real_connect(&mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(&mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)){fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0])))?NULL:row[0]));puts(queryok!\n);}mysql_free_result(res);mysql_close(sock);exit(0);return0;为了兼容大部分的编译器加入此行}编译的时候,使用下面的命令gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令./mysql_select 1将返回如下结果:numberoffieldsreturned:1Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空,各个函数都有详细说明,有时间我整理一份常用的API说明出来。

热心网友 时间:2022-04-08 00:55

里的大部分代码参考了MySQL发行包里面的.c源文件,大家也可以去里面找找相关的代码,下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。
if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译
#include <windows.h> #endif #include <stdio.h> #include <stdlib.h> #include "mysql.h"

我的机器上该文件在/usr/local/include/mysql下
定义MySQL数据库操作的宏,也可以不定义留着后面直接写进代码
define SELECT_QUERY "select username from tbb_user where userid = %d" int main(int argc, char **argv)char **argv 相当于 char *argv[] {

MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *res;查询结果集,结构类型
MYSQL_FIELD *fd ;包含字段信息的结构
MYSQL_ROW row ;存放一行查询结果的字符串数组
char qbuf[160];存放查询sql语句字符串
if (argc != 2) { //检查输入参数 fprintf(stderr,"usage : mysql_select <userid>\n\n"); exit(1); } mysql_init(&mysql); if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) { fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql)); perror(""); exit(1); } sprintf(qbuf,SELECT_QUERY,atoi(argv[1])); if(mysql_query(sock,qbuf)) { fprintf(stderr,"Query failed (%s)\n",mysql_error(sock)); exit(1); } if (!(res=mysql_store_result(sock))) { fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock)); exit(1); } printf("number of fields returned: %d\n",mysql_num_fields(res)); while (row = mysql_fetch_row(res)) { printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ; puts( "query ok !\n" ) ; } mysql_free_result(res); mysql_close(sock); exit(0); return 0;

为了兼容大部分的编译器加入此行
}
编译的时候,使用下面的命令
gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令
./mysql_select 1
将返回如下结果:
number of fields returned: 1 Ther userid #1 's username is: Michael query ok !

上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档,各个函数都有详细说明,有时间我整理一份常用的API说明出来。

热心网友 时间:2022-04-08 02:29

调用mysql数据库API。
去官网下载mysql c API库文件,然后安装一下,每个调用数据库的函数都有相关解释,直接参照函数解释进行编程就行了。
注意编写makefile的时候把相关依赖库加入
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉大学在职研究生考试科目有哪些 报考武汉大学在职研究生录取率高吗? 武汉大学mpa在职研究生好考吗 忘记车子买哪家保险 怎么查 67年的羊和什么生肖最配夫妻 67年的羊和69年鸡相配吗? 67年羊男与69年鸡女同是11月出生婚配如何? 67年9月和69年十月的结婚 “新菊亦侵篱”的出处是哪里 “闲绕篱头看菊花”的出处是哪里 mysql操作类中的数据库连接对象需要用一个静态属性来表示吗 怎么样可以快速消除黑眼圈??? mysql数据库用怎么操作 掉色的裤子如何处理 come over 的意思 英语comeover是什么意思? 裤子掉色怎么办,怎么补色? 问个英语问题, 关于英语 come over come over 和come over to 的区别是什么 翻译一下用红笔勾的句子,并说明一下come over在这里什么意思 come over 什么意思? come over是什么意思?? come over 是什么意思?? come over的意思及用法 come over 在这里是什么意思 came over是什么意思? “come over” 是什么意思? come over 是什么意思 come over是什么意思 怎么用 come over是什么意思 ubuntu下怎样操作mysql数据库 裤子掉色怎么办 裤子掉色怎么处理 快贷app到底怎么样?安全系数高不高?是不是正规的公司? 黑裤子掉色,怎么办。如何恢复黑色? 怎么样能消除黑眼圈? 黑月ADODB数据库操作类模块怎么连接MYSQL 快贷app怎么成功申请快贷,有什么技巧 php封装好的mysql操作库吗 裤子掉色怎么办? 如何使用MySQL WorkBench操作MySQL数据库 通过快贷APP借了3000元的小额贷款,逾期不还的话,有什么后果? 请各位大侠帮帮忙(关于MYSQL数据库) 快贷属于正规的贷款公司吗? 如何在Java程序中访问mysql数据库中的数据并进行简单的操作 快贷还款总提示系统进行批处理,明天到期了,会逾期吗? 快贷APP我这个月还了最后一期就还完了,但是身份证已经过期了 还能再借? java连接数据库(mysql)写入和读取的类怎么写,请带详细注释 MySQL数据库是什么? 谁告诉我下 discuz的数据库操作类 是哪些,在哪几个文件中,???_百度... mysql数据库如何分类?