Linux下编写简单C程序连接MySQL数据库,实现简单的增删查改操作
Posted 时栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下编写简单C程序连接MySQL数据库,实现简单的增删查改操作相关的知识,希望对你有一定的参考价值。
目录
1. Linux(Ubuntu)下MySQLMySQL Server的安装:
2. MySQL-client 和 mysql.h 库函数的安装:
5. 创建数据库,建立相应的表(在MySQL中建立了mydb数据库,里面有表test)
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下编译安装MySQL并通过C语言操作MySQL数据库