前言:最近用IPC、socket做ATM、聊天项目,考虑到需要用到数据库,所以总结一下centos、ubantu环境下怎么用C语言操作数据库,例如常见的增删改查等!

  一、Centos环境安装mysql

  要想进行 C 语言连接MySQL数据库的操作,那么首先要安装数据库,安装数据库挺简单的,这里暂不介绍了。等到 MySQL 安装完毕之后,就可以在 C 语言下连接MySQL数据库了。

  首先要安装一个叫 mysql-devel 东西,这个是一个驱动 通过 yum install mysql-devel 命令安装,然后就是在命令行中执行 vim sql.c 命令,然后写代码。

  二、介绍数据库相关函数

  1. mysql_real_connect
    函数原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
    参数说明:
    host:本地用localhost或127.0.0.1,远程写IP;
    user、passwd:登陆数据库的用户名密码
    db:数据库名
    port:数据库所用的端口(MySQL一般为3306)
    unix_socket:先写个NULL(官方解释:如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道)
    client_flag:先写个0(指定特定功能)
  2. mysql_real_query
    函数原型:int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
    参数说明:
    query:SQL语句;
    length:SQL语句长度
  3. mysql_store_result
    函数原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
    返回值说明:具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。
  4. mysql_fetch_row
    函数原型:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
    参数说明:具有多个结果的MYSQL_RES结果集合

    返回值说明:在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。

  三、示例代码

  •   在执行程序之前需要建一个简单的表,建表语句如下:
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`age` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;
  •   程序显示对person表(上面通过建表语句建的表)的插入、查找和删除操作,代码如下:

  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h> int main() {
MYSQL conn;
int res;
MYSQL_RES * result;
MYSQL_ROW row;
mysql_init(&conn); //第三、四和五个参数,需要自己修改一下
if (mysql_real_connect(&conn, "localhost", "usre_name", "password", "DataBase_name", , NULL, )) {
printf("coneect mysql successful\n请选择功能\n");
int choose;
char str1[], str2[];
char insert_query[];
char delete_query[] = "delete from person where name='";
char select_query[] = "select * from person";
printf("1.insert\n2.select\n3.delete\n");
while (scanf("%d", &choose)) {
switch (choose) {
case : //insert
printf("姓名 年龄:");
memset(insert_query, , sizeof(insert_query));
scanf("%s %s", str1, str2);
strcat(insert_query, "insert into person(name,age) values('");
strcat(insert_query, str1);
strcat(insert_query, "',");
strcat(insert_query, str2);
strcat(insert_query, ")");
printf("SQL语句: %s\n", insert_query);
res = mysql_query(&conn, insert_query);
if (!res) {
printf("insert %lu rows\n", (unsigned long)mysql_affected_rows(&conn));
}
else {
printf("insert error\n");
}
break;
case : //select
printf("SQL语句: %s\n", select_query);
if (mysql_query(&conn, select_query) != ) {
fprintf(stderr, "查询失败\n");
exit();
}
else {
if ((result = mysql_store_result(&conn)) == NULL) {
fprintf(stderr, "保存结果集失败\n");
exit();
}
else {
while ((row = mysql_fetch_row(result)) != NULL) {
printf("name is %s , ", row[]);
printf("age is %s\n", row[]);
}
}
}
break;
case : //delete
printf("姓名\n");
scanf("%s", str1);
strcat(delete_query, str1);
strcat(delete_query, "'");
printf("SQL语句: %s\n", delete_query);
res = mysql_real_query(&conn, delete_query, (unsigned int)strlen(delete_query));
if (!res) {
printf("delete successful\n");
}
else {
printf("delete error\n");
}
break;
}
}
mysql_close(&conn);
}
return ;
}

  编译是要注意链上动态库,编译语句如下:

  gcc sql.c -o sql -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient

  总结:以上就可以完成对Centos环境,用C语言对数据库的操作了

  四、Ubantu环境安装mysql

  ubuntu上安装mysql非常简单只需要几条命令就可以完成。

  1. sudo apt-get install mysql-server
 
  2. apt-get isntall mysql-client
 

  3.  sudo apt-get install libmysqlclient-dev

 
  安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:
 
  sudo netstat -tap | grep mysql
 
  通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。
 
  登陆mysql数据库可以通过如下命令:
 
  mysql -u root -p 
 
  -u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。
  

  然后通过 show databases; 就可以查看当前的数据库。
  我们选择 mysql数据库就行下一步操作,使用use mysql 命令,显示当前数据库的表单:show tables
  
  

  写一个简单的程序来访问该数据库,实现 show tables 功能:
  

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char server[] = "localhost";
char user[] = "root";
char password[] = "mima";
char database[] = "mysql"; conn = mysql_init(NULL); if (!mysql_real_connect(conn, server,user, password, database, , NULL, ))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit();
} if (mysql_query(conn, "show tables"))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit();
} res = mysql_use_result(conn); printf("MySQL Tables in mysql database:\n"); while ((row = mysql_fetch_row(res)) != NULL)
{
printf("%s \n", row[]);
} mysql_free_result(res);
mysql_close(conn); printf("finish! \n");
return ;
}

  

  编译代码的时候需要链接mysql的库,可以通过如下方式编译:

  g++ -Wall mysql_test.cpp -o mysql_test -lmsqlclient

  总结:操作数据库是最常见的了,一般公司都会封装好现成的数据库操作函数,但了解一下封装原理,还是很好的!

 

Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库的更多相关文章

  1. Ubuntu下使用C语言连接Mysql 8.0客户端教程

    Ubuntu下如何C语言程序连接MYSQL 8.0(全教程) 1. 安装GCC(略) 2. 安装mysql(本人使用的是最新MySQL 8.0版本) sudo apt install mysql-cl ...

  2. Linux系统下 解决Qt5无法连接MySQL数据库的方法

    Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...

  3. Windows下用C语言连接Mysql注意问题

    原文:Windows下用C语言连接Mysql注意问题 环境是:在VS6.0 安装Mysql后,我们需要相应的头文件以及lib文件,所以安装过程必须是完整安装.否则不会生成include文件夹哦~ 具体 ...

  4. c语言连接mysql数据库的实现方法

    C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这些库文件,如果没有安装,也可以在网上找到 我这里也有一份网上找到的:/201205/other ...

  5. R语言-连接MySQL数据库方法

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   R语言连接数据库常用的方法有2种: 1.使用R数据库接口 连接MySQL,使用RMySQL包,使用前RMySQL包要先安 ...

  6. C语言连接MySql数据库

    C语言连接MySql数据库(CodeBlocks) 操作系统:Windows7(32位)编译软件:Code::Blocks 10.05数 据 库:mysql-5.1.62-win32 数据库内的数据: ...

  7. Ubuntu18.04下Qt5.9.8连接mysql数据库失败的解决办法

    问题: 连接mysql数据库时,出现如下 提示: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQ ...

  8. C语言连接MySQL数据库(课程设计总结)

    刚结束课程设计,也预示着假期立即就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注冊.登录.菜单管理.超级用户等等一些功能,到如今为止已经做过好几个了,所以基本流程都熟悉了! ...

  9. C语言连接MySQL数据库(转)

    c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++  只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...

随机推荐

  1. thinkphp5随机查询数据

    ThinkPHP5从V5.0.17之后,如果排序使用到SQL函数,要用orderRaw()代替order()进行排序. 例:Db::name('user')->orderRaw('rand()' ...

  2. (PMP)解题技巧和典型题目分析(0903-2班)

    1.计算题 ,5 2.概念题,少 3.情景题,很多 C B C D ------------------------------------------------------------------ ...

  3. 第46章:MongoDB-监控应用状态

    ① MongoDB监控  1 db.serverStatus() 查看实例运行状态(内存使用.锁.用户连接等信息) 通过比对前后快照进行性能分析 "connections" # 当 ...

  4. (转)支持 PS/2 与 USB 的键盘过滤驱动(可卸载)

    Author:  sinisterEmail:   sinister@whitecell.orgHomepage:http://www.whitecell.org Date:    2007-02-2 ...

  5. 回头来学习wpf的FlowDocument

    学习了一段时间的electron,其实是一个神奇的开发方式,让人神往.但其打印和ocx或是activeX方面还是让我不大放心去使用.毕竟当前首要任务还是window的应用开发. 于是重新学习wpf的F ...

  6. virtualenv虚拟环境

    1.你听过虚拟环境么? 虚拟:即不真实 环境:即周围的条件 那么到底什么事虚拟环境呢 2.虚拟环境 它是一个虚拟化,从电脑独立开辟出来的环境.通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内 ...

  7. BP神经网络 详解模板

    %原始数据输入 P=[ - 6.142 - 27.5 5.068 - 31.7 5.196 - 34.1 6.362 - 31.54 6.472 - 30.17 6.578 - 29.53 6.351 ...

  8. Apache启动不成功时,用命令行检测(新手)

    1,在配置Apache服务器时,经常要在httpd.conf 修改和添加一些代码,编写中,误写或者写错时,无法正常启动时,直接报错The requested operation has failed! ...

  9. Redhat 6.7 x64升级SSH到OpenSSH_7.4p1完整文档

    原文链接:https://www.cnblogs.com/xshrim/p/6472679.html 导语 Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全 ...

  10. 使用PowerShell快速部署Win12R2虚拟化桌面

    PowerShell一直是微软windows_Server产品中重要的一部分,可以通过PowerShell来完成所有的服务器配置,甚至一些在图形界面下无法完成的事情.随着每一个新版本的微软产品或者服务 ...