c 連接mysql錯誤信息_使用C語言訪問MySQL數據 —— 連接和錯誤處理

2011-05-09 wcdj

可以通過許多不同的編程語言來訪問MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等。本文主要總結使用C語言接口如何訪問MySQL數據。

(一) 連接例程

(二) 錯誤處理

(一) 連接例程

用C語言連接MySQL數據庫包含兩個步驟:

(1) 初始化一個連接句柄結構。使用mysql_init?來初始化連接句柄。

(2) 實際進行連接。使用mysql_real_connect來向一個連接提供參數。

其余步驟:

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

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

具體過程如下:

登錄mysql

$ mysql -u root -p

輸入密碼

創建一個本地用戶wcdj

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

退出root用戶

mysql> /q

Bye

登錄新創建的用戶wcdj

$ mysql -u wcdj --password=secretpassword

創建一個新的數據庫newdatabase

mysql> CREATE DATABASE newdatabase;

退出wcdj用戶

mysql> /q

編寫create_children.sql?文件,用于創建表和添加數據。

--

-- 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用于指定使用的數據庫)

在新的數據庫newdatabase中創建表children并添加數據:

mysql> /. create_children.sql

查看新添加的數據:

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);??? ??? (文本錯誤信息)

可以通過調用 mysql_errno 并傳遞連接結構來獲得錯誤碼,它通常都是非0值。如果未設定錯誤碼,它將返回0。

注意:因為每次調用庫都會更新錯誤碼,所以你只能得到最后一個執行命令的錯誤碼。但是,上面列出的兩個錯誤檢查例程是例外,它們不會導致錯誤碼的更新。

也可以調用 mysql_error ,來提供有意義的文本信息而不是單調的錯誤碼。這些信息被寫入一些內部靜態內存空間中,所以如果想保存錯誤文本,你需要把它復制到別的地方。

注意:當調用 mysql_real_connect 時會遇到一個問題,因為它在失敗時返回NULL指針,并沒有提供一個錯誤碼。但如果你將連接句柄作為一個變量,那么即使 mysql_real_connect 失敗,你仍然能夠處理它。

connect2.c

使用非動態分配的連接結構,以及編寫一些基本的錯誤處理代碼。

#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

假設當前沒有創建 newdatabase 這個數據庫,運行 connect2 將提示如下錯誤信息:

測試:

$ ./connect2

Connection failed

Connection error 1049: Unknown database 'newdatabase'

登錄mysql

$ mysql -u wcdj --password=123

創建一個新的數據庫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 程序設計(第4版)第8章 P.283

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

eclipse編寫wordcount提交spark運行

采用集成了scala的eclipse編寫代碼 代碼: package wordcountimport org.apache.spark.SparkConf import org.apache.spark.SparkContextobject WordCount {def main(args: Array[String]): Unit {//非常重要,是通向Spark集群的入口val confnew SparkCon…

gitlab 刪除分支_如何刪除gitlab上默認受保護的master主分支

今天開發在檢查代碼的時候,發現master分支有問題,現在準備刪除此主分支,并且重新提交正確的代碼,不過在刪除時發現,master分支不能被刪除。ps:主分支一般都是線上分支,需要開發確認后并且做好備…

rsync服務擴展應用

rsync服務擴展應用① 守護進程多模塊功能配置第一步:修改配置文件 注:可以再vim中輸入:20,22copy22,表示復制20到22行到22行之后 vim /etc/rsyncd.conf[backup01]comment "backup dir by oldboy"path /backup[backup0…

NodeJs 安裝

進入官網下載,zip 安裝包 https://nodejs.org/en/download/ 解壓 配置環境變量到安裝目錄 cmd 測試 node -v npm -v

SSH秘鑰登錄服務器

一、查看本機 ssh 公鑰,生成公鑰 1.通過命令窗口 a. 打開你的 git bash 窗口 b. 進入 .ssh 目錄:cd ~/.ssh c. 找到 id_rsa.pub 文件:ls d. 查看公鑰:cat id_rsa.pub 或者 vim id_rsa.pub git–查看本機 ssh 公鑰&#xff0c…

mysql存入mtr數據_mysql mtr寫入數據

selenium 打開瀏覽器import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...Win8.1安裝Visual Studio 2015提示需要KB2919355http://www.microsoft.com/zh-cn/download/details.aspx?id42335 安裝說明: 1.若要…

diff git 代碼實現_Git 自救指南:這些坑你都跳得出嗎?

每天都會寫架構師文章,Java技術文章天天更新,感興趣的點個關注再走唄!Git 雖然因其分布式管理方式,不完全依賴網絡,良好的分支策略,容易部署等優點,已經成為最受歡迎的源代碼管理方式。但是一分…

HDU 4812 D Tree

HDU 4812 思路&#xff1a; 點分治 先預處理好1e6 3以內到逆元 然后用map 映射以分治點為起點的鏈的值a 成他的下標 u 然后暴力跑出以分治點兒子為起點的鏈的值b&#xff0c;然后在map里查找inv[b]*k 代碼&#xff1a; #include<bits/stdc.h> using namespace std; #d…

Angular CLI 安裝

安裝Angular 官網的教程&#xff0c;因為國內網絡環境原因&#xff0c;訪問不了服務器&#xff0c;導致安裝失敗。 1、先安裝NodeJs 安裝教程&#xff1a;http://blog.csdn.net/zengmingen/article/details/72650484 2、通過NodeJs中的模塊npm 命令行安裝 CLI 2.1、設置npm的…

go 寫文件_「go」 項目多個文件編程

golang 學習的時候很多sample 講的都是一個文件的go 文件怎么寫&#xff0c;但是現實中不可能所有的實現都寫到一個文件里面&#xff0c;按照功能的不同&#xff0c;要么拆分成不同的文件&#xff0c;要么拆分成不同的文件。下面有些個人的經驗分享下&#xff0c;如果有問題請指…

CycleGAN 各種變變變

轉載自 簡單介紹了一下GAN和DCGAN的原理。以及如何使用Tensorflow做一個簡單的生成圖片的demo。 Ian Goodfellow對GAN一系列工作總結的ppt&#xff0c;確實精彩&#xff0c;推薦&#xff1a;獨家 | GAN之父NIPS 2016演講現場直擊&#xff1a;全方位解讀生成對抗網絡的原理及未來…

pycharm與webstorm 2017 激活破解

原有的方式已經失效&#xff0c;見下面博文&#xff1a; https://blog.csdn.net/justszh/article/details/81484802

mysql blob 比較_與MSSQL對比學習MYSQL的心得(四)--BLOB數據類型

MYSQL里的BLOB數據類型BLOB是一個二進制大對象&#xff0c;用來存儲可變數量的數據。BLOB類型分為4種&#xff1a;TinyBlob、Blob、MediumBlob、LongBlob&#xff0c;這幾個類型之間的唯一區別是在存儲文件的最大大小上不同。MySQL的四種BLOB類型 類型 大小(單位&#xff1…

Webstorm常用快捷鍵

webstrom 使用 eclipse快鍵鍵 File--settings keymap 選擇 eclipse 原文鏈接&#xff1a;http://www.cnblogs.com/yeminglong/p/5995421.html ------------------以下是webstrom默認的----------------------------------- Ctrl/ 或 CtrlShift/ 注釋&#xff08;// 或者/…

VirtualBox 上安裝Debian 后分辨率設置

VirtualBox 上安裝Debian 后分辨率設置 首先要配置source.list打開終端&#xff0c; su 切換成root用戶&#xff0c; cd /etc/apt 然后編輯source.list rootdebian:/etc/apt# vi source.list 注釋deb cdrom:行&#xff0c;加以下源 deb http://deb.debian.org/debian stretc…

瘋狂的程序員_程序員的樂趣是什么?

作者&#xff1a;Java3y我是一個程序員&#xff0c;外行人都以為我是修電腦的&#xff0c;我笑了笑&#xff0c;隨意ctrl cctrl v了一把&#xff0c;想象著你們因為我的文章而開心不止&#xff0c;我感到充實而欣慰。想象著你們給我拼命點贊的樣子&#xff0c;是多么的滑稽&…

template多行編寫的方式

模板是包在 ECMAScript 2015 反引號 () 中的一個多行字符串。 反引號 () — 注意&#xff0c;不是單引號 () — 允許把一個字符串寫在多行上&#xff0c; 使 HTML 模板更容易閱讀。 反引號&#xff1a;鍵盤數字鍵1 旁邊的&#xff0c;ESC鍵下面的鍵 如果單引號 Component({sel…

sqllite事務和MySQL事務_Android學習---SQLite數據庫的增刪改查和事務(transaction)調用...

上一篇文章中介紹了手工拼寫sql語句進行數據庫的CRUD操作,本文將介紹調用sqlite內置的方法實現CRUD操作,其實質也是通過拼寫sql語句.首先,創建一個新的android項目:其次,查看代碼實現增刪查改:1.創建DB工具類MyDBHelper.java(創建數據庫的操作)packagecom.amos.android_db;impo…

sqlserver2000給賬戶授予所有的權限_你的位置信息權限設置對了么?

位置信息權限是眾多應用權限中的一種&#xff0c;是應用獲取手機地理位置信息的必要憑證。在你首次安裝應用并打開時&#xff0c;通常會出現一連串的權限彈框&#xff0c;如果該應用在其運行過程中會用到你的地理位置信息&#xff0c;那么這些彈框中就會包含一個與位置信息有關…

Python之路,Day1 - Python基礎1

本節內容 Python介紹發展史Python 2 or 3?安裝Hello World程序變量用戶輸入模塊初識.pyc是個什么鬼&#xff1f;數據類型初識數據運算表達式if ...else語句表達式for 循環break and continue 表達式while 循環作業需求 一、 Python介紹 python的創始人為吉多范羅蘇姆&#xf…