linux下c語言學習筆記——操作mysql
linux下c語言學習筆記——操作mysql
作者:kyako
1,[比較詳細]在 C 裡嵌入 SQL:http://www.pgsqldb.org/pgsqldoc-7.4/ecpg.html
2,[在MySQL資料庫中使用C執行SQL語句]:http://www.dvbbs.net/tech/data/2006031818989.asp
3,MySQL客戶工具和API:http://www.yesky.com/imagesnew/software/mysql/manual_Clients.html
4,基於mysql的高效能資料庫應用開發:http://cache.baidu.com/c?word=mysql%3B%5F%3Breal%3B%5F%3Bconnect%2C%B2%CE%CA%FD&url=http%3A//www%2Edaima%2Ecom%2Ecn/Info/76/Info27780/&b=0&a=2&user=baidu
大家一起來開始練習羅
注:下面的所有例子在mandriva linux下測試通過
1,使用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);
對拉,為了方便起見,把表的大致樣子給大家看看
childno fname age
1 小星 9
2 大量 15
2 ,下面進行具體的操作
插入:insert
好的,我們現編輯一段c程式碼,取名為insert.c
Code:
/* insert.c */
#include <stdio.h>
#include <stdlib.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
/*注意哦,上面必須是mysql.h的絕對地址,一般在mysql下的include目錄下,仔細看看你的在哪裡?*/
int main(int argc, char *argv[])
{
MYSQL my_connection;
int res;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {
printf("Connection success/n");
res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");
if (!res) {
printf("Inserted %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;
}
[Ctrl+A Select All]
程式碼寫完了,要編譯哦
#gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lz
如果上邊的編譯不成功,可以試一下下邊的
#gcc -o insert insert.c `mysql_config --cflags --libs`
ok,現在我們執行看看
#./insert
Connection Success
Inserted 1 rows
year,果然可以,呵呵
不信到mysql下看看錶children中是否多了剛才插入的那一行資料
注:也許你會問上面gcc的命令引數是什麼意思阿,其實,我也不太清楚,呵呵
大概是要把mysql下的某個特定庫包含進來,可是我不知道具體是個什麼庫,所以用*.a全部包含進來拉
其實只要包含mysqlclient.a就可以,你試試看
更新:update
我們只要把上面的程式碼中的
res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");
換成
res = mysql_query(&my_connection, "update children set age=20 where childno<5 ");
即可
上面語句實現的功能是,把編號小於5的所有孩子的年齡全部改成20歲
檢索:select
看程式碼之前,最好是先看藍色字型的部分[介紹了程式碼中用到的一些函式的作用]
Code:
/* select.c */
#include <stdio.h>
#include <stdlib.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc, char *argv[])
{
MYSQL my_connection;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
int res;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){
printf("Connection success/n");
res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");
if (res) {
printf("SELECT error:%s/n",mysql_error(&my_connection));
} else {
res_ptr=mysql_store_result(&my_connection);
if(res_ptr) {
printf("Retrieved %lu Rows/n",(unsigned long)mysql_num_rows(res_ptr));
while((sqlrow=mysql_fetch_row(res_ptr))) {
printf("Fetched data.../n");
}
if (mysql_errno(&my_connection)) {
fprintf(stderr,"Retrive error:s/n",mysql_error(&my_connection));
}
}
mysql_free_result(res_ptr);
}
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;
}
[Ctrl+A Select All]
上面語句實現的功能是:檢索出年齡小於20歲的小孩的資訊,不過沒有對資訊進行任何處理哦
下次我們對資料進行一定的處理
這裡介紹上面用到的幾個函式:
檢索並處理[比較全面哦,呵呵]:select
下面是詳細的程式碼:
Code:
/* select1.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc, char *argv[])
{
MYSQL my_connection;
MYSQL_RES *res_ptr; /*指向檢索的結果存放地址的指標*/
MYSQL_ROW sqlrow; /*返回的記錄資訊*/
MYSQL_FIELD *fd; /*欄位結構指標*/
char aszflds[25][25]; /*用來存放各欄位名*/
int res; /*執行查詢操作後的返回標誌*/
int i,j,k;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){
printf("Connection success/n");
res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");
if (res) {
printf("SELECT error:%s/n",mysql_error(&my_connection));
} else {
res_ptr=mysql_store_result(&my_connection);
if(res_ptr) {
printf("Retrieved %lu Rows/n",(unsigned long)mysql_num_rows(res_ptr)); /*取得各欄位名*/
for(i=0;fd=mysql_fetch_field(res_ptr);i++)
strcpy(aszflds<i>,fd->name); /*輸出各條記錄*/
printf("下面是檢索出的各條記錄資訊:/n");
j=mysql_num_fields(res_ptr);
for(i=0;i<j;i++)
printf("%s/t",aszflds<i>);
printf("/n");
while((sqlrow=mysql_fetch_row(res_ptr))) {
for(i=0;i<j;i++)
printf("%s/t",sqlrow<i>);
printf("/n");
}
if (mysql_errno(&my_connection)) {
fprintf(stderr,"Retrive error:s/n",mysql_error(&my_connection));
}
}
mysql_free_result(res_ptr);
}
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;
}
[Ctrl+A Select All]
【來源】
作者:kyako
1,[比較詳細]在 C 裡嵌入 SQL:http://www.pgsqldb.org/pgsqldoc-7.4/ecpg.html
2,[在MySQL資料庫中使用C執行SQL語句]:http://www.dvbbs.net/tech/data/2006031818989.asp
3,MySQL客戶工具和API:http://www.yesky.com/imagesnew/software/mysql/manual_Clients.html
4,基於mysql的高效能資料庫應用開發:http://cache.baidu.com/c?word=mysql%3B%5F%3Breal%3B%5F%3Bconnect%2C%B2%CE%CA%FD&url=http%3A//www%2Edaima%2Ecom%2Ecn/Info/76/Info27780/&b=0&a=2&user=baidu
大家一起來開始練習羅
注:下面的所有例子在mandriva linux下測試通過
1,使用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);
對拉,為了方便起見,把表的大致樣子給大家看看
childno fname age
1 小星 9
2 大量 15
2 ,下面進行具體的操作
插入:insert
好的,我們現編輯一段c程式碼,取名為insert.c
Code:
/* insert.c */
#include <stdio.h>
#include <stdlib.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
/*注意哦,上面必須是mysql.h的絕對地址,一般在mysql下的include目錄下,仔細看看你的在哪裡?*/
int main(int argc, char *argv[])
{
MYSQL my_connection;
int res;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)) {
printf("Connection success/n");
res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");
if (!res) {
printf("Inserted %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;
}
[Ctrl+A Select All]
程式碼寫完了,要編譯哦
#gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lz
如果上邊的編譯不成功,可以試一下下邊的
#gcc -o insert insert.c `mysql_config --cflags --libs`
ok,現在我們執行看看
#./insert
Connection Success
Inserted 1 rows
year,果然可以,呵呵
不信到mysql下看看錶children中是否多了剛才插入的那一行資料
注:也許你會問上面gcc的命令引數是什麼意思阿,其實,我也不太清楚,呵呵
大概是要把mysql下的某個特定庫包含進來,可是我不知道具體是個什麼庫,所以用*.a全部包含進來拉
其實只要包含mysqlclient.a就可以,你試試看
更新:update
我們只要把上面的程式碼中的
res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");
換成
res = mysql_query(&my_connection, "update children set age=20 where childno<5 ");
即可
上面語句實現的功能是,把編號小於5的所有孩子的年齡全部改成20歲
檢索:select
看程式碼之前,最好是先看藍色字型的部分[介紹了程式碼中用到的一些函式的作用]
Code:
/* select.c */
#include <stdio.h>
#include <stdlib.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc, char *argv[])
{
MYSQL my_connection;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
int res;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){
printf("Connection success/n");
res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");
if (res) {
printf("SELECT error:%s/n",mysql_error(&my_connection));
} else {
res_ptr=mysql_store_result(&my_connection);
if(res_ptr) {
printf("Retrieved %lu Rows/n",(unsigned long)mysql_num_rows(res_ptr));
while((sqlrow=mysql_fetch_row(res_ptr))) {
printf("Fetched data.../n");
}
if (mysql_errno(&my_connection)) {
fprintf(stderr,"Retrive error:s/n",mysql_error(&my_connection));
}
}
mysql_free_result(res_ptr);
}
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;
}
[Ctrl+A Select All]
上面語句實現的功能是:檢索出年齡小於20歲的小孩的資訊,不過沒有對資訊進行任何處理哦
下次我們對資料進行一定的處理
這裡介紹上面用到的幾個函式:
|
檢索並處理[比較全面哦,呵呵]:select
下面是詳細的程式碼:
Code:
/* select1.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
int main(int argc, char *argv[])
{
MYSQL my_connection;
MYSQL_RES *res_ptr; /*指向檢索的結果存放地址的指標*/
MYSQL_ROW sqlrow; /*返回的記錄資訊*/
MYSQL_FIELD *fd; /*欄位結構指標*/
char aszflds[25][25]; /*用來存放各欄位名*/
int res; /*執行查詢操作後的返回標誌*/
int i,j,k;
mysql_init(&my_connection);
/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/
if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){
printf("Connection success/n");
res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");
if (res) {
printf("SELECT error:%s/n",mysql_error(&my_connection));
} else {
res_ptr=mysql_store_result(&my_connection);
if(res_ptr) {
printf("Retrieved %lu Rows/n",(unsigned long)mysql_num_rows(res_ptr)); /*取得各欄位名*/
for(i=0;fd=mysql_fetch_field(res_ptr);i++)
strcpy(aszflds<i>,fd->name); /*輸出各條記錄*/
printf("下面是檢索出的各條記錄資訊:/n");
j=mysql_num_fields(res_ptr);
for(i=0;i<j;i++)
printf("%s/t",aszflds<i>);
printf("/n");
while((sqlrow=mysql_fetch_row(res_ptr))) {
for(i=0;i<j;i++)
printf("%s/t",sqlrow<i>);
printf("/n");
}
if (mysql_errno(&my_connection)) {
fprintf(stderr,"Retrive error:s/n",mysql_error(&my_connection));
}
}
mysql_free_result(res_ptr);
}
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;
}
[Ctrl+A Select All]
【來源】
相關文章
- C 語言學習筆記筆記
- C語言學習筆記C語言筆記
- C語言學習筆記--C運算子C語言筆記
- c語言學習筆記===函式C語言筆記函式
- C語言學習筆記——位運算C語言筆記
- c語言程式基礎學習筆記C語言筆記
- C語言學習筆記之變數C語言筆記變數
- 初識C語言(01)—學習筆記C語言筆記
- MYSQL學習筆記12: DCL資料控制語言(使用者操作)MySql筆記
- 嵌入式C語言學習筆記2C語言筆記
- MySQL學習筆記--基本操作MySql筆記
- C語言例項解析精粹學習筆記——19C語言筆記
- C語言學習筆記之指標的運算C語言筆記指標
- 組合語言學習筆記組合語言筆記
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- c語言筆記C語言筆記
- linux c 學習筆記Linux筆記
- C語言學習方法,怎麼學習C語言?C語言
- linux下使用mysql的C語言APILinuxMySqlC語言API
- C++學習筆記-C++對C語言的函式擴充C++筆記C語言函式
- 熱更新語言--lua學習筆記筆記
- 《JavaScript語言精粹》學習筆記二JavaScript筆記
- 《JavaScript語言精粹》學習筆記一JavaScript筆記
- R語言學習筆記之一R語言筆記
- Go 基礎語言學習筆記Go筆記
- 考研:C語言複習筆記 [Hex Note]C語言筆記
- 《明解C語言》第三章學習筆記C語言筆記
- C語言學習筆記01--C開源庫uthash的使用C語言筆記
- HQYJ嵌入式學習筆記——C語言複習day1筆記C語言
- HQYJ嵌入式學習筆記——C語言複習day2筆記C語言
- 資訊學奧賽--C語言筆記(一)C語言筆記
- 學習筆記【MySQL基礎操作-第一節:MySQL基本操作】筆記MySql
- go 學習筆記之初識 go 語言Go筆記
- Go語言學習筆記(七)之方法Go筆記
- Solidity語言學習筆記————4、常量Solid筆記
- Solidity語言學習筆記————36、 庫Solid筆記
- 12天學好C語言——記錄我的C語言學習之路(Day 4)C語言
- MySQL學習筆記-使用Navicat操作MySQL資料庫MySql筆記資料庫