C语言连接【MySQL】

安装 MySQL 库

在 CentOS7 下,使用命令安装 MySQL:

yum install mysql-devel

/usr/include可以看到一个mysql新目录,里面存放的是 mysql 的头文件。另外在 /lib64/mysql/ 以及 /usr/lib64/mysql 目录下存放了 mysql 的动态和静态库。

用一个 MySQL 库提供的接口验证 MySQL 库是否安装成功:

#include <iostream>
#include <mysql/mysql.h>

using namespace std;

int main()
{
   
   
	cout << "mysql version: " << mysql_get_client_info() << endl;
	return 0;
}

编译:

g++ sql.cc -o sql -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient
image-20240227182356233

编译选项中关于库的使用:

  • -I:用于指明头文件的搜索路径。
  • -L:用于指明库文件的搜索路径。
  • -l:用于指明需要连接库文件路径下的哪一个库。
image-20240227182921177

因为这个库没有在链接的默认目录/usr/lib64下,所以作为第三方导入的库,在编译时需要显式地指定-L/usr/lib64/mysql;同理,头文件不在默认目录/usr/include下,所以要显式地指定-I/usr/include/mysql。在这个目录下,存在名为mysqlclient的第三方库,同样需要用-l显式地声明。

只要正常运行上面的程序,那就表明库的链接没有问题,剩下的就是简单的 API 使用。

连接 MySQL

MYSQL 类

在使用 MySQL 提供的接口之前,需要了解一下这个重要的类。

MYSQL类是一个非常核心的结构体,它用于表示与 MySQL 服务器的一个连接实例。在客户端程序中,这个结构体用来保存客户端与数据库服务器之间连接的所有必要信息,包括但不限于:

  • 服务器的地址
  • 用户名和密码
  • 正在使用的数据库
  • 网络连接的状态和配置
  • 错误信息和错误码
  • 查询结果
  • 选项设置

mysql.h中可以查看 MYSQL 结构体的定义(了解即可):

typedef struct st_mysql
{
   
   
  NET		net;			/* Communication parameters */
  unsigned char	*connector_fd;		/* ConnectorFd for SSL */
  char		*host,*user,*passwd,*unix_socket,*server_version,*host_info;
  char          *info, *db;
  struct charset_info_st *charset;
  MYSQL_FIELD	*fields;
  MEM_ROOT	field_alloc;
  my_ulonglong affected_rows;
  my_ulonglong insert_id;		/* id if insert on table with NEXTNR */
  my_ulonglong extra_info;		/* Not used */
  unsigned long thread_id;		/* Id for connection in server */
  unsigned long packet_length;
  unsigned int	port;
  unsigned long client_flag,server_capabilities;
  unsigned int	protocol_version;
  unsigned int	field_count;
  unsigned int 	server_status;
  unsigned int  server_language;
  unsigned int	warning_count;
  struct st_mysql_options options;
  enum mysql_status status;
  my_bool	free_me;		/* If free in mysql_close */
  my_bool	reconnect;		/* set to 1 if automatic reconnect */

  
<think>好的,我现在需要回答用户关于如何用C语言连接MySQL数据库的问题。首先,我应该回顾用户提供的参考资料,确保信息准确并正确引用。用户引用了五个来源,主要涉及在Linux环境下使用C语言连接MySQL的步骤、所需库以及相关函数。 首先,我需要确认连接MySQL的基本步骤。根据引用[2],准备工作包括确保MySQL服务运行、安装MySQL Connector/C库。然后,根据引用[3],初始化和分配MYSQL对象是关键步骤,可能需要使用mysql_init函数,如果传入NULL,函数会自己分配。接下来,连接到数据库需要用到mysql_real_connect,需要提供主机名、用户名、密码、数据库名等信息。 然后,执行SQL查询,如引用[4]提到的,使用mysql_query函数发送查询,并用mysql_store_result获取结果集。处理结果时,需要用mysql_fetch_row逐行读取数据,如引用[4]中的说明。最后,释放资源和关闭连接是必要的,以避免内存泄漏。 需要注意的编译链接部分,用户可能需要在编译时链接mysqlclient库,使用-lmysqlclient选项,如引用[2]和[5]提到的。此外,引用[5]提到在Linux下可能需要安装mono和Mysql.Data.dll,但用户的问题是关于C语言,所以可能这部分是引用中的混淆,应专注于C的库。 在编写示例代码时,要确保每一步都有注释,并处理错误情况,比如连接失败或查询失败的情况。例如,如果mysql_real_connect返回NULL,应该打印错误信息并退出。 用户可能遇到的问题包括库的路径问题,因此在编译命令中需要包含正确的头文件路径和库路径,比如使用-I和-L选项。例如,引用[2]提到需要下载适合平台的Connector/C库,这可能意味着用户需要根据安装位置调整编译参数。 另外,需要注意字符编码和数据库连接参数是否正确,比如端口号是否为默认的3306,或者是否使用Unix socket。如果遇到编译错误,可能需要检查是否安装了开发包,如libmysqlclient-dev。 最后,生成相关问题需要考虑用户可能的后续疑问,比如错误处理、结果集处理、预处理语句的使用,以及如何插入或更新数据。这些问题可以帮助用户进一步深入学习和应用。</think>以下是使用C语言连接MySQL数据库的详细步骤及示例代码: --- ### 步骤说明 1. **环境准备** - 确保MySQL服务已启动(如Ubuntu使用 `sudo systemctl start mysql`)[^2] - 安装MySQL Connector/C库:在Ubuntu中通过 `sudo apt-get install libmysqlclient-dev` 完成[^2] 2. **代码流程** - **初始化连接对象**:使用 `mysql_init()` 分配或初始化 `MYSQL` 对象[^3] - **建立连接**:调用 `mysql_real_connect()` 配置主机、用户、密码、数据库名等参数 - **执行SQL语句**:通过 `mysql_query()` 发送查询命令(如
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值