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调试程序完全教程

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值