在编写这个程序的时候我和同学费了很大的力气特别是在编译的时候,下面我就把自己编译的经验给大家分享一下,希望大家能少走一些弯路。
我自己装了mysql-5.0.41-linux-i686-glibc23.tar.gz 安装部分就不说了!自己在网上查吧!我的安装目录是 /usr/local/mysql 在这里说安装的目录是因为我们编程的时候要用到里面的头文件和库,头文件的目录就是在/usr/local/mysql/include/ ,库文件在 /usr/local/mysql/lib/ 这里我们主要用一个libmysqlclietn.a / libmysqlclient.so的库,因为程序的编译要用到一个参数 -lmysqlclient 就是要调用这个库.好了!下面我来给大家说一下,在Linux下用C语言和MySQL的库怎么实现对数据库的操作,
/* 在程序开始之前我为了以后方便编译程序 我把/usr/local/mysql目录中的一些文件拷入了系统默认目录 */
/* 比如我做了如下的拷贝 */
/*注意的所有操作包括程序在内都用蓝色字体标注,本程序我一测试成功 */
/*
mkdir /usr/include/mysql 这条命 令在/usr/include下建立了一个mysql目录
cp /usr/local/mysql/include/* /usr/include/mysql/ 把mysql安装目录下的include文件夹下的文件都拷到/usr/include /mysql 这样就可以在编程的时候直接在头文件引用时 写上 # include 而不是 # include "/usr/local/mysql/include/mysql.h" 希望大家分清楚,我是在已经把头文件拷入到/usr/include/mysql/里才写了下面的头文件包含的
cp /usr/local/mysql/lib/* /usr/lib/ 这是把MySQL的开发库放到系统默认的库文件目录了这样系统找的时候就容易多了!
*/
# include
# include
# include
# include
int main(int argc ,char *argv[])
{
MYSQL *m_sql; /* 定义SQL描述符 */
int m_query=0;
//char command[80]="select * from girls"; /* 定义执行的SQL语句 假设我的test数据库里有个girls的表 */
char command[80]=""; /* 这个数据存储要输入的SQL语句 */
printf("Please input You MySQL Command!/n");
scanf("%s",command); /* 输入要执行的SQL语句 */
m_sql = (MYSQL*)malloc(sizeof(MYSQL)); /* 为SQL描述符分配空间 */
mysql_init(m_sql); /* 初始化SQL描述符 这很重要 */
mysql_options(m_sql,MYSQL_READ_DEFAULT_GROUP,"mysql"); /* 从my.cnf文件读取mysql配置项作为当前配置 但是我发现有人也不用写这个函数也可以执行下去 所以建议大家在自己各自的机器上试试看 */
/* 用指定用户和密码连接本地SQL服务器的指定数据库 端口默认 */
if(!mysql_real_connect(m_sql,"localhost","root","123456","test",0,NULL,0))
{
printf("Connect MySQL ERROR!/n");
exit(1);
}
printf("Connect MySQL Success!/n");
mysql_select_db(m_sql,"test"); /* 设定连接数据库为test 这个函数也可以不用写,因为之前我们在mysql_real_connect()函数中已经指定了数据库*/
m_query=mysql_query(m_sql,command); /* 在服务器上执行定义的SQL语句 这个函数是我一直比较郁闷的函数,因为我和同学一起做的,我用mysql_real_query()函数总是出错,但他的就没有错 还是根据自己系统的情况 自己斟酌吧 */
/* 执行命令失败就退出 */
if (m_query)
{
printf(" %d Function /" mysql_real_query /" is ERROR!/n",m_query);
exit(1);
}
mysql_close(m_sql); /* 关闭SQL描述符 为程序退出做准备 */
return 0;
}
下面我们开始编译了,步骤是这样的:先把源文件编译成目标文件 即 *.o 的文件,然后再把 *.o 的文件编译成可执行的 *.out 文件:我的命令是这样的 我的源文件名 是mysql.c
编译 :gcc -c mysql.c -I /usr/include/mysql/ 这里的-I 是指定头文件目录 -c 是编译成目标代码
连接 :gcc mysql.o -o mysql -L /usr/lib/ -lmysqlclient -lz 这里的-L是指定库文件路径 这个参数-lmysqlclient是因为 C API代码包含在mysqlclient库中,正因为有了它才允许C程序访问数据库。-lz 我暂时不知道什么意思,请高手指教