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,它示例如何使用非动态分配的连接结构,以及如何编写一些基本的错误处理代码.

说到这两年风靡全球的国产游戏,原神肯定是当仁不让。根据5月公布的本年度Q1季度手游收入调查报告,在抽卡手游里《原神》以5.67亿美金的绝对优势稳稳拿下第一,这也宣告《原神》在上线短短18个月之后单在手机平台总收入就突破30亿美金(大约RM130亿)。如今,开放须弥前最后的2.8海岛版本姗姗来迟,在漫长的长草期后终于又有新的剧情和区域可以肝了。不过不知道有多少“肝帝”,现在海岛已经满探索,又开始长草了。宝箱总共182个+1个摩拉箱(不计入)长草期根本没在怕的,原神区从来不缺整活儿。这不,在长草期间

机器会不会思考这个问题就像问潜水艇会不会游泳一样。——Dijkstra早在ChatGPT发布之前,业界就已经嗅到了大模型带来的变革。去年10月14日,圣塔菲研究所(Santa Fe Institute)的教授Melanie Mitchell和David C. Krakauer在arXiv发布了一篇综述,全面调研了所有关于「大规模预训练语言模型是否可以理解语言」的相关争论,文中描述了「正方」和「反方」的论点,以及根据这些论点衍生的更广泛的智力科学的关键问题。论文链接:https://arxiv.o

Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会执行。要了解有关 Python main 函数的更多信息,我们将从如下几点逐步学习:什么是 Python 函数Python 中 main 函数的功能是什么一个基本的 Python main() 是怎样的Python 执行模式Let’s get started什么是 Python 函数相信很多小伙伴对函数都不陌生了,函数是可

开源语言模型生态系统正在兴起,这些生态系统为个人提供综合资源以创建用于研究和商业目的的语言应用程序。本文深入研究GPT4ALL,它通过提供全面的搭建模块,使任何人都能开发类似ChatGPT的聊天机器人,从而超越了特定的使用案例。什么是GPT4ALL项目?GPT4ALL可以在使用最先进的开源大型语言模型时提供所需一切的支持。它可以访问开源模型和数据集,使用提供的代码训练和运行它们,使用Web界面或桌面应用程序与它们交互,连接到Langchain后端进行分布式计算,并使用PythonAPI进行轻松集

计算机硬件能直接识别并执行的语言是机器语言。机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它。

当前,非英文文图生成模型选择有限,用户往往要将prompt翻译成英语再输入模型。这样不仅会造成额外的操作负担,并且翻译过程中的语言文化误差,会影响生成图片的准确性。智源研究院FlagAI团队首创高效训练方式,使用多语言预训练模型和StableDiffusion结合,训练多语言文图生成模型——AltDiffusion-m18,支持18种语言的文图生成。包括中文、英文、日语、泰语、韩语、印地语、乌克兰语、阿拉伯语、土耳其语、越南语、波兰语、荷兰语、葡萄牙语、意大利语、西班牙语、德语、法语、俄语。Hu

大语言模型(LLM)在利用有限的文本数据解决新任务方面表现出令人难以置信的优势。然而,尽管如此,它们在其他方面也有局限性,例如:无法访问最新信息幻想事实的倾向低资源语言的困难缺乏精确计算的数学技能对时间进程的不了解如何使用大模型解决更多的问题呢?在《解读TaskMatrix.AI》一文中,TaskMatrix.AI是Toolformer和chatGPT的结合,将基础模型与数百万个API连接起来以完成任务。那么,什么是Toolformer呢?Toolformer是Meta开源的新模型,能够解决需要

能被计算机直接识别的语言是“机器语言”。机器语言是直接用计算机指令代码缩写的语言,用二进制表示,是计算机唯一能直接识别和直接执行的语言。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版