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可使用的函数,并在下 ...
随机推荐
- 【Selenium】【BugList1】调用firefox浏览器,报 TypeError: 'module' object is not callable
#coding=utf-8 from selenium import webdriver driver=webdriver.firefox() 解决方法:firefox改为Firefox
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- 解决更新ssh后在/etc/init.d下无sshd的问题
1.将远程服务器的/etc/init.d/ssd 文件拷贝到本地 scp /etc/init.d/ssh root@IP地址:/etc/init.d 2.vi /etc/init.d/sshd 3 ...
- VS2015配置OpenCV,使用mfc摄像头程序测试
转自:https://blog.csdn.net/Lee_Dk/article/details/80466523 这只是介绍了如何加入OpenCV,怎么查找OpenCV请看出处. 新建一个项目.找到属 ...
- s6-3 通信模型
传输层的作用范围 通信5元组 一些已分配的知名端口 三元组 协议. 本地端点. 远方端点 五元组 协议. 本地IP地址.本地端口号. 远端IP地址.远端端口号 通信5元组 源IP 源端口 目的I ...
- idea与maven整合
1.官网下载 apache-maven-3.3.3 2.解压安装后配置conf-settings文件 a. <localRepository>E:\JAVA\maven_cangku< ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- Javaweb 编解码流程
参考: https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/#N10263 https://www.cnblogs.com/ch ...
- Spring使用Autowiring自动装配 解决提示报错小技巧
1.打开Settings 输入Inspections 找到Spring --> Spring Core --> Code --> Autowiring for Bean ...
- eclipse maven install 报错 jdk rather than jre?
解决方案:window => Perference => java => install jre => 选中jre => edit => 选择文件夹为jdk的