Linux下编写简单C程序连接MySQL数据库,实现简单的增删查改操作

Posted 时栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下编写简单C程序连接MySQL数据库,实现简单的增删查改操作相关的知识,希望对你有一定的参考价值。

目录

 

1. Linux(Ubuntu)下MySQLMySQL Server的安装:

2. MySQL-client 和 mysql.h 库函数的安装:

3. 为root用户设置密码

4. 为root授予远程访问权限

5. 创建数据库,建立相应的表(在MySQL中建立了mydb数据库,里面有表test)

6. 编写C程序代码,连接数据库:

7. 编译、链接后运行程序。


 

 

1. Linux(Ubuntu)下mysqlMySQL Server的安装:

$sudo apt-get install mysql-server

2. MySQL-client 和 mysql.h 库函数的安装:

$sudo apt install mysql-client  

$sudo apt install libmysqlclient-dev

如果是Ubuntu 20.04 安装 mysql-8.0以上版本,可参考:

ubuntu 20.04 彻底删除mysql,并重装mysql-8.0.20

3. 为root用户设置密码

需要注意的一点是:MySQL8.0以上密码策略限制必须要大小写加数字特殊符号

4. 为root授予远程访问权限

 

 

5. 创建数据库,建立相应的表(在MySQL中建立了mydb数据库,里面有表test)

6. 编写C程序代码,连接数据库:

因为使用C语言连接到数据库涉及到很多函数,因此可以参考MySQL给的参考,里面的很多函数描述和代码实例也有助于快速掌握相关函数用法,具体参考:MySQL :: MySQL 8.0 C API Developer Guide :: 5.4 C API Basic Function Descriptions

①使用mysql_init()函数进行初始化。

②使用mysql_real_connect()函数进行连接。

③使用mysql_query()函数执行sql语句。

④如果是select之类的有结果集返回的sql语句,使用mysql_store_result()获取结果集。

⑤使用mysql_num_fields()mysql_num_rows()mysql_fetch_row()mysql_fetch_fields()等函数对上述结果进行处理。

⑥使用mysql_free_result()释放结果集。

⑦错误处理会用到mysql_errno()mysql_error()等函数。

 

以下给出了一个完整的C语言程序供参考:

#include <mysql.h>
#include <stdio.h>
MYSQL *conn;

bool myselect(char* sql_stat)
{
	//this function execute the "select ......" sql statement
	//return true if execute successfully ,return false if an error occurred!
	
	int row, field;
	MYSQL_RES* res_ptr;
	MYSQL_ROW  res_row;
	
	//query
	int res=mysql_query(conn,sql_stat);
	if(res)//return nonzero if an error occurred
	{
		fprintf(stderr,"Error %d: %s\\n",
			mysql_errno(conn),mysql_error(conn));
		return false;
	}
	
	//get result
	res_ptr=mysql_store_result(conn);//mysql_use_result(conn);
	
	//get row number and fields number 
	row=mysql_num_rows(res_ptr);
	field=mysql_num_fields(res_ptr);
	printf("\\t%d row(s) in test is displayed:\\n",row);	
	
	//print the fields
	printf("\\t-----------------------\\n");
	for(int i=0;i<field;i++)
		printf("\\t%s",mysql_fetch_fields(res_ptr)[i].name);
	printf("\\n");
	
	//print each row
	while(res_row=mysql_fetch_row(res_ptr) )
	{
		for(int i=0;i<field;i++)
		{
			printf("\\t%s",res_row[i]);
		}
		printf("\\n");
	}
	printf("\\t-----------------------\\n");
	mysql_free_result(res_ptr);
	return true;
}

bool myinsert(char* sql_statement)
{
	//this function execute the "insert ......" sql statement
	//return true if execute successfully ,return false if an error occurred!
	
	int res=mysql_query(conn,sql_statement);
	if(res)
	{
		fprintf(stderr,"insert error %d: %s\\n",
			mysql_errno(conn),mysql_error(conn));
		return false;
	}
	
	//show details
	printf("Execute successfully!\\n");
	printf("%ld row(s) was affected!\\n",
		(long)mysql_affected_rows(conn));
	return true;
}

bool mydelete(char* sql_statement)
{
	//this function execute the "delete ......" sql statement
	//return true if execute successfully ,return false if an error occurred!
	
	int res=mysql_query(conn,sql_statement);
	if(res)
	{
		fprintf(stderr,"delete error %d: %s\\n",
			mysql_errno(conn),mysql_error(conn));
		return false;
	}
	
	//show details
	printf("Execute successfully!\\n");
	printf("%ld row(s) was affected!\\n",
		(long)mysql_affected_rows(conn));
	return true;
}

bool myupdate(char* sql_statement)
{
	//this function execute the "update ......" sql statement
	//return true if execute successfully ,return false if an error occurred!
	
	int res=mysql_query(conn,sql_statement);
	if(res)
	{
		fprintf(stderr,"Update error %d: %s\\n",
			mysql_errno(conn),mysql_error(conn));
		return false;
	}
	
	//show details
	printf("Execute successfully!\\n");
	printf("%ld row(s) was affected!\\n",
		(long)mysql_affected_rows(conn));
	return true;
}

int main(int argc,char* argv[])
{

	char* sql_insert="insert into test values(66,'LK','M')";
	char* sql_delete="delete from test where id=66";
	char* sql_update="update test set name='change' where id=66";
	char* sql_select="select * from test";

	conn=mysql_init(conn);

	if(conn==NULL)
	{
		printf("mysql_init failed!\\n");
		return EXIT_FAILURE;
	}

	conn=mysql_real_connect(conn,"127.0.0.1",
		"root","Password.123","mydb",0,NULL,0);
	
	if(conn == NULL)
	{
		printf("Connection failed!\\n");
		if(mysql_errno(conn))
		{
			fprintf(stderr,"Connection error %d: %s\\n"
				,mysql_errno(conn),mysql_error(conn));
		}
		return EXIT_FAILURE;
	}
	else printf("\\nConnect to mydb Successfully!\\n");
	
	printf("\\nShow all the data in test\\n");
	if(!myselect(sql_select))return EXIT_FAILURE;
	
	printf("\\n\\ninsert into test values (66,'LK','M') \\n");
	if(!myinsert(sql_insert))return EXIT_FAILURE;
	if(!myselect(sql_select))return EXIT_FAILURE;

	printf("\\n\\nupdate test set name='change' where id=66\\n");
	if(!myupdate(sql_update))return EXIT_FAILURE;
	if(!myselect(sql_select))return EXIT_FAILURE;
	
	printf("\\n\\ndelete from test where id=66\\n");
	if(!mydelete(sql_delete))return EXIT_FAILURE;		
	if(!myselect(sql_select))return EXIT_FAILURE;
	
	mysql_close(conn);
	return EXIT_SUCCESS;
}

 

7. 编译、链接后运行程序。

$gcc -o mysqlconn.o mysqlconn.c  -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql

 

 

如果想要调试程序,可以参考:使用gdb调试程序完全教程

本文的文字或代码如有错误或不妥之处,还望大家帮忙指正,在此谢过!!!

以上是关于Linux下编写简单C程序连接MySQL数据库,实现简单的增删查改操作的主要内容,如果未能解决你的问题,请参考以下文章

怎样在linux下编写C程序并编译执行

Linux环境下编写C程序

linux下编写c++,include的那些头文件在啥地方

在Linux下编译安装MySQL并通过C语言操作MySQL数据库

怎样将windows下写的c程序在linux下编译运行,谢谢?

linux下编写并运行python和C++程序