【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数据库入门 的相关文章

  • MAMP Pro mysql 无法启动

    我遇到问题无法找到解决此问题的方法 我收到这个错误 2017 01 11 23 58 25 7fffbac563c0 InnoDB Operating system error number 2 in a file operation In
  • 同步不同数据库的2个表-MySQL

    我在数据库表中有一个包含某些医疗信息的表 我每天抓取并解析它们并将其存储在本地数据库的表中 假设最初有 1500 条记录 今天我的本地计算机上又添加了 100 条记录 现在 我有一个服务器 我需要在其中推送这些记录 因此数据库是不同的 我昨
  • 将 Null 与 MySQL 触发器中的另一个值进行比较

    所以这是我的问题 我在更新表行时比较新值和旧值 但新值或旧值有时会为空 所以下面的代码不起作用 我可以解决这个问题吗 谢谢 BEFORE UPDATE ON mytable FOR EACH ROW BEGIN IF OLD assigne
  • MySql - 自动完成

    我正在创建一个 Ajax 自动完成应用程序 并且想知道是否有一个 SQL 查询可以用于此目的 例如 如果有人键入 p 我想检索所有以 p 开头的单词 如果他们添加 e 检索所有以 pe 开头的单词 并继续这样 有人提出了下面的查询 但我认为
  • Mysql:多个表还是一张大表?

    这个问题已经被问过 但我还没有找到 1 个语音答案 最好这样做 1 张大桌子 其中 用户 ID 属性 1 属性 2 属性 3 属性 4 或 4 个小桌子 其中 用户 ID 属性 1 用户 ID 属性 2 用户 ID 属性 3 用户 ID 属
  • MySQL使用long类型数字过滤varchar类型时返回额外记录

    一个简单的表格 CREATE TABLE tbl type test uid varchar 31 NOT NULL DEFAULT 0 value varchar 15 NOT NULL DEFAULT PRIMARY KEY uid E
  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • 是否可以在MySQL UDF中的IF条件中声明游标

    我可以在 if 语句中声明游标吗 如果可能的话我怎样才能做到 因为我刚刚做了这样的光标 CREATE FUNCTION fn test ProductID BIGINT 20 RETURNS DECIMAL 10 2 BEGIN DECLA
  • Rails 3 应用程序的 MySQL Cluster (NDB) 与 MySQL Replication (InnoDB):优点/缺点?

    我们正在对当前系统进行概述 试图找出是否可以提高性能和可靠性 目前 我们运行着一堆内部 Rails 应用程序和基于 Rails 的网站 有些已经是 Rails 3 有些正在转换为 Rails 3 它们都连接到以下 MySQL 设置 mysq
  • #1214 - 使用的表类型不支持 FULLTEXT 索引

    我收到一条错误消息 指出该表类型不支持 FULLTEXT 索引 我怎样才能实现这个目标 这是我的桌子 CREATE TABLE gamemech chat id bigint 20 unsigned NOT NULL auto increm
  • 为什么我们要关闭 Mysqli 中的结果

    为什么我们要关闭 result mysqli new mysqli localhost root root test if mysqli gt connect errno echo Failed to connect to MySQL my
  • 将数据从 javascript 发送到 mysql 数据库

    我有这个小点击计数器 我想将每次点击都包含在 mysql 表中 有人可以帮忙吗 var count1 0 function countClicks1 count1 count1 1 document getElementById p1 in
  • mysql查询先慢后快

    我有 2 个 myISAM 表 分别称为 tests 和 completed tests 一个有 170 个条目 另一个有 118k 条目 当我运行此查询时 SELECT ct archive ct status ct score ct u
  • 在 ADO 查询 (mysql/MyConnector) 中使用参数

    今天我下载并安装了 MyConnector 这样我就可以通过 ADO 使用 Mysql 一切都安装好了 我可以与 ODBC 连接并从我的 delphi 环境进行连接 当我在运行时构建查询时 我收到一条错误消息 项目 Project1 exe
  • 防止重复数据输入mysql数据库

    我试图让我的电子邮件订阅服务拒绝数据库中已存在的电子邮件 这样用户就不会订阅同一封电子邮件两次 这就是我所拥有的 但它不起作用 有什么想法吗
  • 如何自动更新数据库中的记录?

    我有一个工作表 在其中插入新工作 该表还包含职位发布日期 默认情况下 当发生新插入时 作业状态为打开状态 现在 当作业超过 30 天时 我想将作业状态从开放更改为关闭 我该怎么做 尝试创建一个每天运行的事件 如下所示 CREATE EVEN
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 将 Python 列表(JSON 或其他)插入 MySQL 数据库

    所以我在Python中有一堆数组数据 嗯 相反 我有一个清单 我试图将此数组存储到 MySQL 数据库中的单个单元格中 我尝试使用 JSON 来序列化我的数据 但也许我不明白 JSON 是如何工作的 因此 在连接到我的数据库后 我尝试了上游
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • MySQL 查询中的窗口函数

    有没有办法在 SELECT 查询本身中动态地使用 MySQL 查询中的窗口函数 我知道在 PostgreSQL 中这是可能的 例如 下面是 PostgreSQL 中的等效查询 SELECT c server ip c client ip s

随机推荐

  • 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 然后