数据库编程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.-lsqlite3

1.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:传递给回调函数的第一个参数;  
                       - 类似线程函数传参,需强转 - 不传参可以填NULL
    char **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,失败返回错误码


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在python中os.chdir()的含义以及用法

文章目录 一、os.chdir() 是什么&#xff1f;二、用法注意 一、os.chdir() 是什么&#xff1f; 在Python中&#xff0c;os.chdir() 是 “change directory” 的缩写&#xff0c;意思是改变当前工作目录。这个函数是Python的 os 模块的一部分&#xff0c;允许你更改程序的工作目…

CTF-虚拟机——【前置知识二】

文章目录 CPU虚拟化特权级压缩权限系统虚拟化解决方法模拟&解释执行&#xff08;VMware&#xff09;扫描&修补二进制翻译&#xff08;Binary Translation&#xff09;二进制代码翻译技术与扫描修补技术区别硬件辅助虚拟化技术&#xff08;VT&#xff09;VMX操作模式&am…

在线 sha1 加密

ttmd5 http://www.ttmd5.com/hash.php?type5 qqxiuzi https://www.qqxiuzi.cn/bianma/sha-1.htm jb51 http://tools.jb51.net/password/sha_encode

vue3安装vue-router

环境 node 18.14.2 yarn 1.22.19 windows 11 vite快速创建vue项目 参考 安装vue-touter 官网 yarn add vue-router4src下新建router文件夹&#xff0c;该文件夹下新建index.ts // router/index.ts 文件 import { createRouter, createWebHashHistory, RouterOptions, Ro…

浅谈霍尔电流传感器在UPS蓄电池浮充电流远程监测方案的应用-安科瑞 蒋静

摘要&#xff1a;针对无人平台UPS蓄电池多次出现浮充电流过高的现象&#xff0c;介绍了UPS系统的结构和工作原理&#xff0c;通过应用霍尔电流传感器&#xff0c;DCS组态&#xff0c;实现UPS蓄电池浮充电流远程监控&#xff0c;异常电流故障报警&#xff0c;推动了无人平台的自…

《向量数据库指南》——TruLens + Milvus Cloud构建RAG深入了解性能

深入了解性能 索引类型 本例中,索引类型对查询速度、token 用量或评估没有明显影响。这可能是因为数据量较小的关系。索引类型对较大语料库可能更重要。 Embedding 模型 text-embedding-ada-002 在准确性(0.72,平均 0.60)和答案相关度(0.82,平均0.62)上优于 MiniLM Embeddin…

BUUCTF [GXYCTF2019]佛系青年 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 密文&#xff1a; 下载附件&#xff0c;解压得到ZIP压缩包。 解题思路&#xff1a; 1、压缩包内有一张png图片和一个txt文本&#xff0c;解压zip压缩包&#xff0c;解压出图片&#xff0c;但txt文本提示需要输入密…

ElementUI及ElementUI Plus Axure RP高保真交互元件库及模板库

基于ElementUI2.0及ElementUI Plus3.0二次创作的ElementUI 元件库。2个版本的原型图内容会有所不同&#xff0c;ElementUI Plus3.0的交互更加丰富和高级。你可以同时使用这两个版本。 不仅包含Element UI 2.0版&#xff0c;还包含Element Plus 3版本。Element 2版支持Axure 8&…

vue+element实现多级表头加树结构

标题两种展示方式 方式一 完整代码: <template><div class"box"><el-tableref"areaPointTable":data"tableData"border:span-method"objectSpanMethod":header-cell-style"tableHeaderMerge"><el-ta…

Nacos 配置中心底层原理(1.X版本)

前言 Nacos 1.X版本 是长轮询 Nacos 2.X版本 是GRPC 长轮询 概念 客户端会轮询向服务端发出一个长连接请求&#xff0c;这个长连接最多30s就会超时&#xff0c;服务端收到客户端的请求会先判断当前是否有配置更新&#xff0c;有则立即返回&#xff0c;如果没有服务端会将这个…

第三方付支付-聚合支付系统设计方案

第三方付支付-聚合支付系统设计方案 阅读须知&#xff1a;本文仅针对聚合支付平台的核心功能架构基本概要,不涉及技术方案 目录&#xff1a;渠道管理&#xff0c;订单管理&#xff0c;对账管理&#xff0c;商家管理&#xff0c;代理管理&#xff0c;账号管理&#xff0c;风控…

LTD.com再度荣获“2023中国产业数字化技术赋能先锋”

2023年11月17日&#xff0c;由托比网主办的“第十届中国产业数字化大会”在江苏南京顺利召开。作为国内产业数字化领域的年度盛会&#xff0c;会议得到了江苏省商务厅、南京市政府的支持&#xff0c;由南京市商务局主办&#xff0c;南京鼓楼区政府提供特别支持。 会议在精彩的议…

vite vue3 配置pinia

准备 https://blog.csdn.net/qq_36437991/article/details/134474050 安装pinia 官网 yarn add piniasrc下新建store文件夹&#xff0c;该文件夹下新建index.ts import { createPinia } from "pinia"; const store createPinia(); export default store;修改ma…

挑战单芯片NOA,这款“All in one”方案或将改变主流市场走向

随着降本增效、电子架构升级&#xff08;尤其是跨域计算、多域融合等概念&#xff09;以及供应链减复&#xff08;降低电子物料的SKU&#xff09;的需求愈加明确&#xff0c;对于车载计算赛道&#xff0c;也带来新的变化。 比如&#xff0c;去年9月&#xff0c;英伟达率先发布下…

每天一点python——day69

#字符串的比较操作使用的符号&#xff1a; >[大于]&#xff0c;>[大于等于]&#xff0c;<[小于]&#xff0c;<[小于等于]&#xff0c;[等于]&#xff0c;![不等于]#如图&#xff1a; #例子&#xff1a;比较原理释义&#xff1a;每个字符在计算机里面都有一个原始值…

一次显著的接口性能优化,从10s优化到0.9s

最近在登录项目后台的时候&#xff0c;发现当我输入账号和密码后&#xff0c;竟然就卡在了 Loading 页面。。 加载了10S才进后台 等了足足 10S 才进去后台&#xff01; 通过 F12&#xff0c;打开 Network 网络请求一看&#xff0c;竟然是因为有两个接口返回的数据太慢了&#…

echarts双轴刻度线y轴刻度线对齐

splitNumber属性主要用于设置坐标轴分割的段数。例如&#xff0c;在类目轴&#xff08;category&#xff09;中&#xff0c;可以通过设置splitNumber属性来控制坐标轴被分割成的段数。需要注意的是&#xff0c;这个分割段数只是一个预估值&#xff0c;最终实际显示的段数会在这…

【cpolar】Ubuntu本地快速搭建web小游戏网站,公网用户远程访问

&#x1f3a5; 个人主页&#xff1a;深鱼~&#x1f525;收录专栏&#xff1a;cpolar&#x1f304;欢迎 &#x1f44d;点赞✍评论⭐收藏 目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置…

【SAP-QUERY】QUERY报表的创建

SQ03&#xff1a;创建用户组 环境-》查询区域-》选择标准区域 创建用户组和用户组描述 可选分配权限&#xff08;授权当前用户组下人员可以修改该query报表&#xff09; SQ02&#xff1a;创建信息集 确认区域是否为标准区域 选择创建的用户组 创建信息集&#xff1a;输入描述&a…

MaxScale读写分离

文章目录 项目背景读写分离读写分离简介环境准备配置虚拟机环境部署主从同步master主机slave主机 MaxScale简介部署MaxScale服务器授权用户master主机操作slave主机操作启动服务 测试读写分离服务 总结 项目背景 之前无论是Wordpress博客项目还是HIS医疗项目&#xff0c;我们都…