调用mysql数据库API。
去官网下载mysql c API库文件,然后安装一下,每个调用数据库的函数都有相关解释,直接参照函数解释进行编程就行了。
注意编写makefile的时候把相关依赖库加入
❷ 用c语言如何对MySQL数据库进行操作
里的大部分代码参考了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说明出来。
❸ c语言怎么连接mysql数据库 代码
//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路径
//在工程设置-》链接》库模块中添加 libmysql.lib
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <winsock.h>
#include "E:\wamp\bin\mysql\mysql5.5.8\include\mysql.h"
void main(){
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server ="localhost";
char *user ="root";
char *password="";
char *database="test";
char sql[1024]="select * from chinaren";
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
if(mysql_query(conn,sql)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
res=mysql_use_result(conn);
while((row = mysql_fetch_row(res))!=NULL){
printf("%s\n",row[2]);
}
mysql_free_result(res);
mysql_close(conn);
}
===============================
#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "show tables;"
int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
MYSQL mysql,*handle; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *result; //查询结果集,结构类型
MYSQL_FIELD *field ; //包含字段信息的结构
MYSQL_ROW row ; //存放一行查询结果的字符串数组
char querysql[160]; //存放查询sql语句字符串
//初始化
mysql_init(&mysql);
//连接数据库
if (!(handle = mysql_real_connect(&mysql,"localhost","user","pwd","dbname",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
}
sprintf(querysql,SELECT_QUERY,atoi(argv[1]));
//查询数据库
if(mysql_query(handle,querysql)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(handle));
}
//存储结果集
if (!(result=mysql_store_result(handle))) {
fprintf(stderr,"Couldn't get result from %s\n", mysql_error(handle));
}
printf("number of fields returned: %d\n",mysql_num_fields(result));
//读取结果集的内容
while (row = mysql_fetch_row(result)) {
printf("table: %s\n",(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0]) ) ;
}
//释放结果集
mysql_free_result(result);
//关闭数据库连接
mysql_close(handle);
system("PAUSE");
//为了兼容大部分的编译器加入此行
return 0;
}
❹ c语言如何调用Mysql数据库文件并进行对数据库的操作呢。
MYSQL m_sqlCon;//声明
mysql_init(&m_sqlCon);//初始化
mysql_real_connect(&m_sqlCon, "127.0.0.1", abc, "root", "hibernate", atoi("3306"),NULL,0)//链接
mysql_query(&m_sqlCon, "SET NAMES GB2312"); //设置查询编码格式
res = mysql_query(&m_sqlCon,"select * from ms_sendlist where flag = 1 order by style desc");//查询
mysql_query(&m_sqlCon, sql);//插入,删除
❺ C语言怎样连接mysql数据库
mysql是有c语言接口的,安装相应库后就可以链接了,一般连接mysql的函数是mysql_connect或者mysql_real_connect(大概就是这么拼的吧。。。)可以使用mysql_query执行sql语句
❻ VC6.0中用C语言连接mysql数据库的案例
if(!mysql_real_connect(&mysql,"localhost","root","zhouqiang","db_books",0,NULL,0))
{
printf("到这了");
printf("\n\t Can not connect db_books!\n");
}
else
{
if(mysql_query(&mysql,"select * from tb_book"))
{
printf("\n\t Query tb_book failed!\n");
}
else
{
result = mysql_store_result(&mysql);
if(mysql_num_rows(result)!=0)
{
printf("\t————————————————————————\n");
printf("\t Show All The Books \n");
printf("\t————————————————————————\n");
printf("\t ID BookName Author BookConcern \n");
printf("\t————————————————\n");
while((row=mysql_fetch_row(result)))
{
fprintf(stdout,"\t %s %s %s %s\n",row[0],row[1],row[2],row[3]);
}
printf("\t————————————————————————\n");
}
else
printf("\n\t No record!\n");
mysql_free_result(result);
}
mysql_close(&mysql);
}
}
❼ 求c语言操作mysql数据库实例
不知你用的是什么代码,不过据我实验,以下代码是可用的 【来自 http://blog.csdn.net/andy_yf/article/details/7487307】
#include<stdlib.h>
#include<stdio.h>
#include"mysql.h"
intmain(intargc,char*argv[])
{
MYSQL*conn_ptr;
conn_ptr=mysql_init(NULL);//连接初始化
if(!conn_ptr){
fprintf(stderr,"mysql_initfailed ");
returnEXIT_FAILURE;
}
conn_ptr=mysql_real_connect(conn_ptr,"localhost","mol","newpassword","mol_test",0,NULL,0);//建立实际连接
//参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)后面三个参数在默认安装mysql>的情况下不用改
if(conn_ptr){
printf("Connectionsuccess ");
}
else{
printf("Connectionfailed ");
}
mysql_close(conn_ptr);//关闭连接
returnEXIT_SUCCESS;
}
连接mysql数据库需要以下步骤:
安装mysql开发包, linux下是mysql安装的时候全选就行了, linux 下直接安装mysql-devel
新建工程,占贴代码,注意修改实际的用户名、密码 ...
设置包含目录, 在windows下, 找到你的mysql安装位置,找到include文件夹, 设置ide增加该文件夹到包含目录 【可能是 C:Program FilesMySQLMySQL Server 5.0include】
设置连接目录, 同设置包含目录一样 找到mysql的lib目录,设置ide 【可能是C:Program FilesMySQLMySQL Server 5.0libopt】
设置连接选项, 需要设置ide连接选项,增加 -lmysql
编译连接运行
❽ 如何用C语言连接MYSQL数据库
1、配置ODBC数据源。
2、使用SQL函数进行连接。
对于1、配置数据源,配置完以后就可以编程操作数据库了。
对于2、使用SQL函数进行连接,参考代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
void
main()
{
HENV
henv;
//环境句柄
HDBC
hdbc;
//数据源句柄
HSTMT
hstmt;
//执行语句句柄
unsigned
char
datasource[]="数据源名称";
//即源中设置的源名称
unsigned
char
user[]=
"用户名";
//数据库的帐户名
unsigned
char
pwd[]=
"密码";
//数据库的密码
unsigned
char
search[]="select
xm
from
stu
where
xh=0";
SQLRETURN
retcode;
//记录各SQL函数的返回情况
//
分配环境句柄
retcode=
SQLAllocEnv(&henv);
//
等介于
SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL
,
&henv);
//
设置ODBC环境版本号为3.0
retcode=
SQLSetEnvAttr(henv,
SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,
0);
//
分配连接句柄
retcode=
SQLAllocConnect(henv,&hdbc);
//
等介于
SQLAllocHandle(SQL_HANDLE_DBC,
henv,
&hdbc);
//设置连接属性,登录超时为*rgbValue秒(可以没有)
//
SQLSetConnectAttr(hdbc,
SQL_LOGIN_TIMEOUT,
(SQLPOINTER)(rgbValue),
0);
//直接连接数据源
//
如果是windows身份验证,第二、三参数可以是
❾ mysql中能在C程序中通过嵌入式SQL访问数据库么
先看结构体
----------------------------------------------
以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接.
typedefstructst_mysql{
NETnet;/*Communicationparameters*/
gptrconnector_fd;/*ConnectorFdforSSL*/
char*host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsignedintport,client_flag,server_capabilities;
unsignedintprotocol_version;
unsignedintfield_count;
unsignedintserver_status;
unsignedlongthread_id;/*Idforconnectioninserver*/
my_ulonglongaffected_rows;
my_ulonglonginsert_id;/*idifinsertontablewithNEXTNR*/
my_ulonglongextra_info;/*Usedbymysqlshow*/
unsignedlongpacket_length;
enummysql_statusstatus;
MYSQL_FIELD*fields;
MEM_ROOTfield_alloc;
my_boolfree_me;/*Iffreeinmysql_close*/
my_boolreconnect;/*setto1ifautomaticreconnect*/
structst_mysql_optionsoptions;
charscramble_buff[9];
structcharset_info_st*charset;
unsignedintserver_language;
}MYSQL;
这个结构代表返回行的一个查询的(SELECT,SHOW,DESCRIBE,EXPLAIN)的结果。返回的数据称为“数据集”,用过数据库的朋友应该对数据库中查询后得到的结果集不会陌生,在C的API里对应的就是MYSQL_RES了,从数据库读取数据,最后就是从MYSQL_RES中读取数据。
typedefstructst_mysql_res{
my_ulonglongrow_count;
unsignedintfield_count,current_field;
MYSQL_FIELD*fields;
MYSQL_DATA*data;
MYSQL_ROWS*data_cursor;
MEM_ROOTfield_alloc;
MYSQL_ROWrow;/*Ifunbufferedread*/
MYSQL_ROWcurrent_row;/*buffertocurrentrow*/
unsignedlong*lengths;/*columnlengthsofcurrentrow*/
MYSQL*handle;/*forunbufferedreads*/
my_booleof;/*Usedmymysql_fetch_row*/
}MYSQL_RES;
----------------------------------------------
再看函数:
C语言操作mysql数据常用函数
所需头文件:#include<mysql/mysql.h>
功能:获得或初始化一个MYSQL结构
函数原型:MYSQL*mysql_init(MYSQL*mysql)
函数返回值:一个被始化的MYSQL*句柄
备注:在内存不足的情况下,返回NULL
所需头文件:#include<mysql/mysql.h>
函数功能:关闭一个服务器连接,并释放与连接相关的内存
函数原型:voidmysql_close(MYSQL*mysql);
函数传入值:MYSQL:类型的指针
函数返回值:无
所需头文件:#include<mysql/mysql.h>
函数功能:连接一个MySQL服务器
函数原型:MYSQL*mysql_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd);
函数传入值:mysql表示一个现存mysql结构的地址
host表示MYSQL服务器的主机名或IP
user表示登录的用户名
passwd表示登录的密码
函数返回值:如果连接成功,一个MYSQL*连接句柄:如果连接失败,NULL
备注:该函数不推荐,使用mysql_real_connect()代替
所需文件:#include<mysql/mysql.h>
函数功能:MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclient_flag);
函数传入值:mysql表示一个现存mysql结构的地址
host表示MYSQL服务器的主机名或IP
user表示登录的用户名
passwd表示登录的密码
db表示要连接的数据库
port表示MySQL服务器的TCP/IP端口
unix_socket表示连接类型
client_flag表示MySQL运行ODBC数据库的标记
函数返回值:如果连接成功,一个MYSQL*连接句柄:如果连接失败,NULL
所需头文件:#include<mysql/mysql.h>
函数功能:返回最新的UPDATE,DELETE或INSERT查询影响的行数
函数传入值:MYSQL:类型指针
函数返回值:大于零的一个整数表示受到影响或检索出来的行数。零表示没有区配查序中WHERE子句的记录或目前还没有查询被执行;-1表示查询返回一个错误,或对于一个SELECT查询
所需头文件:#include<mysql/mysql.h>
函数功能:对指定的连接执行查询
函数原型:intmysql_query(MYSQL*mysql,constchar*query);
函数传入值:query表示执行的SQL语句
函数返回值:如果查询成功,为零,出错为非零。
相关函数:mysql_real_query
所需头文件:#include<mysql/mysql.h>
函数功能:为无缓冲的结果集获得结果标识符
函数原形:MYSQL_RES*mysql_use_result(MYSQL*mysql);
函数传入值:MYSQL:类型的指针
函数返回值:一个MYSQL_RES结果结构,如果发生一个错误发NULL
#incluee<mysql/mysql.h>
检索一个结果集合的下一行
MYSQL_ROWmysql_fetch_row(MYSQL_RES*result);
MYSQL_RES:结构的指针
下一行的一个MYSQL_ROW结构。如果没有更多的行可检索或如果出现一个错误,NULL
#include<mysql/mysql.h>
返回指定结果集中列的数量
unsignedintmysql_num_fields(MYSQL_RES*res);
MYSQL_RES结构的指针
结果集合中字段数量的一个无符号整数
#include<mysql/mysql.h>
创建一个数据库
intmysql_create_db(MYSQL*mysql,constchar*db);
MYSQL:类型的指针
db:要创建的数据库名
如果数据库成功地被创建,返回零,如果发生错误,为非零。
#include<mysql/mysql.h>
选择一个数据库
intmysql_select_db(MYSQL*mysql,constchar*db);
MYSQL:类型的指针
db:要创建的数据库名
如果数据库成功地被创建,返回零,如果发生错误,为非零。
----------------------------------------------
再看例子:
很多人用到MySQL来开发一些项目,有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。
这里的大部分代码参考了MySQL发行包里面的.c源文件,大家也可以去里面找找相关的代码,下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。
#ifdefined(_WIN32)||defined(_WIN64)//为了支持windows平台上的编译
#include<windows.h>
#endif
#include<stdio.h>
#include<stdlib.h>
#include"mysql.h"//我的机器上该文件在/usr/local/include/mysql下
//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#defineSELECT_QUERY"selectusernamefromtbb_userwhereuserid=%d"
intmain(intargc,char**argv)//char**argv相当于char*argv[]
{
MYSQLmysql,*sock;//定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES*res;//查询结果集,结构类型
MYSQL_FIELD*fd;//包含字段信息的结构
MYSQL_ROWrow;//存放一行查询结果的字符串数组
charqbuf[160];//存放查询sql语句字符串
if(argc!=2){//检查输入参数
fprintf(stderr,"usage:mysql_select<userid> ");
exit(1);
}
mysql_init(&mysql);
if(!(sock=mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))){
fprintf(stderr,"Couldn'tconnecttoengine! %s ",mysql_error(&mysql));
perror("");
exit(1);
}
sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
if(mysql_query(sock,qbuf)){
fprintf(stderr,"Queryfailed(%s) ",mysql_error(sock));
exit(1);
}
if(!(res=mysql_store_result(sock))){
fprintf(stderr,"Couldn'tgetresultfrom%s ",mysql_error(sock));
exit(1);
}
printf("numberoffieldsreturned:%d ",mysql_num_fields(res));
while(row=mysql_fetch_row(res)){
printf("Theruserid#%d'susernameis:%s ",atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0])))?"NULL":row[0]));
puts("queryok! ");
}
mysql_free_result(res);
mysql_close(sock);
exit(0);
return0;//.为了兼容大部分的编译器加入此行
}
编译的时候,使用下面的命令
gcc-omysql_select./mysql_select.c-I/usr/local/include/mysql-L/usr/local/lib/mysql-lmysqlclient(-lz)(-lm)后面两个选项可选,根据您的环境情况
运行的时候,执行下面的命令
./mysql_select1
将返回如下结果:
numberoffieldsreturned:1
Theruserid#1'susernameis:Michael
queryok!
❿ c语言读取mysql库中的数据的程序头文件怎么设置
Mysql C API编程步骤
1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:
#include <WinSock2.h> // 进行网络编程需要winsock2.h
#include <mysql.h>
#pragma comment(lib, “libmysql.lib”)
2、创建MYSQL变量。如:
MYSQL mysql;
3、初始化MYSQL变量。
mysql_init(&mysql);
4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag);
参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。
5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。
查询成功则该函数返回0。
6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。
两个函数的原型分别为:
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。
7、调用mysql_fetch_row函数读取结果集数据。
上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
参数result就是mysql_store_result或mysql_use_result的返回值。
该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。
8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:
void STDCALL mysql_free_result(MYSQL_RES *result);
9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:
void STDCALL mysql_close(MYSQL *sock);