目錄
8.3 使用C语言访问MySQL数据
8.3.1 连接例程
8.3.2 错误处理
首頁 資料庫 mysql教程 linux程序设计使用C语言访问MySQL(第八章)_MySQL

linux程序设计使用C语言访问MySQL(第八章)_MySQL

Jun 01, 2016 pm 01:00 PM
程式設計 語言

8.3 使用C语言访问MySQL数据

Windows本地程序(如Access)可以通过ODBC驱动程序来访问MySQL,甚至有针对linuxODBC驱动程序。
下面讨论使用C语言来访问MySQL.

8.3.1 连接例程

用C语言连接MySQL数据库包含两个步骤:
1.初始化一个连接句柄结构
2.实际进行连接

首先,使用mysql_init来初始化连接句柄
#include
MYSQL *mysql_init(MYSQL *);
通常传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将被重新初始化。这个例程出错时返回NULL。
目前为止,只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数
MYSQL *mysql_real_connect(MYSQL *connection,
const char *server_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,
const char *unix_socket_name,
unsigned int flags);
指针connection必须指向已经被mysql_init初始化过的结构。其他参数的含义相当明了,server_host既可以是主机名,也可以是IP地址。如果只是连接到本地机器,可以通过指定localhost来优化连接类型。
sql_user_name和sql_password的含义和它们的字面含义一样。如果登录名为NULL,则假设登录名为当前linux用户的登录ID。如果密码是NULL,则只能访问服务器上无需密码就可访问的数据。密码会在通过传输前进行加密。
port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。
flag参数用来对一些定义的位模式进行OR操作,使得改变使用协议的某些特征。
如果无法连接,它将返回NULL。mysql_error函数可以提供有帮助的信息。
使用完连接之后,通常在程序退出时,要像下面这样调用函数mysql_close
void mysql_close(MYSQL *connection);
这将关闭连接,如果连接是由mysql_init建立的,MySQL结构会被释放。指针将会无效并无法再次使用。
mysql_options例程(仅能在mysql_init和mysql_real_connect之间调用)可以设置一些选项:
int mysql_options(MYSQL *connection, enum option_to_set, const char *argument);
因为mysql_options一次只能设置一个选项,所以每设置一个选项就要调用它一次。下面列出了3个最常用的选项:
enum选项 实际参数类型 说明
MySQL_OPT_CONNECT_TIMEOUT const unsigned int * 连接超时之前的等待秒数
MySQL_OPT_COMPRESS None,使用NULL 网络连接中使用压缩机制
MySQL_INIT_COMMAND const char * 每次连接建立后发送的命令
如果要设置连接超时时间为7秒,使用的代码片段如下所示:
unsigned int timeout = 7;
connection = mysql_init(NULL);
ret = mysql_options(connection, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout);
if (ret){
}
connection = mysql_real_connect(connection...)
接下来使用一个简短的程序测试一下。
首先进入rick用户,创建一个数据库foo;
mysql -u rick -p
CREATE DATABASE foo;
如果直接在mysql命令行中输入许多创建表和添加数据的命令,这比较容易出错,而且如果再次输入这些命令的话,也很不高效。因此,创建一个包含所需要命令的文件。
这个文件名为create_children.sql;
\. /绝对路径/create_children.sql 来执行这个文件
一定要使用create_children.sql的绝对路径
.
现在有一个用户,一个数据库和一个保存了一些数据的表,接下来看一下如果通过代码来访问这些数据。
编写程序connect1.c,它以用户名rick和密码secret来连接本机服务器上名为foo的数据库。如果出现mysql.h找不到的情况,参见linux找不到mysql.h.
编译这个程序需要同时添加include路径和库文件路径,以及指定链接的库模块mysqlclient.
$ gcc connect1.c -o connect1.exe -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
-I/usr/include/mysql是mysql.h的头文件路径
-L/usr/lib/mysql是库文件路径

8.3.2 错误处理

MySQL使用一系列由连接句柄结构报告的返回码.两个必备的例程是:
unsigned int mysql_errno(MYSQL *connection);
char *mysql_error(MYSQL *connection)
;
可以通过调用mysql_errno并传递连接结构来获得错误码,它通常都是非0值.如果未设定错误码,它将返回0.
mysql_errno的返回值实际上就是错误码,它们在errmsg.h或者mysqld_error.h中定义,前者是报告客户端错误,后者关注服务端错误.mysql_error提供有意义的文本信息,而不是单调的错误码,这些信息被写入一些内部静态内存空间中,如果想保存错误文本,需要把它复制到别的地方.
当调用mysql_real_connect时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码.但如果将连接句柄作为一个变量,那么及时mysql_real_connect失败,仍然能够处理它.
编写程序connect2.c,它示例如何使用非动态分配的连接结构,以及如何编写一些基本的错误处理代码.
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
在 Windows 11 上徹底刪除不需要的顯示語言的方法 在 Windows 11 上徹底刪除不需要的顯示語言的方法 Sep 24, 2023 pm 04:25 PM

在同一設定上工作太久或與他人分享PC。您可能會安裝一些語言包,這通常會產生衝突。因此,是時候刪除Windows11中不需要的顯示語言了。說到衝突,當有多個語言包時,無意中按Ctrl+Shift會更改鍵盤佈局。如果不注意,這將是手頭任務的障礙。所以,讓我們直接進入方法吧!如何從Windows11中刪除顯示語言? 1.從設定按+開啟“設定”應用,從導覽窗格中前往“時間和語言”,然後按一下“語言和地區”。 WindowsI點選要刪除的顯示語言旁邊的省略號,然後從彈出式選單中選擇「刪除」。在出現的確認提示中按一下“

在 iPhone 上更改語言的 3 種方法 在 iPhone 上更改語言的 3 種方法 Feb 02, 2024 pm 04:12 PM

眾所周知,iPhone是最人性化的電子產品之一,其中一個原因是它可以輕鬆地根據您的喜好進行個性化設定。在個人化設定中,您可以變更語言,這與您在設定iPhone時選擇的語言不同。如果您對多種語言熟悉,或者您的iPhone語言設定錯誤,您可以按照我們下面解釋的方法進行更改。如何更改iPhone的語言[3種方法]iOS允許使用者在iPhone上自由切換首選語言,以適應不同的需求。您可以更改與Siri的互動語言,方便與語音助理溝通。同時,在使用本機鍵盤時,您可以輕鬆地在多種語言之間切換,提高輸入效率。

給語言大模型加上綜合視聽能力,達摩院開源Video-LLaMA 給語言大模型加上綜合視聽能力,達摩院開源Video-LLaMA Jun 09, 2023 pm 09:28 PM

影片在當今社群媒體和網路文化中扮演著愈發重要的角色,抖音,快手,B站等已經成為數以億計用戶的熱門平台。用戶圍繞影片分享自己的生活點滴、創意作品、有趣時刻等內容,與他人互動和交流。近期,大語言模型展現了令人矚目的能力。我們能否給大模型裝上“眼睛”和“耳朵”,讓它能夠理解視頻,陪著用戶互動呢?從這個問題出發,達摩院的研究人員提出了Video-LLaMA,一個具有綜合視聽能力大模型。 Video-LLaMA能夠感知和理解視訊中的視訊和音訊訊號,並能理解使用者輸入的指令,完成一系列基於音訊視訊的複雜任務,

如何將Win10電腦的語言設定為漢語? 如何將Win10電腦的語言設定為漢語? Jan 05, 2024 pm 06:51 PM

有時候我們再剛入手安裝好電腦系統之後發現系統時英文的,遇到這種情況我們就需要把電腦的語言改成中文,那麼win10系統裡面該怎麼把電腦的語言改成中文呢,現在就給大家帶來具體的操作方法。 win10電腦語言怎麼改成中文1、開啟電腦點選左下角的開始按鍵。 2、點選左側的設定選項。 3.開啟的頁面選擇「時間和語言」4、開啟後,再點選左側的「語言」5、在這裡就可以設定你要的電腦語言。

已修復: Alt + Shift 不會更改 Windows 11 上的語言 已修復: Alt + Shift 不會更改 Windows 11 上的語言 Oct 11, 2023 pm 02:17 PM

當Alt+Shift不更改Windows11上的語言時,您可以使用Win+空白鍵獲得相同的效果。另外,請確保使用左Alt+Shift而不是鍵盤右側的那些。為什麼Alt+Shift無法更改語言?您沒有更多語言可供選擇。輸入語言熱鍵已變更。最新Windows更新中的錯誤阻止您更改鍵盤語言。卸載最新更新以解決此問題。您處於應用程式的活動視窗中,該應用程式使用相同的熱鍵執行其他操作。你如何使用AltShift更改Windows11上的語言? 1.使用正確的按鍵順序首先,確保您使用的是使用+組合的正確方法。

光動嘴就能玩出原神!用AI切換角色,還能攻擊敵人,網友:'綾華,使用神裡流·霜滅” 光動嘴就能玩出原神!用AI切換角色,還能攻擊敵人,網友:'綾華,使用神裡流·霜滅” May 13, 2023 pm 07:52 PM

說到這兩年風靡全球的國產遊戲,原神肯定是當仁不讓。根據5月公佈的本年度Q1季手遊收入調查報告,在抽卡手遊裡《原神》以5.67億美金的絕對優勢穩穩拿下第一,這也宣告《原神》在上線短短18個月後單在手機平台總收入就突破30億美金(約RM130億)。如今,開放須彌前最後的2.8海島版本姍姍來遲,在漫長的長草期後終於又有新的劇情和區域可以肝了。不過我不知道有多少“肝帝”,現在海島已經滿探索,又開始長草了。寶箱總共182個+1個摩拉箱(不計入)長草期根本沒在怕的,原神區從來不缺整活兒。不,在長草期間

探索智能體的邊界:AgentQuest,一個全面衡量和提升大型語言模型智能體性能的模組化基準框架 探索智能體的邊界:AgentQuest,一個全面衡量和提升大型語言模型智能體性能的模組化基準框架 Apr 11, 2024 pm 08:52 PM

基於大模型的持續最佳化,LLM智能體-這些強大的演算法實體已經展現出解決複雜多步驟推理任務的潛力。從自然語言處理到深度學習,LLM智能體正逐漸成為研究和工業界的焦點,它們不僅能理解和生成人類語言,還能在多樣的環境中製定策略、執行任務,甚至使用API​​調用和編碼來建置解決方案。在這種背景下,AgentQuest框架的提出具有里程碑意義,它不僅僅是一個LLM智能體的評估和進步提供了一個模組化的基準測試平台,而且透過其易於擴展的API,為研究人員提供了一個強大的工具,以更細緻地追蹤和改進這些智能體的性能

大模型下B端前端程式碼輔助生成的思考與實踐 大模型下B端前端程式碼輔助生成的思考與實踐 Apr 18, 2024 am 09:30 AM

一、背景重構工作中,程式碼規格:B端前端開發過程中開發者總會面臨重複開發的痛點,許多CRUD頁面的元素模組基本上相似,但仍需手動開發,將時間花在簡單的元素搭建上,降低了業務需求的開發效率,同時因為不同開發者的程式碼風格不一致,使得迭代時其他人上手成本較高。 AI取代簡單腦力:AI大模型的不斷發展,已經具備簡單的理解能力,並且可以進行語言到指令的轉換。對於基礎頁面建構這樣的通用指令可滿足日常基礎頁面搭建的需求,提升通用場景業務開發效率。二、生成連結一覽B端頁面清單、表單、詳情都支援生成,連結大概可分為以下幾

See all articles