日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理

發(fā)布時(shí)間:2025/3/11 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2011-05-09 wcdj

可以通過(guò)許多不同的編程語(yǔ)言來(lái)訪問(wèn)MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等。本文主要總結(jié)使用C語(yǔ)言接口如何訪問(wèn)MySQL數(shù)據(jù)。

(一) 連接例程

(二) 錯(cuò)誤處理

(一) 連接例程

用C語(yǔ)言連接MySQL數(shù)據(jù)庫(kù)包含兩個(gè)步驟:

(1) 初始化一個(gè)連接句柄結(jié)構(gòu)。使用mysql_init?來(lái)初始化連接句柄。

(2) 實(shí)際進(jìn)行連接。使用mysql_real_connect來(lái)向一個(gè)連接提供參數(shù)。

其余步驟:

(3) 使用完連接之后,使用?mysql_close?關(guān)閉連接。

(4)?mysql_options用于設(shè)置選項(xiàng)。注意:僅能在 mysql_init 和 mysql_real_connect 之間調(diào)用。mysql_options 一次只能設(shè)置一個(gè)選項(xiàng),所以每設(shè)置一個(gè)選項(xiàng)就得調(diào)用它一次。

具體過(guò)程如下:

登錄mysql

$ mysql -u root -p

輸入密碼

創(chuàng)建一個(gè)本地用戶wcdj

mysql> GRANT ALL ON *.* TO wcdj@localhost IDENTIFIED BY 'secretpassword';?? (注意:最后的分號(hào))

退出root用戶

mysql> /q

Bye

登錄新創(chuàng)建的用戶wcdj

$ mysql -u wcdj --password=secretpassword

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

mysql> CREATE DATABASE newdatabase;

退出wcdj用戶

mysql> /q

編寫create_children.sql?文件,用于創(chuàng)建表和添加數(shù)據(jù)。

--

-- Create the table children

--

CREATE TABLE children (

childno int(11) NOT NULL auto_increment,

fname varchar(30),

age int(11),

PRIMARY KEY (childno)

);

--

-- Populate the table 'children'

--

INSERT INTO children(childno, fname, age) VALUES (1, 'wcdj', 21);

INSERT INTO children(childno, fname, age) VALUES (2, 'gerry', 22);

INSERT INTO children(childno, fname, age) VALUES (3, 'echo', 23);

登錄mysql

$ mysql -u wcdj --password=secretpassword newdatabase?? (注意,后面的newdatabase用于指定使用的數(shù)據(jù)庫(kù))

在新的數(shù)據(jù)庫(kù)newdatabase中創(chuàng)建表children并添加數(shù)據(jù):

mysql> /. create_children.sql

查看新添加的數(shù)據(jù):

SELECT * from children;

1?? wcdj??? 21

2?? gerry?? 22

3?? echo??? 23

connect1.c

#include?

#include?

#include?"mysql.h"

intmain()

{

MYSQL?*conn_ptr;

conn_ptr?=?mysql_init(NULL);

if(!conn_ptr)

{

fprintf(stderr,?"mysql_init?failed/n");

returnEXIT_FAILURE;

}

conn_ptr?=?mysql_real_connect(conn_ptr,?"localhost","wcdj","123","newdatabase",?0,?NULL,?0);

if(conn_ptr)

{

printf("Connection?success/n");

}

else

{

printf("Connection?failed/n");

}

mysql_close(conn_ptr);

returnEXIT_SUCCESS;

}

編譯程序:

$ gcc -I/usr/include/mysql connect1.c -L/usr/lib/mysql -lmysqlclient -o connet1

測(cè)試:

$ ./connect1

Connection success

$

(二) 錯(cuò)誤處理

(1) unsigned int?mysql_errno(MYSQL *connection);??? (錯(cuò)誤碼)

(2) char *mysql_error(MYSQL *connection);??? ??? (文本錯(cuò)誤信息)

可以通過(guò)調(diào)用 mysql_errno 并傳遞連接結(jié)構(gòu)來(lái)獲得錯(cuò)誤碼,它通常都是非0值。如果未設(shè)定錯(cuò)誤碼,它將返回0。

注意:因?yàn)槊看握{(diào)用庫(kù)都會(huì)更新錯(cuò)誤碼,所以你只能得到最后一個(gè)執(zhí)行命令的錯(cuò)誤碼。但是,上面列出的兩個(gè)錯(cuò)誤檢查例程是例外,它們不會(huì)導(dǎo)致錯(cuò)誤碼的更新。

也可以調(diào)用 mysql_error ,來(lái)提供有意義的文本信息而不是單調(diào)的錯(cuò)誤碼。這些信息被寫入一些內(nèi)部靜態(tài)內(nèi)存空間中,所以如果想保存錯(cuò)誤文本,你需要把它復(fù)制到別的地方。

注意:當(dāng)調(diào)用 mysql_real_connect 時(shí)會(huì)遇到一個(gè)問(wèn)題,因?yàn)樗谑r(shí)返回NULL指針,并沒有提供一個(gè)錯(cuò)誤碼。但如果你將連接句柄作為一個(gè)變量,那么即使 mysql_real_connect 失敗,你仍然能夠處理它。

connect2.c

使用非動(dòng)態(tài)分配的連接結(jié)構(gòu),以及編寫一些基本的錯(cuò)誤處理代碼。

#include?

#include?

#include?"mysql.h"

intmain()

{

MYSQL?my_connection;

mysql_init(&my_connection);

if(mysql_real_connect(&my_connection,"localhost","wcdj","123","newdatabase",?0,?NULL,?0))

{

printf("Connection?success/n");

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));

}

}

returnEXIT_SUCCESS;

}

編譯程序:

$ gcc -I/usr/include/mysql connect2.c -L/usr/lib/mysql -lmysqlclient -o connet2

假設(shè)當(dāng)前沒有創(chuàng)建 newdatabase 這個(gè)數(shù)據(jù)庫(kù),運(yùn)行 connect2 將提示如下錯(cuò)誤信息:

測(cè)試:

$ ./connect2

Connection failed

Connection error 1049: Unknown database 'newdatabase'

登錄mysql

$ mysql -u wcdj --password=123

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

mysql> CREATE DATABASE newdatabase;

退出wcdj用戶

mysql> /q

再此測(cè)試 connect2:

Connection success

修改 connect2.c 中的密碼 123 為一個(gè)錯(cuò)誤的密碼,再測(cè)試會(huì)提示如下錯(cuò)誤信息:

Connection failed

Connection error 1045: Access denied for user 'wcdj'@'localhost' (usig password: YES)

參考:

Linux 程序設(shè)計(jì)(第4版)第8章 P.283

總結(jié)

以上是生活随笔為你收集整理的c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。