数据库编程sqlite3库安装及使用

数据库编程

数据库的概念

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。

数据库分类

常用的数据库
大型数据库 :Oracle中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 
小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码 SQLite基础
 SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。
 SQLite有以下特性: 
     	零配置一无需安装和管理配置; 
     	储存在单一磁盘文件中的一个完整的数据库; 
     	数据库文件可以在不同字节顺序的机器间自由共享; 
     	支持数据库大小至2TB(1024= 1TB);足够小,全部源码大致3万行c代码,250KB; 
        比目前流行的大多数数据库对数据的操作要快;创建SQLite数据库:
手工创建 
     使用sqlite3工具,通过手工输入SQL命令行完成数据库创建. 
     用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具 
代码创建 
在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库 
虚拟机中sqlite3安装
sqlite3 安装:
在线安装
 1、设置能够上网
 2、更新更新源
	apt-get update
 3、安装软件及开发环境
    apt-get install sqlite3		--->sqlite3数据库软件
    apt-get install libsqlite3-dev	--->sqlite3数据库开发支持库
    apt-get install sqlite3-doc		--->sqlite3数据库说明文档--------------------------------		
   apt-get install sqlitebrowser		--->sqlite3数据库操作软件
源码安装:
tar xf sqlite-autoconf-3140100.tar.gz
./configure
make
sudo make install

安装完成后,可以使用sqlite3 -version命令来测试是否安装成功

$ sqlite3 -version 
3.14.1 2016-08-11

基础SQL语句使用

【腾讯文档】sqlite基础SQL语句使用

sqlite基础SQL语句使用

sqlite使用入门

数据库 · 华清远见工作空间

sqlite3的使用: 
  1. 使用sql系统命令,  创建一个学生库sqlite3 student.db

  1. 使用SQL命令 , 创建表; .tables 查看表 .schema 查看表结构

  1.  使用SQL命令 , 插入内容; insert into (表名) values(数据内容)

  1. 使用 SQL命令 , 查询内容;select * from stu 查看表中所有内容

  1. 使用SQK命令 , 设置主键 (只有在创建表时才能设置为主键:不能重复)

  1. 删除一个表 drop

  1. 打开图形化数据库

创建查看

sqlite3编程

API接口文档

官方文档:List Of SQLite Functions

中文文档:SQLite 命令 - SQLite 中文版 - UDN开源文档

头文件:#include <sqlite3.h>
编译:gcc sqlite1.-lsqlite31.int sqlite3_open(char  *path, sqlite3 **db);功能:打开sqlite数据库,如果数据库不存在则创建它
path: 数据库文件路径
db: 指向sqlite句柄的指针
返回值:成功返回SQLITE_OK,失败返回错误码(非零值)2.int sqlite3_close(sqlite3 *db);功能:关闭sqlite数据库
返回值:成功返回SQLITE_OK,失败返回错误码返回值:返回错误信息3.执行sql语句接口
int sqlite3_exec(
  sqlite3 *db,                                  /* 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操作
db:数据库句柄
sql:要执行SQL语句
callback:回调函数(满足一次条件,调用一次函数,用于查询)
    再调用查询sql语句的时候使用回调函数打印查询到的数据
arg:传递给回调函数的参数
errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码回调函数:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);功能:select:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组(列值)
f_name:包含每个字段名称的指针数组(列名)
返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调4.不使用回调函数执行SQL语句(只用于查询)
int sqlite3_get_table(sqlite3 *db, const  char  *sql, char ***resultp,  int *nrow,  int *ncolumn, char **errmsg);功能:执行SQL操作
db:数据库句柄                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
sql:SQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址返回值:成功返回SQLITE_OK,失败返回错误码5.返回sqlite3定义的错误信息
char *sqlite3_errmsg(sqlite3 *db);

创建查看

sqlite3 数据库使用

数据库简介

常用的数据库
大型数据库 :Oracle                                     
中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 
小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据)SQLite基础SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。SQLite有以下特性: 
     	零配置一无需安装和管理配置; 
     	储存在单一磁盘文件中的一个完整的数据库; 
     	数据库文件可以在不同字节顺序的机器间自由共享; 
     	支持数据库大小至2TB(1024G = 1TB);  嵌入式足够
        足够小,全部源码大致3万行c代码,250KB; 
        比目前流行的大多数数据库对数据的操作要快;创建SQLite数据库:1. 手工创建 
     使用sqlite3工具,通过手工输入SQL命令行完成数据库创建. -----------------两种方式都会用得到,重点是代码创建--------------------
2. 代码创建 
在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,
此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库 

虚拟中sqlite3安装

源码安装:

安装完成后,可以使用sqlite3 -version命令来测试是否安装成功

基础SQL语句使用

sql有两种命令:

        1. sqlite3系统命令          ---            .开头 

  2.  SQL命令                    ---           ;结尾 

        命令在 记事本 中详细展示,  群内已分享 sqlite3 sql语句.txt  

sqlite3 API接口 

List Of SQLite Functions

常用接口会在 sqlite3 编程中具体展示

sqlite3编程

头文件:    #include <sqlite3.h>

编译方式:   gcc  文件名.c  -lsqlite3

1)打开或创建数据库

打开或创建数据库
sqlite3_open
头文件: #include<sqlite3.h>
声明: int  sqlite3_open(char  *path,  sqlite3 **db);        
功能:打开sqlite数据库 (或新建数据库) 
参数:
		path: 数据库文件路径         
		db: 指向数据库句柄的指针 
                             - 该二级指针指向一级指针地址,最终会存储打开的数据库的首地址   返回值:成功返回0,失败返回错误码(非零值)	
使用: 	sqlite3 *db;
		  if(sqlite3_open("stu.db",&db) != 0)
                {
                 fprintf(stderr,”err: %s\n”,sqlite3_errmsg(db));
                 }//sqlite3自带的打印错误信息		

2)打印错误信息

打印错误信息
sqlite3_errmsg
声明:const  char  *sqlite3_errmsg(sqlite3 *db);  //bd;
功能:  打印错误信息
返回值:返回错误信息
使用:   fprintf(stderr,"sqlite3_open failed  %s\n",sqlite3_errmsg(db));

使用: 

3)关闭数据库

sqlite3_close
声明: int   sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回0,失败返回错误码
使用:   sqlite3_close(db);

4)执行sql语句

功能:执行sql语句;
原型:int sqlite3_exec(
      sqlite3 *db,                    /* An open database */      const char *sql,                /* SQL to be evaluated */int (*callback)(void*,int,char**,char**),  void *arg,                 /* 1st argument to callback */char **errmsg             /* Error msg written here */);
参数:
    sqlite3 *db:指定要操作的数据库句柄指针;char *sql:指定要执行的sql语句; int (*callback)(void*,int,char**,char**):回调函数; 
 {callback(void *arg,int f_num,char ** f_value ,char **f_name)}void *arg:传递给回调函数的第一个参数;  - 类似线程函数传参,需强转 - 不传参可以填NULLchar **errmsg:该二级指针指向的以一级指针会存储错误信息的首地址;(定义一个一级指针就好了)
         错误信息存储在静态存储区,存在着相应的源码,我们不用去深究
返回值:
    成功,返回SQLITE_OK,其实就是0;
    失败,返回e
    rror_code,其实就是非0

使用: 

sqlite3_exec : 每查询到一行满足条件的信息, 都会调用一次callback函数显示结果

int sqlite3_exec 的回调函数:(一般在执行 需要终端打印数据的时候使用) int callback(void *arg, int columns, char **column_text, \char **column_name);功能:sqlite3_exec每找到一条满足条件的记录,就会执行一次回调函数。参数:void *arg:sqlite3_exec的第四个参数传入;int columns:查询结果的列数;char **column_text:该二级指针指向的是一个数组,该数组是一个指针数组
              数组中的元素都是char*类型的指针。指针指向查询结果的内容char **column_name:该二级指针指向的是一个数组,该数组是一个指针数组
              数组中的元素都是char*类型的指针,指针指向查询结果的列名;返回值

    成功时候必须返回0,该返回值会返回给sqlite3_exec函数,
    如果没有返回0,则sqlite3_exec会认为回调函数运行失败,从而导致sqlite3_exec运行失败;  //记得加入 return 0;

关于回调函数中, 如何打印查询的内容: 

查询

只用于查询
sqlite3_get_table()
声明: int sqlite3_get_table(sqlite3 *db, const char *sql,\char ***resultp, int *nrow, int *ncolumn, char **errmsg);功能:执行SQL操作参数:   db:数据库句柄   
      sql:SQL语句
      resultp:用来指向sql执行结果的指针 (该参数三级指针,肯定指向二级指针,所以定义二级指针变量) 
      nrow:该一级指针指向的内存空间中存储结果的行数,(一级指针指向变量地址)
                              包括列名  id  name  sorce
      ncolumn:该一级指针指向的内存空间中存储结果的列数 
      errmsg:该二级指针指向的一级指针会存储错误信息首地址 返回值:成功返回SQLITE_OK,失败返回错误码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql:记录表膨胀引起的io问题的处理

文章目录 1. io异常2.查看profile报告2.1 生成事发时间段的pgprofile2.2 查看报告 3.检查table是否膨胀4.执行vacuum full5.总结 1. io异常 iostat -x 1 20 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq…

老师怎么才能让学生听话

在教育学生的过程中&#xff0c;如何让他们听话并且尊重师长&#xff0c;是一个老师需要深入思考的问题。这不仅涉及到学生的学习进步&#xff0c;还关系到他们的人格形成。以下是一些方法和策略&#xff0c;帮助教师更好地引导学生&#xff0c;使他们更愿意听从教导。 建立信任…

轻量封装WebGPU渲染系统示例<36>- 广告板(Billboard)(WGSL源码)

原理不再赘述&#xff0c;请见wgsl shader实现。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/BillboardEntityTest.ts 当前示例运行效果: WGSL顶点shader: group(0) binding(0) var<uniform> objMat :…

【机器学习】对比学习(contrastive learning)

对比学习是一种机器学习技术&#xff0c;算法学习区分相似和不相似的数据点。对比学习的目标是学习数据的表示&#xff0c;以捕捉不同数据点之间的基本结构和关系。 在对比学习中&#xff0c;算法被训练最大化相似数据点之间的相似度&#xff0c;并最小化不相似数据点之间的相似…

U-boot(三):start.S

本文主要探讨x210的uboot的start.S文件,也是uboot启动的第一阶段。 头文件 config.h config.h x210_sd.h,由mkconfig脚本生成,包含了开发板的配置宏 rootkaxi-virtual-machine:~/qt_x210v3s_160307/uboot/include# cat config.h /* Automatically generate…

el-date-picker ie模式下 初始化未赋值;未清空

el-date-picker ie模式下 初始化未赋值;未清空 给 dete-picker 加key属性 eg:

接口自动化测试实战:JMeter+Ant+Jenkins+钉钉机器人群通知完美结合

前言 一、本地JAVA环境安装配置,安装JAVA8和JAVA17 二、安装和配置Jmeter 三、安装和配置ant 四、jmeter + ant配置 五、jenkins安装和配置持续构建项目 六、jenkins配置流程 前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境…

redis的高可用

redis-cli -h 192.168.233.10 -p 6379 redis的数据类型的增删改查 redis的高可用在集群当中有一个非常重要的指标&#xff0c;提供正常服务的时间的百分比(365天) 99.9% redis的高可用含义更加广泛&#xff0c;正常服务是指标之一&#xff0c;数据容量的扩展&#xff0c;数据…

2023亚太杯数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

给新手教师的成长建议

随着教育的不断发展和进步&#xff0c;越来越多的新人加入到教师这个行列中来。从学生到教师&#xff0c;这是一个华丽的转身&#xff0c;需要我们不断地学习和成长。作为一名新手老师&#xff0c;如何才能快速成长呢&#xff1f;以下是一名老师教师给的几点建议&#xff1a; 一…

人工智能对我们的生活影响有多大

随着科技的飞速发展&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;并且越来越受到人们的关注。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到医疗诊断&#xff0c;人工智能技术正在改变着我们的生活方式。那么&#xff0c;人工智能对我们的生活影…

使用 RAFT 的光流:第 1 部分

一、说明 在这篇文章中&#xff0c;我们将了解一种旗舰的光流深度学习方法&#xff0c;该方法获得了 2020 年 ECCV 最佳论文奖&#xff0c;并被引用超过 1000 次。它也是KITTI基准测试中许多性能最佳的模型的基础。该模型称为 RAFT&#xff1a;Recurrent All-Pairs Field Trans…

微信表情太大怎么缩小?一分钟教会你!

在微信的较早版本中&#xff0c;单个表情的最大体积限制为500KB&#xff0c;而在后续版本中&#xff0c;这一限制已经放宽。目前&#xff0c;微信允许上传的单个表情最大体积为2MB。所以&#xff0c;我们只需要把图片或者GIF缩小到2MB即可&#xff0c;下面就向大家介绍三种实用…

如何给面试官解释什么是分布式和集群?

分布式&#xff08;distributed&#xff09; 是指在多台不同的服务器中部署不同的服务模块&#xff0c;通过远程调用协同工作&#xff0c;对外提供服务。 集群&#xff08;cluster&#xff09; 是指在多台不同的服务器中部署相同应用或服务模块&#xff0c;构成一个集群&#…

(论文阅读40-45)图像描述1

40.文献阅读笔记&#xff08;m-RNN&#xff09; 简介 题目 Explain Images with Multimodal Recurrent Neural Networks 作者 Junhua Mao, Wei Xu, Yi Yang, Jiang Wang, Alan L. Yuille, arXiv:1410.1090 原文链接 http://arxiv.org/pdf/1410.1090.pdf 关键词 m-RNN、…

Java面试题07

1.线程池都有哪些状态&#xff1f; 线程池的状态有RUNNING&#xff08;运行中&#xff09;、SHUTDOWN&#xff08;关闭中&#xff0c;不接受新任务&#xff09;、 STOP&#xff08;立即关闭&#xff0c;中断正在执行任务的线程&#xff09;和TERMINATED&#xff08;终止&#x…

数字化转型与企业创新—基于中国上市公司年报的经验证据(2007-2022年)

参照潘红波&#xff08;2022&#xff09;的做法&#xff0c;对来自中南大学学报《数字化转型与企业创新—基于中国上市公司年报的经验证据》一文中的基准回归部分进行复刻。文章实证检验数字化转型对企业创新的影响。用年报词频衡量 一、数据介绍 数据名称&#xff1a;数字化转…

【C++心愿便利店】No.14---C++之探索list底层原理

文章目录 前言一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list operations1.2.7 list的迭代器失效 二、list的模拟实现2.1 定义一个结构体实现list的…

深入分析TaskView源码之触摸相关

问题背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;android 10以后TaskView作为替代ActivityView的容器&#xff0c;在课程的分屏pip自由窗口专题也进行了相关的详细介绍分析。 这里再补充一下相关的TaskView和桌面内嵌情况下的触摸分析 主要问题点&#xff…

【经验分享】Ubuntu如何设置swap交换

我的Linux小鸡内存只有512兆&#xff0c;经常爆内存&#xff0c;导致很多应用没有办法一直正常运行&#xff0c;可以通过设置swap来缓解一下&#xff0c;虽然和内存的速度无法媲美&#xff0c;但是能一定程度缓解一下问题 文章目录 1. 创建一个交换文件2. 设置正确的权限3. 设置…