视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
在linux下用C语言访问、操作mysql数据库
2025-10-03 15:22:33 责编:小OO
文档
MySQL中文参考手册http://www.chinalinuxpub.com/doc/database/mysql_manual/manual_toc.html 

三、MySQL客户端应用的开发   

确认MYSQL服务器已经启动 

采用了MySQL的C   API进行开发。 

创建文件testmysql.c 

#include    

#include  

#include    

#include  

typedef   int   BOOL; 

enum   {   FALSE   =   0,   TRUE   =   1   }; 

#define   err_info(s)   (printf( "ERR:[F:%s   L:%d   FUN:%s]   %s\\n ",__FILE__,__LINE__,__FUNCTION__,s)); 

int   main(   int   argc,   char   *   argv[]   )   

{   

char   szTargetDSN[]   =   "test ";   

char   szSqlText[500]= " ";   

char   aszFlds[   25   ][   25   ];   

MYSQL   *   myData   ;   

MYSQL_RES   *   res   ;   

MYSQL_FIELD   *   fd   ;   

MYSQL_ROW   row   ;   

int   i,j,k;   

BOOL   bCreate   =   FALSE;   

if   (   (myData   =   mysql_init((MYSQL*)   0))   

//初始化数据结构   

&&   mysql_real_connect(   myData,   NULL,   

//连接数据库   

"root ",   "   your_password   ",   szTargetDSN,   

MYSQL_PORT,   NULL,   0   )   )   

{   

if(bCreate)   

{   

sprintf(szSqlText,   //构造SQL语句   

"create   table   mytable   "   

//新建一张表   

"(time   datetime,   s1   char(6),   "   

"s2   char(11),   s3   int,   s4   int) ");   

if   (mysql_query(   myData,   szSqlText))   

//执行SQL语句   

{//执行SQL语句出错   

err_info(   "Can‘t   create   table ")   ;   

mysql_close(   myData   )   ;   

return   FALSE   ;   

}   

}   

sprintf(szSqlText,   

"insert   into   mytable   "   

//向表中插入数据   

"values(‘2000-3-10   21:01:30‘, "   

//注意时间的格式   

"‘Test‘,‘MySQLTest‘,2000,3) ");   

if   (mysql_query(   myData,   szSqlText))   

{//执行SQL语句出错   

err_info(   "Can‘t   insert   data   to   table ")   ;   

mysql_close(   myData   )   ;   

return   FALSE   ;   

}   

sprintf(szSqlText,   "select   *   from   mytable   ");   

if   (mysql_query(   myData,   szSqlText))   

//进行数据检索   

{   

//执行SQL语句出错   

mysql_close(   myData   )   ;   

return   FALSE   ;   

}   

else   

{   

res   =   mysql_store_result(   myData   )   ;   

//取得查询结果   

i   =   (int)   mysql_num_rows(   res   )   ;   

//取得有效记录数   

printf(   "Query:   %s\\n%ld   records   found:   

\\n ",   szSqlText,   i   )   ;   

for   (   i   =   0   ;   fd   =   mysql_fetch_field(   res   )   ;   

i++   )   

strcpy(   aszFlds[   i   ],   fd-> name   )   ;  

//取得各字段名   

for   (i=1;   row   =   mysql_fetch_row(   res   );   )   

//依次读取各条记录   

{j   =   mysql_num_fields(   res   )   ;   

//取得记录中的字段数   

printf(   "Record   #%ld:-\\n ",   i++   )   ;   

for   (   k   =   0   ;   k   <   j   ;   k++   )  

//输出各字段的值   

printf(   "   Fld   #%d   (%s):   %s\\n ",   k   +   1,   aszFlds[   k   ],   

(((row[k]==NULL)   

(!strlen(row[k])))? "NULL ":row[k]))   ;   

puts(   "==============================\\n "   )   ;   

}   

mysql_free_result(   res   )   ;   

}   

}   

else   

{//连接数据库出错   

err_info(   "Can‘t   connect   to   the   mysql   server   ")   ;   

mysql_close(   myData   )   ;   

return   FALSE   ;   

}   

mysql_close(   myData   )   ;   

return   TRUE   ;   

}   

----   对其中几个函数作简单说明,详细说明,可参考MySQL文档:   

----   1.   MYSQL   *mysql_init(MYSQL   *mysql)   

----   初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数   

mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。   

新建的结构将在mysql_close()中释放。   

----   若成功,返回初始化的MYSQL数据结构的指针,否则返回NULL。   

----   2.   MYSQL   *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   int   client_flag)   

----   与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_re   

al_connect()成功返回。   

----   参数mysql是mysql_init()的返回值;   

----   参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为“lo   

calhost”;   

----   参数user和passwd是MySQL数据库的合法用户和口令;   

----   参数db是连接的数据库名;   

----   参数port,unix_socket和client_flag一般取默认值。   

----   3.   int   mysql_query(MYSQL   *mysql,   const   char   *query)   

----   执行query字符串中的SQL语句,query必须以0结尾。如果成功,返回0。   

----   4.   MYSQL_RES   *mysql_store_result(MYSQL   *mysql)   

----   返回SELECT,SHOW,DESCRIBE,   EXPLAIN等语句执行的结果。函数新建一个MYSQL_   

RES的数据结构,把结果存储在该结构中。如果查询没有匹配的结果,则返回空数据集。   

处理完结果集后,必须调用mysql_free_result()。   

----   如果出错,返回NULL,否则返回MYSQL_RES结构的指针。   

----   5.   MYSQL_ROW   mysql_fetch_row(MYSQL_RES   *result)   

----   取回结果集中的下一条记录,如果没有记录或出错,返回NULL。一条记录中的字段   

数可以用mysql_num_fields(result)获得,各字段的值可以用row[0]   到   row[mysql_nu   

m_fields(result)-1]的数组来访问。   

编译 

gcc   -o   testmysql   testmysql.c   -lmysqlclient     -L/usr/lib/mysql   -I/usr/include/mysql下载本文

显示全文
专题