真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么嵌入c語言,c語言操作mysql

c語言怎么連接mysql數(shù)據(jù)庫 代碼

//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路徑

為柳林等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及柳林網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、柳林網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

//在工程設(shè)置-》鏈接》庫模塊中添加 libmysql.lib

#include stdio.h

#include time.h

#include string.h

#include winsock.h

#include "E:\wamp\bin\mysql\mysql5.5.8\include\mysql.h"

void main(){

MYSQL *conn;

MYSQL_RES *res;

MYSQL_ROW row;

char *server ="localhost";

char *user ="root";

char *password="";

char *database="test";

char sql[1024]="select * from chinaren";

conn=mysql_init(NULL);

if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0)){

fprintf(stderr,"%s\n",mysql_error(conn));

exit(1);

}

if(mysql_query(conn,sql)){

fprintf(stderr,"%s\n",mysql_error(conn));

exit(1);

}

res=mysql_use_result(conn);

while((row = mysql_fetch_row(res))!=NULL){

printf("%s\n",row[2]);

}

mysql_free_result(res);

mysql_close(conn);

}

===============================

#if defined(_WIN32) || defined(_WIN64) //為了支持windows平臺(tái)上的編譯

#include windows.h

#endif

#include stdio.h

#include stdlib.h

#include "mysql.h"

//定義數(shù)據(jù)庫操作的宏,也可以不定義留著后面直接寫進(jìn)代碼

#define SELECT_QUERY "show tables;"

int main(int argc, char **argv) //char **argv 相當(dāng)于 char *argv[]

{

MYSQL mysql,*handle; //定義數(shù)據(jù)庫連接的句柄,它被用于幾乎所有的MySQL函數(shù)

MYSQL_RES *result; //查詢結(jié)果集,結(jié)構(gòu)類型

MYSQL_FIELD *field ; //包含字段信息的結(jié)構(gòu)

MYSQL_ROW row ; //存放一行查詢結(jié)果的字符串?dāng)?shù)組

char querysql[160]; //存放查詢sql語句字符串

//初始化

mysql_init(mysql);

//連接數(shù)據(jù)庫

if (!(handle = mysql_real_connect(mysql,"localhost","user","pwd","dbname",0,NULL,0))) {

fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(mysql));

}

sprintf(querysql,SELECT_QUERY,atoi(argv[1]));

//查詢數(shù)據(jù)庫

if(mysql_query(handle,querysql)) {

fprintf(stderr,"Query failed (%s)\n",mysql_error(handle));

}

//存儲(chǔ)結(jié)果集

if (!(result=mysql_store_result(handle))) {

fprintf(stderr,"Couldn't get result from %s\n", mysql_error(handle));

}

printf("number of fields returned: %d\n",mysql_num_fields(result));

//讀取結(jié)果集的內(nèi)容

while (row = mysql_fetch_row(result)) {

printf("table: %s\n",(((row[0]==NULL)(!strlen(row[0]))) ? "NULL" : row[0]) ) ;

}

//釋放結(jié)果集

mysql_free_result(result);

//關(guān)閉數(shù)據(jù)庫連接

mysql_close(handle);

system("PAUSE");

//為了兼容大部分的編譯器加入此行

return 0;

}

mysql中能在C程序中通過嵌入式SQL訪問數(shù)據(jù)庫么

先看結(jié)構(gòu)體

----------------------------------------------?

以下代碼塊是用來連接數(shù)據(jù)庫的通訊過程,要連接MYSQL,必須建立MYSQL實(shí)例,通過mysql_init初始化方能開始進(jìn)行連接.

typedef?struct?st_mysql?{

NET???????????net;????????????/*?Communication?parameters?*/

gptr??????????connector_fd;???/*?ConnectorFd?for?SSL?*/

char??????????*host,*user,*passwd,*unix_socket,

*server_version,*host_info,*info,*db;

unsigned?int?port,client_flag,server_capabilities;

unsigned?int?protocol_version;

unsigned?int?field_count;

unsigned?int?server_status;

unsigned?long?thread_id;??????/*?Id?for?connection?in?server?*/

my_ulonglong?affected_rows;

my_ulonglong?insert_id;???????/*?id?if?insert?on?table?with?NEXTNR?*/

my_ulonglong?extra_info;??????????????/*?Used?by?mysqlshow?*/

unsigned?long?packet_length;

enum?mysql_status?status;

MYSQL_FIELD???*fields;

MEM_ROOT??????field_alloc;

my_bool???????free_me;????????/*?If?free?in?mysql_close?*/

my_bool???????reconnect;??????/*?set?to?1?if?automatic?reconnect?*/

struct?st_mysql_options?options;

char??????????scramble_buff[9];

struct?charset_info_st?*charset;

unsigned?int?server_language;

}?MYSQL;

這個(gè)結(jié)構(gòu)代表返回行的一個(gè)查詢的(SELECT,?SHOW,?DESCRIBE,?EXPLAIN)的結(jié)果。返回的數(shù)據(jù)稱為“數(shù)據(jù)集”,用過數(shù)據(jù)庫的朋友應(yīng)該對(duì)數(shù)據(jù)庫中查詢后得到的結(jié)果集不會(huì)陌生,在C的API里對(duì)應(yīng)的就是MYSQL_RES了,從數(shù)據(jù)庫讀取數(shù)據(jù),最后就是從MYSQL_RES中讀取數(shù)據(jù)。

typedef?struct?st_mysql_res?{

my_ulonglong?row_count;

unsigned?int?field_count,?current_field;

MYSQL_FIELD???*fields;

MYSQL_DATA????*data;

MYSQL_ROWS????*data_cursor;

MEM_ROOT??????field_alloc;

MYSQL_ROW?????row;????????????/*?If?unbuffered?read?*/

MYSQL_ROW?????current_row;????/*?buffer?to?current?row?*/

unsigned?long?*lengths;???????/*?column?lengths?of?current?row?*/

MYSQL?????????*handle;????????/*?for?unbuffered?reads?*/

my_bool???????eof;????????????/*?Used?my?mysql_fetch_row?*/

}?MYSQL_RES;

----------------------------------------------

再看函數(shù):

C語言操作mysql數(shù)據(jù)?常用函數(shù)

所需頭文件:?#include?mysql/mysql.h

功能:??獲得或初始化一個(gè)MYSQL結(jié)構(gòu)

函數(shù)原型:?MYSQL?*mysql_init(MYSQL?*mysql)

函數(shù)返回值:?一個(gè)被始化的MYSQL*句柄

備注:??在內(nèi)存不足的情況下,返回NULL

所需頭文件:?#include?mysql/mysql.h

函數(shù)功能:?關(guān)閉一個(gè)服務(wù)器連接,并釋放與連接相關(guān)的內(nèi)存

函數(shù)原型:?void?mysql_close(MYSQL?*mysql);

函數(shù)傳入值:?MYSQL:類型的指針

函數(shù)返回值:?無

所需頭文件:?#include?mysql/mysql.h

函數(shù)功能:?連接一個(gè)MySQL服務(wù)器

函數(shù)原型:?MYSQL?*?mysql_connect(MYSQL?*mysql,const?char?*host,const?char?*user,const?char?*passwd);

函數(shù)傳入值:?mysql表示一個(gè)現(xiàn)存mysql結(jié)構(gòu)的地址

host表示MYSQL服務(wù)器的主機(jī)名或IP

user表示登錄的用戶名

passwd表示登錄的密碼

函數(shù)返回值:?如果連接成功,一個(gè)MYSQL?*連接句柄:如果連接失敗,NULL

備注:??該函數(shù)不推薦,使用mysql_real_connect()代替

所需文件:?#include?mysql/mysql.h

函數(shù)功能:?MYSQL?*mysql_real_connect(MYSQL?*mysql,const?char?*host,const?char?*user,const?char?*passwd,const?char?*db,unsigned?int?port,const?char?*unix_socket,unsigned?int?client_flag);

函數(shù)傳入值:?mysql表示一個(gè)現(xiàn)存mysql結(jié)構(gòu)的地址

host表示MYSQL服務(wù)器的主機(jī)名或IP

user表示登錄的用戶名

passwd表示登錄的密碼

db表示要連接的數(shù)據(jù)庫

port表示MySQL服務(wù)器的TCP/IP端口

unix_socket表示連接類型

client_flag表示MySQL運(yùn)行ODBC數(shù)據(jù)庫的標(biāo)記

函數(shù)返回值:?如果連接成功,一個(gè)MYSQL*連接句柄:如果連接失敗,NULL

所需頭文件:?#include?mysql/mysql.h

函數(shù)功能:?返回最新的UPDATE,DELETE或INSERT查詢影響的行數(shù)

函數(shù)傳入值:?MYSQL:類型指針

函數(shù)返回值:?大于零的一個(gè)整數(shù)表示受到影響或檢索出來的行數(shù)。零表示沒有區(qū)配查序中WHERE子句的記錄或目前還沒有查詢被執(zhí)行;-1表示查詢返回一個(gè)錯(cuò)誤,或?qū)τ谝粋€(gè)SELECT查詢

所需頭文件:?#include?mysql/mysql.h

函數(shù)功能:?對(duì)指定的連接執(zhí)行查詢

函數(shù)原型:?int?mysql_query(MYSQL?*mysql,const?char?*query);

函數(shù)傳入值:?query表示執(zhí)行的SQL語句

函數(shù)返回值:?如果查詢成功,為零,出錯(cuò)為非零。

相關(guān)函數(shù):?mysql_real_query

所需頭文件:?#include?mysql/mysql.h

函數(shù)功能:?為無緩沖的結(jié)果集獲得結(jié)果標(biāo)識(shí)符

函數(shù)原形:?MYSQL_RES?*mysql_use_result(MYSQL?*mysql);

函數(shù)傳入值:?MYSQL:類型的指針

函數(shù)返回值:?一個(gè)MYSQL_RES結(jié)果結(jié)構(gòu),如果發(fā)生一個(gè)錯(cuò)誤發(fā)NULL

#incluee?mysql/mysql.h

檢索一個(gè)結(jié)果集合的下一行

MYSQL_ROW?mysql_fetch_row(MYSQL_RES?*result);

MYSQL_RES:結(jié)構(gòu)的指針

下一行的一個(gè)MYSQL_ROW結(jié)構(gòu)。如果沒有更多的行可檢索或如果出現(xiàn)一個(gè)錯(cuò)誤,NULL

#include?mysql/mysql.h

返回指定結(jié)果集中列的數(shù)量

unsigned?int?mysql_num_fields(MYSQL_RES?*res);

MYSQL_RES?結(jié)構(gòu)的指針

結(jié)果集合中字段數(shù)量的一個(gè)無符號(hào)整數(shù)

#include?mysql/mysql.h

創(chuàng)建一個(gè)數(shù)據(jù)庫

int?mysql_create_db(MYSQL?*mysql,const?char?*db);

MYSQL:類型的指針

db:要?jiǎng)?chuàng)建的數(shù)據(jù)庫名

如果數(shù)據(jù)庫成功地被創(chuàng)建,返回零,如果發(fā)生錯(cuò)誤,為非零。

#include?mysql/mysql.h

選擇一個(gè)數(shù)據(jù)庫

int?mysql_select_db(MYSQL?*mysql,const?char?*db);

MYSQL:類型的指針

db:要?jiǎng)?chuàng)建的數(shù)據(jù)庫名

如果數(shù)據(jù)庫成功地被創(chuàng)建,返回零,如果發(fā)生錯(cuò)誤,為非零。?

----------------------------------------------?

再看例子:?

很多人用到MySQL來開發(fā)一些項(xiàng)目,有時(shí)為了性能,我們會(huì)直接用C語言來開發(fā)相關(guān)的模塊,尤其在我們的web應(yīng)用中,雖然PHP、JSP等腳本均?提供了MySQL的接口,但是顯然直接使用C語言具有更好的安全性和性能,Michael以前用PHP開發(fā)的多個(gè)項(xiàng)目中就使用了C語言編寫的這類接口,然?后再編譯到php里面,供php腳本直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連接MySQL數(shù)據(jù)庫,并且讀取里面的?數(shù)據(jù)返回,同時(shí)如何進(jìn)行編譯。

這里的大部分代碼參考了MySQL發(fā)行包里面的.c源文件,大家也可以去里面找找相關(guān)的代碼,下面這段代碼實(shí)現(xiàn)了連接到本地MySQL服務(wù)器上9tmd_bbs_utf8數(shù)據(jù)庫,從數(shù)據(jù)表tbb_user中根據(jù)輸入的userid取得該用戶的用戶名并打印輸出到終端。

#if?defined(_WIN32)?||?defined(_WIN64)?//為了支持windows平臺(tái)上的編譯

#include?windows.h

#endif

#include?stdio.h

#include?stdlib.h

#include?"mysql.h"??//我的機(jī)器上該文件在/usr/local/include/mysql下

//定義數(shù)據(jù)庫操作的宏,也可以不定義留著后面直接寫進(jìn)代碼

#define?SELECT_QUERY?"select?username?from?tbb_user?where?userid?=?%d"

int?main(int?argc,?char?**argv)?//char?**argv?相當(dāng)于?char?*argv[]

{

MYSQL?mysql,*sock;????//定義數(shù)據(jù)庫連接的句柄,它被用于幾乎所有的MySQL函數(shù)

MYSQL_RES?*res;???????//查詢結(jié)果集,結(jié)構(gòu)類型

MYSQL_FIELD?*fd?;?????//包含字段信息的結(jié)構(gòu)

MYSQL_ROW?row?;???????//存放一行查詢結(jié)果的字符串?dāng)?shù)組

char?qbuf[160];??????//存放查詢sql語句字符串

if?(argc?!=?2)?{?//檢查輸入?yún)?shù)

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;???//.?為了兼容大部分的編譯器加入此行

}

編譯的時(shí)候,使用下面的命令

gcc?-o?mysql_select?./mysql_select.c?-I/usr/local/include/mysql?-L/usr/local/lib/mysql?-lmysqlclient?(-lz)?(-lm)?后面兩個(gè)選項(xiàng)可選,根據(jù)您的環(huán)境情況

運(yùn)行的時(shí)候,執(zhí)行下面的命令

./mysql_select?1

將返回如下結(jié)果:

number?of?fields?returned:?1

Ther?userid?#1?'s?username?is:?Michael

query?ok?!

C語言怎樣連接mysql數(shù)據(jù)庫

mysql是有c語言接口的,安裝相應(yīng)庫后就可以鏈接了,一般連接mysql的函數(shù)是mysql_connect或者mysql_real_connect(大概就是這么拼的吧。。。)可以使用mysql_query執(zhí)行sql語句

C語言中如何將變量插入mySQL數(shù)據(jù)庫和mySQL?C語言封裝變量的問題如何解決?

假如用戶輸入的姓名和年齡值分別保存在變量name,age中:

char sql_insert[200];

sprintf(sql_insert, "INSERT INTO table values('%s','%d');", name, age);

mysql_query(mysql_conn, sql_insert);

上述語句在執(zhí)行完sprintf語句后,sql_insert中保存的是INSERT查詢語句字符串,sql_insert作為mysql_query()語句的參數(shù)即可實(shí)現(xiàn)正確的插入。

c語言怎么把鏈表數(shù)據(jù)寫進(jìn)mysql

方法如下:

1.頭文件:

#include

#include

#include//這個(gè)是必需要包含的,下面對(duì)mysql的所有操作函數(shù),都出自這里

2.定義一個(gè)MYSQL變量:

MYSQLmysql;

這里MYSQL是一個(gè)用于連接MySql數(shù)據(jù)庫的變量。

在后面對(duì)mysql數(shù)據(jù)庫的操作中,我們就用這個(gè)MYSQL變量作為句柄的。

3.定義數(shù)據(jù)庫參數(shù):

charhost[32]=”localhost”;

charuser[32]=”username”;

charpasswd[32]=”pwd”;

chardbname[32]=”testdb”;

4.數(shù)據(jù)庫操作

1).初始化數(shù)據(jù)庫:

mysql_init(mysql);

2).連接數(shù)據(jù)庫:

mysql_real_connect(mysql,host,user,passwd,dbname,0,NULL,0);

我們?cè)诓僮鲿r(shí),可以對(duì)以上的函數(shù)進(jìn)行if測(cè)試,如果初始化或者連接出錯(cuò),作出相應(yīng)提示,以便調(diào)試。

5.對(duì)數(shù)據(jù)庫的操作:

Mysql_query(mysql,“select*fromtestdbwherecondition”);

我們?cè)趯?shí)際操作中,為了更方便的使用程序中的某些變量,我們將會(huì)用到一個(gè)函數(shù):

intsprintf(char*str,constchar*format,?);

這個(gè)函數(shù)用來格式化我們的字符串,然后將變量按照給你的格式,賦給第一個(gè)參數(shù)。

我們使用這個(gè)方法方法可以很方便的使用我們的變量來對(duì)數(shù)據(jù)庫進(jìn)行操作。例如我們將要進(jìn)行數(shù)據(jù)庫的查詢操作,我們就可以這樣使用:

sprintf(sql,”select*fromtestdbwhereusername=‘%s’”,u_name);

然后使用mysql_query(mysql,sql)進(jìn)行查詢。

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),屬于Oracle旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在WEB應(yīng)用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。

鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù)域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域。相比于線性表順序結(jié)構(gòu),操作復(fù)雜。由于不必須按順序存儲(chǔ),鏈表在插入的時(shí)候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個(gè)節(jié)點(diǎn)或者訪問特定編號(hào)的節(jié)點(diǎn)則需要O(n)的時(shí)間,而線性表和順序表相應(yīng)的時(shí)間復(fù)雜度分別是O(logn)和O(1)。

linux gcc mysql 如何在C語言中使用嵌入式SQL編程? 要什么頭文件?如何編譯?越詳細(xì)越好

最起碼包含mysql.h

實(shí)例代碼:

#include stdlib.h

#include stdio.h

#include "mysql.h"

int main(int argc, char *argv[]) {

MYSQL *conn_ptr;

conn_ptr = mysql_init(NULL);

if (!conn_ptr) {

fprintf(stderr, "mysql_init failed\n");

return EXIT_FAILURE;

}

conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret",

"foo", 0, NULL, 0);//連接數(shù)據(jù)庫

if (conn_ptr) {

printf("Connection success\n");

} else {

printf("Connection failed\n");

}

mysql_close(conn_ptr);

return EXIT_SUCCESS;

}

編譯:(假定上面文件取名 con.c,在當(dāng)前目錄下)

gcc -I/usr/include/mysql con.c -L/usr/lib/mysql -lmysqlclient -o con


名稱欄目:mysql怎么嵌入c語言,c語言操作mysql
URL網(wǎng)址:http://weahome.cn/article/hddods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部