c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理
2011-05-09 wcdj
可以通過許多不同的編程語言來訪問MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等。本文主要總結(jié)使用C語言接口如何訪問MySQL數(shù)據(jù)。
(一) 連接例程
(二) 錯誤處理
(一) 連接例程
用C語言連接MySQL數(shù)據(jù)庫包含兩個步驟:
(1) 初始化一個連接句柄結(jié)構(gòu)。使用mysql_init?來初始化連接句柄。
(2) 實際進行連接。使用mysql_real_connect來向一個連接提供參數(shù)。
其余步驟:
(3) 使用完連接之后,使用?mysql_close?關(guān)閉連接。
(4)?mysql_options用于設(shè)置選項。注意:僅能在 mysql_init 和 mysql_real_connect 之間調(diào)用。mysql_options 一次只能設(shè)置一個選項,所以每設(shè)置一個選項就得調(diào)用它一次。
具體過程如下:
登錄mysql
$ mysql -u root -p
輸入密碼
創(chuàng)建一個本地用戶wcdj
mysql> GRANT ALL ON *.* TO wcdj@localhost IDENTIFIED BY 'secretpassword';?? (注意:最后的分號)
退出root用戶
mysql> /q
Bye
登錄新創(chuàng)建的用戶wcdj
$ mysql -u wcdj --password=secretpassword
創(chuàng)建一個新的數(shù)據(jù)庫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ù)庫)
在新的數(shù)據(jù)庫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
測試:
$ ./connect1
Connection success
$
(二) 錯誤處理
(1) unsigned int?mysql_errno(MYSQL *connection);??? (錯誤碼)
(2) char *mysql_error(MYSQL *connection);??? ??? (文本錯誤信息)
可以通過調(diào)用 mysql_errno 并傳遞連接結(jié)構(gòu)來獲得錯誤碼,它通常都是非0值。如果未設(shè)定錯誤碼,它將返回0。
注意:因為每次調(diào)用庫都會更新錯誤碼,所以你只能得到最后一個執(zhí)行命令的錯誤碼。但是,上面列出的兩個錯誤檢查例程是例外,它們不會導(dǎo)致錯誤碼的更新。
也可以調(diào)用 mysql_error ,來提供有意義的文本信息而不是單調(diào)的錯誤碼。這些信息被寫入一些內(nèi)部靜態(tài)內(nèi)存空間中,所以如果想保存錯誤文本,你需要把它復(fù)制到別的地方。
注意:當(dāng)調(diào)用 mysql_real_connect 時會遇到一個問題,因為它在失敗時返回NULL指針,并沒有提供一個錯誤碼。但如果你將連接句柄作為一個變量,那么即使 mysql_real_connect 失敗,你仍然能夠處理它。
connect2.c
使用非動態(tài)分配的連接結(jié)構(gòu),以及編寫一些基本的錯誤處理代碼。
#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 這個數(shù)據(jù)庫,運行 connect2 將提示如下錯誤信息:
測試:
$ ./connect2
Connection failed
Connection error 1049: Unknown database 'newdatabase'
登錄mysql
$ mysql -u wcdj --password=123
創(chuàng)建一個新的數(shù)據(jù)庫newdatabase
mysql> CREATE DATABASE newdatabase;
退出wcdj用戶
mysql> /q
再此測試 connect2:
Connection success
修改 connect2.c 中的密碼 123 為一個錯誤的密碼,再測試會提示如下錯誤信息:
Connection failed
Connection error 1045: Access denied for user 'wcdj'@'localhost' (usig password: YES)
參考:
Linux 程序設(shè)計(第4版)第8章 P.283
總結(jié)
以上是生活随笔為你收集整理的c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win主机上搭建php网站运行环境,Wi
- 下一篇: sqlserver 字符串转化数值函数_