当前位置: 首页 > news >正文

Linux应用软件编程--->数据库

一、常用数据库

1、关系型数据库

        将复杂的数据结构简化为二维表格形式,如excel表。
大型:Oracle、DB2
中型:MySql、SQLServer
小型:Sqlite

2、非关系型数据库

        以键值对存储,且结构不固定,如JSON数据。
Redis
MongoDB

二、sqlite数据库的特点

    1)开源免费, c语言开发
2)代码量少,1万行左右,总大小10M以内
3)文件型数据库,可以移动,跨平台移植性好
4)理论数据容量最大2T

三、安装sqlite3数据库

1、安装sqlite3数据库
sudo apt-get install sqlite3
2、安装相关库
sudo apt-get install libsqlite3-dev
3、测试
创建一个名字为xxx.db的数据库:
sqlite3 xxx.db

四、sqlite3数据库的学习

1、sqlite支持的数据类型

NULL空值
INTEGER整形
REAL浮点型
TEXT字符串类型
BLOB根据输入进行存储

2、sqlite3相关命令

.help查看支持的命令
.tables查看当前数据库中的表
.headers on打开表头
.headers off隐藏表头
.mode column设置列左对齐
.quit退出数据库

3、sqlite3支持的SQL语句

   注意:1. SQL语句后面必须要有分号;2. sqlite不区分大小写
运算符>   <   >=   <=   =    !=   and   or  

    1)创建表

   create table 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型);
例如:create table class1(id INTEGER, name TEXT, age INTEGER, score REAL);

    2)数据插入

insert into 表名 values(值1, 值2, 值3);
insert into class1 values(1, "zhangsan", 19, 88.5);

    3)查询数据               

     (1)查询所有列数据:
select * from 表名;

     (2)查询指定列数据:关系运算符:
select 列名1,列名2,列名n  form 表名;

     (3)条件查询:
select * from 表名 where 列  条件;

     (4)模糊查找(字符串):                          
select * from 表名 where 列  like "%梅";
select * from 表名 where 列  like "__梅";               
% : 可以模糊匹配多个字符
_  :  只能模糊匹配一个字符

(5)排序查找:
升序排序:select * from 表名 order by 列名  ASC;          
降序排序:select * from 表名 order by 列名  DESC;

    4)删除数据

delete from 表名 where 删除的条件;
delete from class1 where score < 80;

    5)修改数据

update 表名 set 列=新值 where 条件;
update class1 set score=100 where name="wanger";

    6)删除一张表

          drop table 表名;

    7)设置主键值自动增长列

          注意:
(1)主键值自动增长列必须是INTEGER类型
(2)在创建表时,主键值自动增长列要增加:PRIMARY KEY AUTOINCREMENT
例如:create table class2(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score REAL);
(3)插入数据时,主键值自动增长列给NULL,让其自动增长
例如:insert into class2 values(NULL, "张三", 90);

    8)时间相关

date("now");年-月-日
datetime("now", "+8 hours");年-月-日  时:分:秒

 

4、sqlite3提供的C/C++ API(应用程序接口)接口

    1)sqlite的可视化工具

          sudo apt-get install sqlitebrowser

    2)sqlite3_open() 接口

int sqlite3_open(
const char *filename,   /* Database filename (UTF-8) */
sqlite3 **ppDb          /* OUT: SQLite db handle */
);
功能:打开一个数据库文件
参数:
filename:数据库名称
ppDb :保存数据库句柄的指针的地址
返回值:
成功:SQLITE_OK
失败:错误码

    3)sqlite3_close() 接口

int sqlite3_close(sqlite3*);

功能:关闭数据库

    4)sqlite3_exec() 接口

int sqlite3_exec(
sqlite3*pdb,                                  /* An open database */
const char *sql,                           /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**),  /* Callback function */
void *arg,                                    /* 1st argument to callback */
char **errmsg                              /* Error msg written here */
);
功能:执行SQL语句
参数:
pdb:数据库句柄
sql:要执行的sql语句
callback:执行select语句时使用的回调函数
arg:给回调函数传递的参数(实参)
errmsg:保存出错信息
返回值:
成功:SQLITE_OK
失败:错误码

    5)回调函数

int (*callback)(void*arg,int column,char**column_values,char**column_name);
功能:执行select语句时调用的回调函数
参数:
arg:sqlite3_exec传递的第四个参数
column:查询到的数据的列数
column_values:指针数组,多个指针分别指向每一列数据的字符串
column_name:指针数组,多个指针指向每一列的列名

      注意:
(1)回调函数成功的话必须要有返回值,返回0.
否则产生错误提示: sqlite3_exec error : query aborted
(2)从数据库查询出来的数据,统统是字符串类型
(3)从数据库中查询数据,查到几条,回调函数就会被执行几次

5、应用示例

    1)创建一个名为class3的sqlite3数据库,并插入数据“1, “zahngsan”,99”;

#include<stdio.h>
#include <sqlite3.h>int main(int argc, const char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./stu.db", &pdb);if(ret != SQLITE_OK){fprintf(stderr, "sqlite3_open error : %s\n", sqlite3_errmsg(pdb));return -1;}char *psql = "create table if not exists class3(id INTEGER, name TEXT, score REAL);";ret = sqlite3_exec(pdb, psql, NULL, NULL, NULL);if(ret != SQLITE_OK){fprintf(stderr, "sqlite3_exec error : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}char sql[128] = {"insert into class3 values(1, \"zhangsan\", 99);"};ret = sqlite3_exec(pdb, sql, NULL, NULL, NULL);if(ret != SQLITE_OK){fprintf(stderr, "sqlite3_exec error : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sqlite3_close(pdb);return 0;
}

    2)对数据库中的某个表进行遍历

#include <stdio.h>
#include <sqlite3.h>int flag = 0;int callback(void *arg, int column, char **values, char **name)
{if(flag == 0){for(int i = 0; i < column; i++){printf("%s ", name[i]);}printf("\n");flag = 1;}for(int i = 0; i < column; i++){printf("%s", values[i]);}printf("\n");return 0;
}int main(int argc, const char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./stu.db", &pdb);if(ret != SQLITE_OK){fprintf(stderr, "sqlite3_open error : %s\n", sqlite3_errmsg(pdb));return -1;}char *psql = "select * from data;";int cnt = sqlite3_exec(pdb, psql, callback, NULL, NULL);if(cnt != SQLITE_OK){fprintf(stderr, "sqlite3_exec error : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sqlite3_close(pdb);return -1;
}

【END】

http://www.dtcms.com/a/356861.html

相关文章:

  • C++函数继承
  • 【C++闯关笔记】STL:vector的学习与使用
  • 论文阅读:ICLR 2024 GAIA: A Benchmark for General AI Assistants
  • DBeaver中禁用PostgreSQL SSL的配置指南
  • SQL Server 查看备份计划
  • Creed —— 设置玩家属性(生命/耐力/经验值等)
  • 初学python的我开始Leetcode题-17
  • Azure Marketplace 和 Microsoft AppSource的区别
  • 订餐后台管理系统 -day03 登录模块
  • Linux操作系统Shell脚本-第一章
  • 数据防泄与最小可见:ABP 统一封装行级安全(RLS)+ 列级脱敏
  • 前端vue3入门学习
  • 数据分析编程第七步:分析与预测
  • 【MFC自动生成的文件详解:YoloClassMFC.cpp 的逐行解释、作用及是否能删除】
  • 科技赋能医疗:陪诊小程序系统开发,让就医不再孤单
  • cursor的setting設置換行
  • 舰用燃气机数字孪生:舰船动力智慧管控核心
  • 从0到1玩转 Google SEO
  • 循环高级(1)
  • Parasoft赋能测试:精准捕捉运行时缺陷
  • 深度学习入门Day10:深度强化学习原理与实战全解析
  • 彻底弄清URI、URL、URN的关系
  • 基于LangChain框架搭建AI问答系统(附源码)
  • 将2D基础模型(如SAM/SAM2)生成的2D语义掩码通过几何一致性约束映射到3D高斯点云
  • android 不同分辨图片放错对应文件夹会怎样?
  • Python 编码与加密全解析:从字符编码到 RSA 签名验证
  • (笔记)Android ANR检测机制深度分析
  • 【微知】如何撤销一个git的commit?以及撤销的3种方式?
  • 多代理系统架构:Supervisor 与 Swarm 架构详解
  • Java面试-MySQL事务