原文:C语言对mysql数据库的操作
这已经是一相当老的话题。不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的!
我们言归正传
1.头文件:
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h> //这个是必需要包含的,下面对mysql的所有操作函数,都出自这里
2.定义一个MYSQL变量:
MYSQL mysql;
这里MYSQL是一个用于连接MySql数据库的变量。
在后面对mysql数据库的操作中,我们就用这个MYSQL变量作为句柄的。
3.定义数据库参数:
char host[32]=”localhost”;
char user[32]=”username”;
char passwd[32]=”pwd”;
char dbname[32]=”testdb”;
4.数据库操作
1).初始化数据库:
mysql_init(&mysql);
2).连接数据库:
mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0);
我们在操作时,可以对以上的函数进行if测试,如果初始化或者连接出错,作出相应提示,以便调试。
5.对数据库的操作:
Mysql_query(&mysql, “select * from testdb where condition”);
我们在实际操作中,为了更方便的使用程序中的某些变量,我们将会用到一个函数:
int sprintf(char *str, const char *format, …);
这个函数用来格式化我们的字符串,然后将变量按照给你的格式,赋给第一个参数。
我们使用这个方法方法可以很方便的使用我们的变量来对数据库进行操作。例如我们将要进行数据库的查询操作,我们就可以这样使用:
sprintf(sql,”select * from testdb where username = ‘%s’”, u_name);
然后使用mysql_query(&mysql, sql)进行查询。
其实大家已经注意到了,在sprintf函数中第二个参数是我们非常熟悉的sql语句,只不过在条件的右端使用了类似输出函数的格式符,因为我们使用了变
量。当然,在没有变量的时候,我们可以省去第三个参数,但是这样,我们使用sprintf的作用也就随之消失了。
大家对sql语句的操作一定比我更加熟悉,因此,关于删除和修改的例子我们就不过列举了。
6.关闭数据库连接:
Mysql_close(&mysql);
也许大伙都使用过php对mysql进行操作。也许也已经发现,在c语言中,对mysql数据库的操作和php有很大的相似之处。
下面我赋上一段小小的代码,来结束这篇文档!:)希望大家给予指点。
#include <stdio.h>
#include <mysql/mysql.h>
#include <stdlib.h>
#include <errno.h>
#include <syslog.h>
MYSQL mysql;
main(){
char host[32]=”localhost”; // mysql host
char user[32]=”username”;//mysql user name
char passwd[32]="pwd"; //mysql pwd
char dbname[32]=”testdb”;//mysql db
if( mysql_init(&mysql) == NULL )
{
syslog(LOG_USER|LOG_INFO,”inital mysql handle error\n”);
return 1;
}
if (mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)
{
syslog(LOG_USER|LOG_INFO, “Failed to connect to database: Error: %s\n”,mysql_error(&mysql));
return 1;
}
else syslog(LOG_USER|LOG_INFO, “connect to database: \n”);
printf(”connected to the db!\n”);
int a = find_ps();
printf(”the num is:%d\n”,a);
db_close();
return 0;}int db_close(){
mysql_close(&mysql);
return 0;
}
int find_ps (){
MYSQL_ROW m_row;
MYSQL_RES *m_res;
char sql[1024],username[32];
int res=1;
int *id;
sprintf(sql,”select * from testdb where user_name = ‘%s’”, u_name);
if(mysql_query(&mysql,sql) != 0)
{
syslog(LOG_USER|LOG_INFO, “select ps_info Error: %s\n”,mysql_error(&mysql));
return res;
}
m_res = mysql_store_result(&mysql);
if(m_res==NULL)
{
syslog(LOG_USER|LOG_INFO, “select username Error: %s\n”,mysql_error(&mysql));
res = 3;
return res;
}
}
mysql_free_result(m_res);
return res;}
7.编译:
别忘了加上库位置,否则编译无法通过!
gcc -L/usr/lib/mysql –lmysqlclient func.c -o func
呵呵,别忘记哦!