C語言連MySQL使用教程
系統環境:
Ubuntu8.04
一:安裝
從官方網站下載
需要的軟件有:
MySQL-server ,MySQL-client,MySQL-bench,MySQL-devel,MySQL-shared
其實上面的幾個文件,最需要的是MySQL-server ,MySQL-client,我下載的是
還有mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit.tar.gz
下載地址是:http://dev.mysql.com/downloads/connector/c/6.0.html#Red_Hat_Enterprise_Linux_5_(non_RPM_packages)
實際上就從www.mysql.com 下載就可以了。細心的可能會發現在http://dev.mysql.com/downloads/ 這個頁面,還有MySQL Workbench
這個可能就是上面我所說的MySQL-devel文件。
其實要這些文件幹什麼,就是爲了用C語言連接MYSQL 。那麼連接MYSQL需要的文件一般都是lib和mysql.h等文件
下面,先安裝MYSQL的MySQL-server ,MySQL-client,然後解壓mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit.tar.gz 即可,實際上解壓完後,我們需要的文件就只有三個文件夾,bin,include,lib 。
二:修改root密碼
用set password語句來修改用戶的密碼,三個步驟 “先mysql -u root登陸數據庫系統” 然後“mysql> update mysql.user set password=password('newpwd')” 最後執行“flush privileges”就可以了。
注意:上面的newpwd是你所修改完後的密碼。即,修改完密碼後,數據庫的密碼就是newpwd,你可以用其他密碼替代。
三:建立數據庫
使用c語言操作mysql之前,先在mysql裏頭創建一個數據庫,一個表,在表裏頭添加數據如下:
創建數據庫,庫名爲cusemysql:
mysql>create database cusemysql;
創建表,表名爲:
mysql>use cusemysql;
mysql>create table children(childno int not null unique,fname varchar(20),age int);
添加一點數據哦:
mysql>insert into children values(5,"花兒",10);
四:編寫代碼
/*insert.c*/
#include <stdio.h>
#include "mysql.h"
#include <stdlib.h>
#include <syslog.h>
// #include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc,char *argv[])
{
MYSQL my_connection;
int res;
mysql_init(&my_connection);
/* if(mysql_real_connect(&my_connection,"localhost","root","123456","cusemysql",0,NULL,CLIENT_FOUNT_ROWS))
*/
// 上面的這行代碼是錯的,網上的這行代碼是錯的
/*if(mysql_real_connect(&my_connection,"localhost","root","123456","cusemysql",0,NULL,0))
*/
/* if(mysql_real_connect(&my_connection,"172.29.141.110","root","123456","cusemysql",0,NULL,0)) */ //套解字的問題
//下面這行意思是連接mysql ,用戶:root ,密碼:123456,數據庫:cusemysql,
//而127.0.0.1的意思是本機迴路ip,開始用我的ip172.29.141.110,可是不能連接,
//後來就改成127.0.0.1
//具體爲什麼連不上是因爲MySQL的配置有關,有關配置,請查閱網上資料,
//配置文件一般是/etc/mysql/my.cnf ,可以用locate my.cnf查看具體路徑
if(mysql_real_connect(&my_connection,"127.0.0.1","root","123456","cusemysql",0,NULL,0))
{
printf("Connection success\n");
res=mysql_query(&my_connection,"insert into children values(10,'Ann',5)");
if(!res)
{
printf("insert %lu rows\n",(unsigned long)mysql_affected_rows(&my_connection));
}
else
{
fprintf(stderr,"insert error %d:%s\n",mysql_errno(&my_connection),mysql_error(&my_connection));
}
mysql_close(&my_connection);
}
else
{
fprintf(stderr,"Connection failed\n");
if(mysql_errno(&my_connection))
{
fprintf(stderr,"Connection error %d:%s\n",mysql_errno(&my_connection),mysql_error(&my_connection));
}
}
return EXIT_SUCCESS;
}
五:編譯
gcc insert.c -I/home/cyq/桌面/mysql-connector/include -L/home/cyq/桌面/mysql-connector/lib -lmysqlclient
六:運行
./a.out
七:注意:
1,在上面的各個操作中,一定注意文件的權限問題。比如庫文件的調用需要相應的權限。
2,如果提示有文件找不到,需要把相應的文件COPY到相應的目錄.
八:參考:
http://blog.csdn.net/chinalinuxzend/archive/2009/06/02/4236354.aspx