Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库
前言:最近用IPC、socket做ATM、聊天项目,考虑到需要用到数据库,所以总结一下centos、ubantu环境下怎么用C语言操作数据库,例如常见的增删改查等!
一、Centos环境安装mysql
要想进行 C 语言连接MySQL数据库的操作,那么首先要安装数据库,安装数据库挺简单的,这里暂不介绍了。等到 MySQL 安装完毕之后,就可以在 C 语言下连接MySQL数据库了。
首先要安装一个叫 mysql-devel 东西,这个是一个驱动 通过 yum install mysql-devel 命令安装,然后就是在命令行中执行 vim sql.c 命令,然后写代码。
二、介绍数据库相关函数
- 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(指定特定功能) - mysql_real_query
函数原型:int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
参数说明:
query:SQL语句;
length:SQL语句长度 - mysql_store_result
函数原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
返回值说明:具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。 - 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非常简单只需要几条命令就可以完成。
3. sudo apt-get install libmysqlclient-dev
#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数据库的更多相关文章
- Ubuntu下使用C语言连接Mysql 8.0客户端教程
Ubuntu下如何C语言程序连接MYSQL 8.0(全教程) 1. 安装GCC(略) 2. 安装mysql(本人使用的是最新MySQL 8.0版本) sudo apt install mysql-cl ...
- Linux系统下 解决Qt5无法连接MySQL数据库的方法
Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...
- Windows下用C语言连接Mysql注意问题
原文:Windows下用C语言连接Mysql注意问题 环境是:在VS6.0 安装Mysql后,我们需要相应的头文件以及lib文件,所以安装过程必须是完整安装.否则不会生成include文件夹哦~ 具体 ...
- c语言连接mysql数据库的实现方法
C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这些库文件,如果没有安装,也可以在网上找到 我这里也有一份网上找到的:/201205/other ...
- R语言-连接MySQL数据库方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] R语言连接数据库常用的方法有2种: 1.使用R数据库接口 连接MySQL,使用RMySQL包,使用前RMySQL包要先安 ...
- C语言连接MySql数据库
C语言连接MySql数据库(CodeBlocks) 操作系统:Windows7(32位)编译软件:Code::Blocks 10.05数 据 库:mysql-5.1.62-win32 数据库内的数据: ...
- Ubuntu18.04下Qt5.9.8连接mysql数据库失败的解决办法
问题: 连接mysql数据库时,出现如下 提示: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQ ...
- C语言连接MySQL数据库(课程设计总结)
刚结束课程设计,也预示着假期立即就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注冊.登录.菜单管理.超级用户等等一些功能,到如今为止已经做过好几个了,所以基本流程都熟悉了! ...
- C语言连接MySQL数据库(转)
c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++ 只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...
随机推荐
- Java上传和下载
1.文件的上传 [1] 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. [2] 表单的设置 > 向服务器上传一个文件时,表单要 ...
- list.get(0)防止NPE
package com.chuangjin.p2p; import com.chuangjin.core.utils.JsonUtils; import java.util.ArrayList; im ...
- Vmware Workstation添加centos 7系统网络问题(无IP情况)
简单配置 命令行输入ip addr 查询不到IP的情况,如下: 解决办法: 1. vi /etc/sysconfig/network-scripts/ifcfg-ens33 2. 最后一行,ONBO ...
- 如何让div弄成可以输入文字
如何让div弄成可以输入文字 加一个contenteditable="true"属性即可. <!DOCTYPE html> <html lang=" ...
- tomcat与iis公用80端口(已经发布.net项目现在开发Java项目时tomcat在eclipse中localhost:8080打不开问题)
在开发过.net项目的电脑上安装eclipse配置tomcat运行时打不开页面问题描述,这也是本人亲生经历,找了好多资料网上大多都是tomcat配置问题描述,今天突然想到是不是IIS的问题,果然上网一 ...
- selenium3+python3.6爬页面源码的代码
from selenium import webdriver import unittest,time class my_test(unittest.TestCase): def setUp(self ...
- 使用spring代码中控制事务
1.首先需要在代码中注入事务管理器 @Autowired private PlatformTransactionManager transactionManager; 2.代码中使用如下 public ...
- extjs__(grid Panel绑定数据)
1.修改面板名称 双击My Panel 就可以进行修改 2拖入一个grid panel绑定数据 3.创建一个model 只是为了创建一个模型 相当于java中的模型层 只是数据的一个标准 4 ...
- 安装vue-cli脚手架构建工具
vue安装 1.vue安装: $ cnpm install vue 2.安装vue-cli脚手架构建工具: # 全局安装 vue-cli $ cnpm install --global vue-cli ...
- redis在linux云服务器上完整的搭建步骤
Redis的安装 搭建环境: 华为云linux服务器 Linux系统CneterOS-7.3 SSH客户端 Xshell6 安装c语言编译环境软件如下: 安装报错 然后找到了解决方法: 安装kerne ...