c類操作資料庫
#include<mysql/mysql.h>
#include<stdio.h>
intmain()
{
MYSQL*conn;
MYSQL_RES*res;
MYSQL_ROWrow;
char*server="localhost";//本地連接
char*user="root";//
char*password="525215980";//mysql密碼
char*database="student";//資料庫名
char*query="select*fromclass";//需要查詢的語句
intt,r;
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0))
{
printf("Errorconnectingtodatabase:%s ",mysql_error(conn));
}else{
printf("Connected... ");
}
t=mysql_query(conn,query);
if(t)
{
printf("Errormakingquery:%s ",mysql_error(conn));
}else{
printf("Querymade... ");
res=mysql_use_result(conn);
if(res)
{
while((row=mysql_fetch_row(res))!=NULL)
{
//printf("num=%d ",mysql_num_fields(res));//列數
for(t=0;t<mysql_num_fields(res);t++)
printf("%8s",row[t]);
printf(" ");
}
}
mysql_free_result(res);
}
mysql_close(conn);
return0;
}
(1)c類操作資料庫擴展閱讀
C語言使用注意事項:
1、指針是c語言的靈魂,一定要靈活的使用它:
(1)、指針的聲明,創建,賦值,銷毀等
(2)、指針的類型轉換,傳參,回調等
2、遞歸調用也會經常用到:
(1)、遞歸遍歷樹結構
(2)、遞歸搜索
B. c語言操作資料庫有哪些
都是可以的C/C++與資料庫交互,像mssql/mysql/oracle
等。一般都有成熟的第三方庫。這些庫裡面無非就是封裝了與資料庫通訊的方式和通訊協議。
C. 如何在C/C++程序中使用資料庫
一般要看使用的資料庫。如果 操作 sql server 需要用到 ADO 驅動,這種驅動使用MFC做的包裝類比較多一些,在控制台直接編寫代碼可能稍顯繁瑣。
如果操作mysql,在安裝mysql的時候,有相應的include頭文件和庫文件,可以在自己的IDE開發環境中進行設置。
D. 用c語言怎麼連接資料庫呢
25.2.2. C API函數概述
這里歸納了C API可使用的函數,並在下一節詳細介紹了它們。請參見25.2.3節,「C API函數描述」。
函數
描述
mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。
mysql_autocommit()
切換 autocommit模式,ON/OFF
mysql_change_user()
更改打開連接上的用戶和資料庫。
mysql_charset_name()
返回用於連接的默認字元集的名稱。
mysql_close()
關閉伺服器連接。
mysql_commit()
提交事務。
mysql_connect()
連接到MySQL伺服器。該函數已不再被重視,使用mysql_real_connect()取代。
mysql_create_db()
創建資料庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。
mysql_data_seek()
在查詢結果集中查找屬性行編號。
mysql_debug()
用給定的字元串執行DBUG_PUSH。
mysql_drop_db()
撤銷資料庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。
mysql_mp_debug_info()
讓伺服器將調試信息寫入日誌。
mysql_eof()
確定是否讀取了結果集的最後一行。該函數已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。
mysql_errno()
返回上次調用的MySQL函數的錯誤編號。
mysql_error()
返回上次調用的MySQL函數的錯誤消息。
mysql_escape_string()
為了用在SQL語句中,對特殊字元進行轉義處理。
mysql_fetch_field()
返回下一個表欄位的類型。
mysql_fetch_field_direct()
給定欄位編號,返回表欄位的類型。
mysql_fetch_fields()
返回所有欄位結構的數組。
mysql_fetch_lengths()
返回當前行中所有列的長度。
mysql_fetch_row()
從結果集中獲取下一行
mysql_field_seek()
將列游標置於指定的列。
mysql_field_count()
返回上次執行語句的結果列的數目。
mysql_field_tell()
返回上次mysql_fetch_field()所使用欄位游標的位置。
mysql_free_result()
釋放結果集使用的內存。
mysql_get_client_info()
以字元串形式返回客戶端版本信息。
mysql_get_client_version()
以整數形式返回客戶端版本信息。
mysql_get_host_info()
返回描述連接的字元串。
mysql_get_server_version()
以整數形式返回伺服器的版本號。
mysql_get_proto_info()
返回連接所使用的協議版本。
mysql_get_server_info()
返回伺服器的版本號。
mysql_info()
返回關於最近所執行查詢的信息。
mysql_init()
獲取或初始化MYSQL結構。
mysql_insert_id()
返回上一個查詢為AUTO_INCREMENT列生成的ID。
mysql_kill()
殺死給定的線程。
mysql_library_end()
最終確定MySQL C API庫。
mysql_library_init()
初始化MySQL C API庫。
mysql_list_dbs()
返回與簡單正則表達式匹配的資料庫名稱。
mysql_list_fields()
返回與簡單正則表達式匹配的欄位名稱。
mysql_list_processes()
返回當前伺服器線程的列表。
mysql_list_tables()
返回與簡單正則表達式匹配的表名。
mysql_more_results()
檢查是否還存在其他結果。
mysql_next_result()
在多語句執行過程中返回/初始化下一個結果。
mysql_num_fields()
返回結果集中的列數。
mysql_num_rows()
返回結果集中的行數。
mysql_options()
為mysql_connect()設置連接選項。
mysql_ping()
檢查與伺服器的連接是否工作,如有必要重新連接。
mysql_query()
執行指定為「以Null終結的字元串」的SQL查詢。
mysql_real_connect()
連接到MySQL伺服器。
mysql_real_escape_string()
考慮到連接的當前字元集,為了在SQL語句中使用,對字元串中的特殊字元進行轉義處理。
mysql_real_query()
執行指定為計數字元串的SQL查詢。
mysql_refresh()
刷新或復位表和高速緩沖。
mysql_reload()
通知伺服器再次載入授權表。
mysql_rollback()
回滾事務。
mysql_row_seek()
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。
mysql_row_tell()
返回行游標位置。
mysql_select_db()
選擇資料庫。
mysql_server_end()
最終確定嵌入式伺服器庫。
mysql_server_init()
初始化嵌入式伺服器庫。
mysql_set_server_option()
為連接設置選項(如多語句)。
mysql_sqlstate()
返回關於上一個錯誤的SQLSTATE錯誤代碼。
mysql_shutdown()
關閉資料庫伺服器。
mysql_stat()
以字元串形式返回伺服器狀態。
mysql_store_result()
檢索完整的結果集至客戶端。
mysql_thread_id()
返回當前線程ID。
mysql_thread_safe()
如果客戶端已編譯為線程安全的,返回1。
mysql_use_result()
初始化逐行的結果集檢索。
mysql_warning_count()
返回上一個SQL語句的告警數。 詳見:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-function-overview
http://dev.mysql.com/doc/refman/5.0/en/c.html
E. 在linux下使用C語言操作資料庫有哪些方法
兩種方法,一是自己設計表格式,並存儲在相應文件中,然後讀取;
第二種,利用已有的第三方哈希表資料庫,比如qdbm,具體的編程可以參考相應資料庫的幫助文檔
F. C/C++語言怎麼操作資料庫
可以做到,C語言可以做到,但是這方面的技術有點難哦,就是要讀文件的頭,你去看那個C語言游戲編程 就講了操作數據的原理
G. 如何在Linux下用C/C++語言操作資料庫sqlite3
1.SQLite資料庫特點(1)SQLite資料庫是開源的嵌入式資料庫,無需獨立的資料庫引擎,直接嵌入到應用程序進程中,因此,通過API,應用程序可以直接操作它。(2)事務的處理是原子的,一致的,獨立的,可持久化的(ACID),即使在系統崩潰和掉電後。(3)SQLite資料庫通過獨占性與共享鎖來實現事務的獨立處理。(4)一個單獨的跨平台的磁碟文件就能夠存儲一個資料庫。(5)能支持2TB級的數據。(6)自包含,無外部依賴性。(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等數據類型。(8)SQLite資料庫沒有用戶帳戶的概念。資料庫的許可權僅依賴於文件系統。2.SQLite資料庫的基本操作(1)建立資料庫sqlite3data.sqlite3在當前目錄下建立了名為data.sqlite3的資料庫。(2)建立數據表createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnumNUMERIC,bttimeTEXT,tcountNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC);建立了名為call_list的數據表,有7個欄位,分別為id,type,telnum,bttime,tcount,charge_sum.charge_rate.(3)向數據表中插入數據insertintocall_listvalues($num,1,2,'new',4,5,6);(4)查詢數據表中的數據select*fromcall_list;(5)修改call_list表中的數據updatecall_listsetid=00001000whereid=10001;(6)刪除表中的數據記錄deletefromcall_listwhereid=1000;(7)SQlite中的其它常用命令.tables-列出所有的資料庫中的數據表.schematablename-列出指定數據表的結構.quit-離開資料庫(8)SQLite資料庫的導入與導出a.將data.sqlite資料庫的數據全部導出:sqlite3data.sqlite>.outputdd.sql>.mp這樣,數據就保存在dd.sql的文件中,注意這個文件不是資料庫,而是SQL語句。然後再把這些數據導入到另外一個資料庫data1.sqlite資料庫中。sqlite3data1.sqlite>.readdd.sql這樣,數據就從data.sqlite資料庫復制到data1.sqlite資料庫中去了。b.將數據表中的數據導出到a.txt中去.outputa.txt//輸出重定向到a.txtselect*fromcall_list;c.將導出的表中的數據導入到另一個資料庫的新建的表中去如:當從data.sqlite中的call_list表中導出了數據,再導入到另外一個資料庫表call中去。首先建立表call.然後.importa.txtcall即可。3.C語言操作Sqlite資料庫API:intsqlite3_open(constchar*filename,sqlite3**ppdb);第一個參數用來指定資料庫文件名。第二個參數是一個資料庫標識符指針。如果打開資料庫成功,則返回0,否則返回一個錯誤代碼。intsqlite3_close(sqlite3*);傳遞的參數是資料庫標識符指針用來關閉資料庫,操作成功是返回0,否則返回一個錯誤代碼。intsqlite3_errcode(sqlite3*db);constchar*sqlite3_errmsg(sqlite3*db);constchar*sqlite3_errmsg16(sqlite3*db);這三個函數都是返回錯誤信息,第一個函數返回的是最近調用資料庫介面的錯誤代碼,第二,第三個函數是返回最近調用資料庫介面的錯誤信息。第二個函數返回的錯誤信息是用UTF-8編碼的,第三個函數返回的錯誤信息是用UTF-16編碼的。intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);這個函數非常重用,是用來執行SQLite資料庫的SQL語句的。第一個參數是sqlite資料庫標識符指針。第二個參數是要執行的SQL語句。第三個參數是一個回調函數,在執行查詢操作時用到,其它的操作可以傳空值即NULL。第四個參數是傳遞給回調函數第一個參數的實參。第五個參數是一個錯誤信息。回調函數:intcallback(void*,intargc,char**argv,char**cname);第一個參數是從sqlite3_exec傳遞過來的參數,可以為任意的類型。第二個參數是查詢的列數。第三個參數是查詢結果集的值。第四個參數是列名。intsqlite3_get_table(sqlite3*db,constchar*sql,char***result,int*row,int*col,char**errmsg);這個函數主要是用來查詢的。第一個參數是資料庫描述符指針第二個參數是SQL語句。第三個參數是查詢的結果集。第四個參數是結果集中的行數。第五個參數是結果集中的列數。第六個參數是錯誤信息。它查詢出的行數是從欄位名開始的。即第0行是欄位名。實例:/**本例主要實現用Sqlite的回調函數進行查詢intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,errmsg);第一個參數是資料庫標識符第二個參數是要執行的sql命令第三個參數是回調函數第四個參數是回調函數的第一個參數第五個參數是用於指示錯誤信息其中回調函數的形式:int_sql_callback(void*arg,intargc,char**argv,char**cname);第二個參數指示結果集中的列數第三個參數是保存結果集的字元串第四個參數是結果集中的列名**/#include#include#include#include#include#includeint_call_back(void*arg,intargc,char**argv,char**cname);intmain(){intres;constchar*dbfile="data.sqlite1";char*errmsg=NULL;sqlite3*db;res=sqlite3_open(dbfile,&db);if(res!=0){perror("資料庫打開失敗");exit(EXIT_FAILURE);}//創建一張數據表constchar*sqlcreate="createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnumNUMERIC,bttimeTEXT,tcountNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC)";res=sqlite3_exec(db,sqlcreate,NULL,NULL,&errmsg);if(res!=0){perror("建立數據表失敗");exit(EXIT_FAILURE);}//插入100000條數據intnum=0;structtimevaltv;gettimeofday(&tv,NULL);longold=tv.tv_sec;while(num<100000){constchar*sqlinsert="insertintocall_listvalues($num,1,2,'new',4,5,6)";res=sqlite3_exec(db,sqlinsert,NULL,NULL,&errmsg);//插入時不需要用到回調函數if(res!=0){perror("插入失敗");exit(EXIT_FAILURE);}num++;}gettimeofday(&tv,NULL);printf("插入100000條數據的時間為:%d秒/n",(tv.tv_sec-old));//更新constchar*sqlupdate="updatecall_listsetid=00001000whereid=10001";res=sqlite3_exec(db,sqlupdate,NULL,NULL,&errmsg);if(res!=0){perror("更新數據失敗");exit(EXIT_FAILURE);}//刪除constchar*sqldelete="deletefromcall_listwhereid=1000";res=sqlite3_exec(db,sqldelete,NULL,NULL,&errmsg);if(res!=0){perror("刪除數據失敗");exit(EXIT_FAILURE);}//查詢constchar*sqlquery="select*fromcall_list";res=sqlite3_exec(db,sqlquery,&_call_back,NULL,&errmsg);if(res!=0){printf("%s/n",errmsg);perror("執行失敗/n");exit(EXIT_FAILURE);}res=sqlite3_close(db);if(res!=0){perror("資料庫關閉失敗");exit(EXIT_FAILURE);}exit(EXIT_SUCCESS);}int_call_back(void*arg,intargc,char**argv,char**cname){inti;//二重指針可以看成指針數組for(i=0;i
H. 用C語言如何對MySQL資料庫進行操作
里的大部分代碼參考了MySQL發行包裡面的.c源文件,大家也可以去裡面找找相關的代碼,下面這段代碼實現了連接到本地MySQL伺服器上9tmd_bbs_utf8資料庫,從數據表tbb_user中根據輸入的userid取得該用戶的用戶名並列印輸出到終端。
if defined(_WIN32) || defined(_WIN64)為了支持windows平台上的編譯
#include <windows.h> #endif #include <stdio.h> #include <stdlib.h> #include "mysql.h"
我的機器上該文件在/usr/local/include/mysql下
定義MySQL資料庫操作的宏,也可以不定義留著後面直接寫進代碼
define SELECT_QUERY "select username from tbb_user where userid = %d" int main(int argc, char **argv)char **argv 相當於 char *argv[] {
MYSQL mysql,*sock;定義資料庫連接的句柄,它被用於幾乎所有的MySQL函數
MYSQL_RES *res;查詢結果集,結構類型
MYSQL_FIELD *fd ;包含欄位信息的結構
MYSQL_ROW row ;存放一行查詢結果的字元串數組
char qbuf[160];存放查詢sql語句字元串
if (argc != 2) { //檢查輸入參數 fprintf(stderr,"usage : mysql_select <userid>\n\n"); exit(1); } mysql_init(&mysql); if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) { fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql)); perror(""); exit(1); } sprintf(qbuf,SELECT_QUERY,atoi(argv[1])); if(mysql_query(sock,qbuf)) { fprintf(stderr,"Query failed (%s)\n",mysql_error(sock)); exit(1); } if (!(res=mysql_store_result(sock))) { fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock)); exit(1); } printf("number of fields returned: %d\n",mysql_num_fields(res)); while (row = mysql_fetch_row(res)) { printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ; puts( "query ok !\n" ) ; } mysql_free_result(res); mysql_close(sock); exit(0); return 0;
為了兼容大部分的編譯器加入此行
}
編譯的時候,使用下面的命令
gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 後面兩個選項可選,根據您的環境情況運行的時候,執行下面的命令
./mysql_select 1
將返回如下結果:
number of fields returned: 1 Ther userid #1 's username is: Michael query ok !
上面的代碼我想大部分都能看明白,不明白的可以參考一下MySQL提供的有關C語言API部分文檔,各個函數都有詳細說明,有時間我整理一份常用的API說明出來。
I. C語言如何調用資料庫,並對資料庫進行操作
我記得mysql有C語言處理介面的........mysql/include目錄