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

数据库编程

数据库的概念

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

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

数据库分类

复制代码
常用的数据库`
`大型数据库 :Oracle`

`中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 `
`小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码 `

`SQLite基础`
` SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。`
` SQLite有以下特性: `
`     	零配置一无需安装和管理配置; `
`     	储存在单一磁盘文件中的一个完整的数据库; `
`     	数据库文件可以在不同字节顺序的机器间自由共享; `
`     	支持数据库大小至2TB(1024G =` `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.c -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,失败返回错误码`

`
相关推荐
everyStudy32 分钟前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
城南云小白32 分钟前
web基础+http协议+httpd详细配置
前端·网络协议·http
小诸葛的博客33 分钟前
pg入门1——使用容器启动一个pg
数据库
luthane34 分钟前
python 实现average mean平均数算法
开发语言·python·算法
xuanyu2237 分钟前
Linux常用指令
linux·运维·人工智能
凡人的AI工具箱1 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
sleP4o1 小时前
Python操作MySQL
开发语言·python·mysql
是店小二呀1 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
洛寒瑜1 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序