【Linux】Ubuntu下C语言访问MySQL数据库入门

2023-11-05

使用的系统是Ubuntu 11.10.数据库是MySQL。


MySQL数据库环境配置


首先需要安装MySQL客户端和服务器,命令行安装方式为:

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

然后,要使用C语言编程访问数据库,需要另外安装一个开发包:
  1. sudo apt-get install libmysqlclient15-dev  


在MySQL中建立相应数据库

首先以用户rick登录MySQL数据库(用户rick已经被root权限用户赋予了创建数据库等等的权限):


然后创建一个名为foo的数据库:

  1. CREATE DATABASE foo;  
然后利用如下SQL语句创建表及插入数据:
  1. CREATE TABLE children(  
  2.     childno int(11) NOT NULL auto_increment,  
  3.     fname varchar(30),  
  4.     age int(11),  
  5.     PRIMARY KEY (childno)  
  6.     );  
  7.   
  8. INSERT INTO children(childno,fname,age) VALUES(1,'Jenny',21);  
  9. INSERT INTO children(childno,fname,age) VALUES(2,'Andrew',17);  
  10. INSERT INTO children(childno,fname,age) VALUES(3,'Gavin',8);  
  11. INSERT INTO children(childno,fname,age) VALUES(4,'Duncan',6);  
  12. INSERT INTO children(childno,fname,age) VALUES(5,'Emma',4);  
  13. INSERT INTO children(childno,fname,age) VALUES(6,'Alex',15);  
  14. INSERT INTO children(childno,fname,age) VALUES(7,'Adrian',9);  

在MySQL命令行模式中执行方法如下:


MySQL数据库连接测试


然后采用如下C语言进行数据库连接测试connect1.c:

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include "mysql.h"  
  5.   
  6. int main(int argc,char *argv[])  
  7. {  
  8.   MYSQL *conn_ptr;  
  9.   conn_ptr = mysql_init(NULL);  
  10.   
  11.   if(!conn_ptr)  
  12.   {  
  13.     fprintf(stderr,"mysql_init failed\n");  
  14.     return EXIT_FAILURE;  
  15.   }  
  16.   
  17.   conn_ptr = mysql_real_connect(conn_ptr,"localhost","rick","rick","foo",0,NULL,0);  
  18.   
  19.   if(conn_ptr)  
  20.     printf("Connection success\n");  
  21.   else  
  22.     printf("Connection failed\n");  
  23.   
  24.   mysql_close(conn_ptr);  
  25.   
  26.   return EXIT_SUCCESS;  
  27. }  
执行结果:

注意的是:需要指定include库和库文件的路径名,以及指定链接的库模块mysqlclient。

如果不在开始的时候安装开发包,就会产生如下错误:


执行SQL语句进行数据操作

向数据库表children中插入一行:

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include "mysql.h"  
  5.   
  6. int main()  
  7. {  
  8.   MYSQL my_connecyion;  
  9.   int res;  
  10.   
  11.   mysql_init(&my_connecyion);  
  12.   
  13.   if(mysql_real_connect(&my_connecyion,"localhost","rick","rick","foo",0,NULL,0))  
  14.   {  
  15.     printf("Connection success\n");  
  16.   
  17.     //执行SQL语句  
  18.     res = mysql_query(&my_connecyion,"INSERT INTO children(fname,age) VALUES('Ann',3)");  
  19.   
  20.     if(!res)  
  21.       printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connecyion));  
  22.     else  
  23.       fprintf(stderr,"Insert error %d : %s \n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  24.   
  25.     mysql_close(&my_connecyion);  
  26.   }  
  27.   else{  
  28.     fprintf(stderr,"Connection failed\n");  
  29.     if(mysql_errno(&my_connecyion))  
  30.       fprintf(stderr,"Connection error %d : %s\n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  31.   }  
  32.   
  33.   return EXIT_SUCCESS;  
  34. }  

运行结果:




在这里特别需要注意的是:

函数mysql_affected_rows返回的是被一个更新操作修改的行数,而不是满足where子句的行数。


附录一:eclipse下编译的设置

安装完毕mysql开发包  libmysqlclient15-dev  后,eclipse可以自动识别#include <mysql/mysql.h>,但是编译的linker的需要添加mysqlclient,否则编译器识别不了API包中的函数,出现如下错误

设置mysqlclient如下



参考

1. Ubuntu 安装mysql和简单操作
   http://www.cnblogs.com/zhuyp1015/p/3561470.html
   
2. Ubuntu下的mysql安装
   http://blog.chinaunix.net/uid-26275986-id-4051976.html
   
   
3.  Ubuntu 12.04下安装MySQL图解
    http://www.linuxidc.com/Linux/2013-01/78716.htm
    
    Linux下C语言连接MySQL
    http://www.7edown.com/edu/article/soft_6440_1.html
    
    
    Ubuntu下彻底卸载mysql
    http://www.blogjava.net/yjhmily/articles/336926.html
    
    【Linux】Ubuntu下C语言访问MySQL数据库入门
    http://blog.csdn.net/xiajun07061225/article/details/8505987
    
    Ubuntu下用C语言访问MySQL数据库
    http://www.oschina.net/question/12_7956



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】Ubuntu下C语言访问MySQL数据库入门 的相关文章

  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • 通过货币换算获取每种产品类型的最低价格

    我想选择每种产品类型中最便宜的 包括运费 价格转换为当地货币 最便宜 产品 价格 产品 运费 seller to aud 我的数据库有如下表 PRODUCTS SELLERS id type id seller id price shipp
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • MySQL+子串怎么做? + 替换?

    我不太擅长 SQL 希望能够变得更好 我在尝试执行某些表操作时遇到一些麻烦 我希望能够从下面的 ProgUID 列中选择子字符串 就像是 SUBSTRING table ProgUID 3 12 这将为我提供 ProgUID P CAMVE
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • 如何使用 vitess 仅对特定表进行分片

    我创建了一个包含三个表的未分片键空间 现在我想对前两个表的键空间进行分片 但不想对第三个表进行分片 如何才能做到这一点 Vitess 文档不包含任何与此相关的信息或示例 请帮忙 Thanks vitess 中的垂直分片与水平分片类似 您应该
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi

随机推荐

  • QMT的交易示例中《调整至目标持仓Demo》的bug代码梳理

    encoding gbk 调仓到指定篮子 import pandas as pd import numpy as np import time from datetime import timedelta datetime 自定义类 用来保
  • Linux--文件内容查看命令

    目录 1 查看文件内容 1 cat 2 more 5 tail 2 合并文件 3 向文件中写入数据 1 查看文件内容 1 cat 2 more more 文件名 空格 回车 3 less less 文件名 看完内容之后不会显示到屏幕上 相当
  • qemu 退出方法

    qemu 退出方法 ctrl A 按 X
  • 重新排列数组的数,使得负数都排在正数的前面

    重新排列数组的数 使得负数都排在正数的前面 问题描述 设A是由n个非0实数构成的数组 设计一个算法重新排列数组的数 使得负数都排在正数的前面 要求算法使用O n 的时间和O 1 的空间 解决思路 对于这样一个问题 我们最容易想到的思路是对数
  • 利用SPSS进行person相关分析及散点图绘制

    利用SPSS进行person相关分析及散点图绘制 德哥 SCI医学论文和国内核心论文中 我们会经常对两个变量进行相关性比较 使用person相关分析及散点图绘制可以很好的进行表达相关关系 有些时候审稿人也会要求你做person系数及散点图
  • Linux查询用户创建的后台程序

    使用jobs可以看到后台的任务 jobs l 使用kill可以杀掉指定的后台任务
  • AD(15)中设定PCB板尺寸大小的方法

    1 新建PCB File New PCB 2 选择 选择Place Line画出板子的形状和大小 封闭图形 画出你想要的封闭图形 3 全选刚才画出的图形边框线 4 点击design gt board shape gt define from
  • java案例16:模拟默认密码的生成

    思路 模拟默认密码的生成 手动输入用户名 根据用户名自动生成默认密码 在生成密码时 将用户名反转即为默认密码 1 需要用Scanner类相关的方法实现键盘输入 用字符串接收 2 实现密码自动生成 遍历字符串 默认密码就是手动输入用户名的反转
  • 多模态论文汇总

    综述 Multimodal Machine Learning A Survey and Taxonomy 论文网址 https arxiv org pdf 1705 09406 pdf 中文翻译 Multimodal Machine Lea
  • 算法导论 学习笔记 第六章 堆排序

    实际中 待排序的数很少是单独的数值 它们通常是称为记录的数据集的一部分 每个记录包含一个关键字 即排序问题中要重排的值 记录的剩余部分由卫星数据组成 通常是要与关键字一同存取的 如果每个记录包含大量卫星数据 我们通常重排记录指针的数组 而非
  • JS深层次多级对象Key的遍历方法,将多层级对象扁平化

    文章目录 一 深层次多级对象介绍 问题提出 二 深层次多级对象Key的遍历方法实现 三 验证一下我们的遍历函数 四 将多级对象扁平化 总结与应用 最近整理之前写过的博客 发现深度拷贝对象的一段代码 想着深度拷贝后我怎么来验证两个对象的值 是
  • HierarchicalDataTemplate (一)

    能够帮助层级控件显示层级数据的模板是HierarchicalDataTemplate 一般常用于TreeView控件和MenuItem控件 显示层级数据 数据类 using System Collections Generic namesp
  • 敏捷项目管理之任务看板

    我们最近在多个项目中使用看板项目管理实施敏捷项目开发 有些经验心得 看板优势 看到瓶颈 把控进度 调整策略 让开发可视化 需求分类 必备需求 期望需求 超出预期需求 精益之道 干掉一切不增值业务活动 以客户为中心极速价值交付 又好又快完成领
  • osgEarth的Rex引擎原理分析(三十三)分页瓦片卸载器子节点的作用

    目标 十二 中的问题22 分页瓦片卸载器是在Rex引擎的setMap函数中创建的 创建之初就关联了活跃瓦片寄存器和资源释放器 作用见下面分析 osgEarthDrivers engine rex RexTerrainEngineNode c
  • ip变动导致roscore无法打开

    之前改过ip 导致roscore无法打开 错误代码 Unable to contact my own server at http localhost 60852 This usually means that the network is
  • 硬核虚拟化技术 SR-IOV的原理及探索

    2007年9月 PCI SIG官方发布了 Single Root I O Virtualization and Sharing Specification Revision 1 0 规范 定义了多个System Images如何共享PCI接
  • Android 判断设备是否模拟器

    用过一些网上提供的方法 我这边使用夜神模拟器测试 结果检测为真机 于是想了一个从cpu架构信息来判断的方法 同时支持x86和arm的应该就是模拟器 代码如下 获取 cpu 信息 public static String getCpuInfo
  • Java程序员从阿里面试回来,最后成功拿到阿里offer!

    最近有很多朋友去目前主流的大型互联网公司面试 阿里巴巴 京东 美团 滴滴 面试回来之后会发给我一些面试题 有些朋友轻松过关 拿到offer 但是有一些是来询问我答案的 其实本来真的没打算写这篇文章 主要是自己得记忆力不是很好 不像一些记忆力
  • 百度首页模仿制作(html)详解

    相信大姐学习html这一门语言的第一步一般都是做一个百度首页或者菜鸟教程首页 菜鸟教程首页模仿戳这里 什么的吧 下面就来分享一下我所写的百度首页的模仿过程 1 分析布局 这里我将他的布局分为三大块 上中下各一个div块 2 往div块中添加
  • 【Linux】Ubuntu下C语言访问MySQL数据库入门

    使用的系统是Ubuntu 11 10 数据库是MySQL MySQL数据库环境配置 首先需要安装MySQL客户端和服务器 命令行安装方式为 sudo apt get install mysql server mysql client 然后