目录

1.Linux下的数据库介绍

2.嵌入式数据库的特点以及分类

(1)特点

(2)分类

3.嵌入式数据库的应用

4.SQLite数据库的安装

(1)安装SQLite数据库

(2)SQLite数据库可视化界面软件安装

5.SQLite数据库的一些基本命令

6.SQLite相关表的操作

(1)创建表

(2)表中插入数据

(3)查询表中的数据

(4)更改表中的数据

(5)建立索引

(6)删除数据和删除表

7.SQLite数据库的API函数

(1)打开数据库

(2)关闭数据库

(3)执行函数

(4)释放内存函数

(5)显示错误信息

(6)获取结果集

(7)释放结果集

(8)声明SQL语句

(9)销毁SQL语句

(10)重置SQL语句

(11)实例解释

(12)关于SQLite几点情况


1.Linux下的数据库介绍

提示:如果读者对于Oracle数据库了解的话,那么对于SQLite数据库的相关操作也类似。

Oracle学习的相关知识点(汇总)

嵌入式数据库将数据库系统与操作系统和具体应用集成在一起,运行在各种智能嵌入式设备上。与传统的数据库系统相比,它一般体积较小,有较强的便携性和易用性,以及较为完备的功能来实现用户对数据库的管理操作。

嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进行运行时,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在速度更快,需要较少的内存。

2.嵌入式数据库的特点以及分类

(1)特点

  • 嵌入式数据库不仅可以嵌入式到其他的软件当中,也可以嵌入到硬件设备当中。
  • 嵌入式系统能够在没有人工干预的情况下长时间不间断的运行。
  • 实时性。
  • 嵌入式数据库具有一定较好的移动性。

(2)分类

  • 软件嵌入式数据库

    • 面向软件的嵌入式数据库,将数据库作为组件嵌入到其他的软件系统中,一般对于数据库的安全性,稳定性和速度要求比较高。
  • 设备嵌入式数据库
    • 将关系型数据库嵌入到设备当中去,作为设备资源数据处理的核心组件,要求具有很高的实时性和稳定性。
  • 内存数据库
    • 数据库直接在内存中运行,数据处理更加高速,但是安全性方面需要额外的手段来保障。

3.嵌入式数据库的应用

  • 医疗领域
  • 军事设备和系统
  • 地理信息系统
  • 工业控制
  • 网络通信
  • 空间搜索
  • 消费类电子

4.SQLite数据库的安装

开始安装软件的时候可能需要换源:Ubuntu换源教程

SQLite对SQL92标准的支持包括索引,限制,触发和查看。SQLite不支持外键限制,但支持原子的,一致的,独立的和持久的事务。

  • 原子的:它们要么完全执行,要么根本不执行;
  • 一致的:在不一致的状态中,数据库从未被保留;
  • 独立的:在同一时间同一数据库上有两个执行操作的事务,那么这两个事务互不干扰;
  • 持久的:数据库能够在崩溃和断点的情况下不丢失数据或损坏。

SQLite数据库包含的组件:SQL编译器,内核,后端以及附件。

SQLite支持高达2TB的数据库,每个数据库完全存储在单个磁盘文件中,这些磁盘文件在不同字节顺序的计算机之间移动。

(1)安装SQLite数据库

下载:sudo apt-get install sqlite

打开:sqlite3 mydb.db

提示:读者也可以到官网下载源码编译安装:SQLite数据库官网源码下载

(2)SQLite数据库可视化界面软件安装

下载:sudo apt-get install sqlitebrowser

打开:sqlitebrower

5.SQLite数据库的一些基本命令

SQLite基本操作命令
命令 说明
.database 列出附加数据库的名称和文件
.open [数据库名称] 打开数据库
.chanages on |off 显示SQL更改的行数
.table 查看当前数据库下的表
.schema 查看数据库的表结构
.quit 退出数据库
.exit 退出数据库
.output 查询的结果输出到文件,如:.output demo.txt
.dump 输出表结构,同时输出操作记录,可以创建一个包含必要命令和数据的文件。

6.SQLite相关表的操作

字段类型
类型 说明
integer 无符号整形
varchar(20) 可变长的字符数据
text 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE
real 浮点型
blob 存储Blob数据,该类型数据和输入数据完全相同。

(1)创建表

create table [创建表名](属性1,属性2,属性3……)

如:create table demo(id integer,name varchar(20))

(2)表中插入数据

insert into table_name values(data1,data2,……)

如:insert into demo values(1,'tom');

(3)查询表中的数据

select column from table_name where expression;

如:查询表中id=1的信息

select *

from demo

where id=1;

(4)更改表中的数据

update table_name set data1=[修改的值] where expression;

如:修改id=1的信息

update demo

set name='gupdf'

where id=1;

(5)建立索引

create index index_name on table_name (field_to_be_indexed);

如:对表demo的id建立一个索引sea

create index

sea on demo(id);

(6)删除数据和删除表

删除数据:delete from table_name where expression;

如:delete from demo where id=1;

删除表:drop table table_name;

drop table demo;

7.SQLite数据库的API函数

在使用SQLite数据库的API之前,首先了解一些知识点:

SQLite的API学习手册

SQLite的API官方教程

我们在使用SQLite3之前都是需要导入头文件了<sqlite3.h>

但是这个头文件在下载的sqlite3中是不包含的,看下:

可以下载sqlite3文件查看里面并不包含include文件:sudo apt-get download sqlite3

下载sqlite3头文件:

SQLite3头文件下载

知识点来源:知识点来源

(1)打开数据库

int sqlite3_open(

const char*filename,//数据库名称

sqlite3**ppDb//输出参数,SQLite数据库句柄

);

提示:该函数用来打开或者创建一个SQLite数据库。

  • 如果在包含该函数的文件所在的路径下有同名的数据库(*.db),则打开数据库;
  • 如果不存在数据库,则在该路径下创建一个同名的数据库。
  • 如果打开或者创建数据库成功,则该函数返回0,输出参数为SQLite3类型的变量,后序对该数据库的操作,通过参数进行传递。

(2)关闭数据库

格式:int sqlite3_close(sqlite3*db);

提示:结束对数据库的操作之后需要调用该函数关闭数据库,该函数的参数为成功打开数据库时输出参数——SQLite3类型变量(句柄)

(3)执行函数

格式:

int sqlite3_exec(

sqlite3*,//打开数据库的名称

const char*sql,//要执行的SQL语句

sqlite_callback,//回调函数

void*,//回调函数的参数

char **errmsg//错误信息

)

提示:如果要对数据库进行操作,即可使用该函数来完成。如果出现错误信息的话,可以相应的错误信息保存到errmsg中。

(4)释放内存函数

格式:void sqlite3_free(char*z)

提示:在对数据库操作时,如果需要释放在中间过程中保存在内存中的数据,则可以通过此函数来清除内存空间。

(5)显示错误信息

格式:const char *sqlite3_errmsg(sqlite3*)

提示:将在对数据库的操作过程出现的错误信息通过此函数输出。

(6)获取结果集

格式:int sqlite3 _get_table(

sqlite3*,//打开数据库名称

const char*sql,//执行的SQL语句

char***resultp,//输出的结果

int *nrow,//输出结果的行数

int *ncolumn,//输出结果的列数

char**errmsg//错误信息

)

提示:对数据库进行操作时,通过此函数来获取结果。

函数的入口参数为查询的SQL语句,出口参数为二维指针,指示查询结果的内容,还有结果的行数和列数,行数为纯记录条数,但是resultp数组里面包含了一行字段名的值。

resultp输出的结果应该是下面的样子(了解输出的结果才能很好的对结果进行处理):

(7)释放结果集

格式:int sqlite3_free_table(char**result)

提示:释放sqlite3 _get_table函数所分配的内存。

(8)声明SQL语句

格式:int sqlite3_prepare(

sqlite3*,

const char*,

int sqlite3_stmt**,

const char**

)

提示:将一条SQL语句编译成字节码留给后面的执行函数,使用该接口访问数据库当前比较的一种方式。

(9)销毁SQL语句

格式:int sqlite3_finalize(sqlite3_stmt*)

提示:销毁将一个准备好的SQL声明,在数据库关闭之前,所有准备好的声明都将被释放销毁。

(10)重置SQL语句

格式:int sqlite3_reset(sqlite3_stmt*)

提示:重置一个SQL声明的状态,使得它可以被再次执行。

(11)实例解释

例子1描述:使用SQLite的API函数实现新建一个数据库student.db,并且在数据库中创建表demo,想表中插入数据,查询插入的数据,最后关闭数据库。

第一步:创建一个.c文件sudo touch sqlite_Demo01.c

打开.c文件编写代码:sudo gedit sqlite_Demo01.c

第一步:打开数据库

//open the databasesqlite3 *ppdb;int ret=sqlite3_open("student.db",&ppdb);if(ret!=SQLITE_OK){printf("sqlite3_open: %s\n",sqlite3_errmsg(ppdb));exit(1);}

第二步:创建表

 //create tablechar sql[maxn]={0};sprintf(sql,"create table if not exists demo(id integer primary key,name varchar(20));");ret=sqlite3_exec(ppdb,sql,NULL,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_create_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}

第三步:插入数据

 //insert the dataint id;int i;char name[32]={0};int n;printf("please entry the insert number: ");scanf("%d",&n);for(i=0;i<n;i++){printf("please entry the id and name\n");scanf("%d %s",&id,name);//clean the sqlmemset(sql,0,sizeof(sql));sprintf(sql,"insert into demo values(%d,'%s');",id,name);//exert the sqlite3_execret=sqlite3_exec(ppdb,sql,NULL,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_insert_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}}

第四步:查询数据

//select the tablememset(sql,0,sizeof(sql));sprintf(sql,"select * from demo;");ret=sqlite3_exec(ppdb,sql,print,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_select_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}

打印输出的回调函数print如下:

//print function
//the name dedicate id and name
//the value dedicate id=1 and name='tom'......
int print(void*arg,int column,char**value,char**name){int i;for(i=0;i<column;i++){printf("%s = %s  ",name[i],value[i]);}printf("\n");//return 0 represent select successfullyreturn 0;
}

这里的column表示字段数

value表示每一个字段对应的值;

name对应每一个字段名;

查询方式二:

//the second select methodchar **result;int row,column;ret=sqlite3_get_table(ppdb,sql,&result,&row,&column,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_select_2_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}int j;int index=column;for(i=0;i<row;i++){for(j=0;j<column;j++){printf("%s = %s  ",result[j],result[index]);index++;}printf("\n");}

这里的column指的是字段数;

这里的row表示行数;

数据结果集中排列方式如下:

最后一步:关闭数据库

//关闭数据库
ret=sqlite3_close(ppdb);
if(ret!=SQLITE_OK){printf("sqlite3_exec_close_database: %s\n",sqlite3_errmsg(ppdb));
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<sqlite3.h>
#include<string.h>#define maxn 100//print function
//the name dedicate id and name
//the value dedicate id=1 and name='tom'......
int print(void*arg,int column,char**value,char**name){int i;for(i=0;i<column;i++){printf("%s = %s",name[i],value[i]);}printf("\n");//return 0 represent select successfullyreturn 0;
}int main(){//open the databasesqlite3 *ppdb;int ret=sqlite3_open("student.db",&ppdb);if(ret!=SQLITE_OK){printf("sqlite3_open: %s\n",sqlite3_errmsg(ppdb));exit(1);}//create tablechar sql[maxn]={0};sprintf(sql,"create table if not exists demo(id integer primary key,name varchar(20));");ret=sqlite3_exec(ppdb,sql,NULL,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_create_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}//insert the dataint id;int i;char name[32]={0};int n;printf("please entry the insert number: ");scanf("%d",&n);for(i=0;i<n;i++){printf("please entry the id and name\n");scanf("%d %s",&id,name);//clean the sqlmemset(sql,0,sizeof(sql));sprintf(sql,"insert into demo values(%d,'%s');",id,name);//exert the sqlite3_execret=sqlite3_exec(ppdb,sql,NULL,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_insert_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}}//select the tablememset(sql,0,sizeof(sql));sprintf(sql,"select * from demo;");ret=sqlite3_exec(ppdb,sql,print,NULL,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_select_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}//the second select methodchar **result;int row,column;ret=sqlite3_get_table(ppdb,sql,&result,&row,&column,NULL);if(ret!=SQLITE_OK){printf("sqlite3_exec_select_2_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}int j;int index=column;for(i=0;i<row;i++){for(j=0;j<column;j++){printf("%s = %s  ",result[j],result[index]);index++;}printf("\n");}//关闭数据库ret=sqlite3_close(ppdb);if(ret!=SQLITE_OK){printf("sqlite3_exec_close_database: %s\n",sqlite3_errmsg(ppdb));}return 0;
}

运行:sudo gcc [源文件.c] -o [可执行文件.o] -lsqlite3

例子2:创建一个数据库SQLdatabase数据库,并且创建一个demo表,向表中插入数据并且对插入的数据进行查询,更改和删除,最后关闭数据库。

#include<stdio.h>
#include<stdlib.h>
#include<sqlite3.h>
#include<string.h>#define maxn 100int print(void*arg,int column,char**value,char **name){int i;for(int i=0;i<column;i++){printf("%s = %s  \n",name[i],value[i]);}printf("\n");return 0;
}int main(){//open the databaseint i;sqlite3*ppdb;int ret = sqlite3_open("SQLdatabase.db",&ppdb);if(ret!=SQLITE_OK){printf("sqlite_error_open: %s\n",sqlite3_errmsg(ppdb));exit(1);}  //create the tablechar*Errormsg;char sql[maxn]={0};sprintf(sql,"create table if not exists demo(id integer,name varchar(20),sex integer);");ret = sqlite3_exec(ppdb,sql,NULL,NULL,&Errormsg);if(ret!=SQLITE_OK){printf("sqlite_error_exec_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}   //insert data into tableint id,sex;char name[30]={0};int n;printf("please entry the n number: \n");scanf("%d",&n);for(i=0;i<n;i++){printf("please entry the id ,name and sex\n");scanf("%d %s %d",&id,name,&sex);memset(sql,0,sizeof(sql));sprintf(sql,"insert into demo values(%d,'%s',%d);",id,name,sex);ret=sqlite3_exec(ppdb,sql,NULL,NULL,&Errormsg);if(ret!=SQLITE_OK){printf("sqlite_error_insert_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}}//select the data//the first methodmemset(sql,0,sizeof(sql));sprintf(sql,"select * from demo;");ret=sqlite3_exec(ppdb,sql,print,NULL,&Errormsg);if(ret!=SQLITE_OK){printf("sqlite_error_select_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}//the second methodint row;int column;char**result;ret=sqlite3_get_table(ppdb,sql,&result,&row,&column,&Errormsg);if(ret!=SQLITE_OK){printf("sqlite_error_get_table: %s\n",sqlite3_errmsg(ppdb));exit(1);}int j;int index=column;for(i=0;i<row;i++){for(j=0;j<column;j++){printf("%s = %s  ",result[i],result[index]);index++;}printf("\n");}//delete the data    memset(sql,0,sizeof(sql));  printf("please entry the delete id: ");scanf("%d",&id);sprintf(sql,"delete from demo where id=%d;",id);ret=sqlite3_exec(ppdb,sql,NULL,NULL,&Errormsg);if(ret!=SQLITE_OK){printf("sqlite_error_delete_data: %s\n",sqlite3_errmsg(ppdb));exit(1);}//close the databaseret=sqlite3_close(ppdb);if(ret!=SQLITE_OK){printf("sqlite_error_close_database: %s\n",sqlite3_errmsg(ppdb));exit(1);}return 0;
}

(12)关于SQLite几点情况

  • 目前没有可用于SQLite的网络服务器。
  • SQLite只提供数据库级IDE锁定;
  • SQLite没有用户账户概念;
  • SQLite支持多数的SQL92标准,不受支持的一些功能包括完全触发器支持和写视图。

Linux下的SQLite数据库的基本使用相关推荐

  1. 如何在linux上安装sqlite数据库

    如何在linux上安装sqlite数据库 一.下载 二.解压 三.配置(configure) 四.编译和安装 五.执行sqlite3程序 六.测试代码 一.下载 首先要先下载sqlite3源码包 链接 ...

  2. 如何在linux系统下修改mysql密码_如何在linux下修改mysql数据库密码?linux修改数据库密码的方法...

    本篇文章给大家带来的内容是介绍如何在linux下修改mysql数据库密码?linux修改数据库密码的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. Linux下修改Mysql的 ...

  3. Linux下修改Mysql数据库存放路径

    Linux下修改Mysql数据库存放路径 原路径:/var/lib/mysql 目标路径:/home/data/mysql 1.home目录下建立data目录 cd /home mkdir data ...

  4. linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

  5. linux下手动删除数据库实例

    linux下手动删除数据库实例,直接删除相应的目录就可以了,不多说了.... 1. $ORACLE_HOME/dbs/ [oracle9@frogger dbs]$ pwd /u01/app/orac ...

  6. 卸载linux下的mysql数据库实例_Linux下卸载MySQL数据库实例教程

    本文主要介绍了Linux下卸载MySQL数据库的方法,不知道Linux下卸载MySQL数据库的小伙伴们可以学习一下,本文具有一定的参考价值,希望能帮助到大家. 如何在Linux下卸载MySQL数据库呢 ...

  7. Linux下开启mysql数据库的远程访问权限

    摘要:今天在Linux服务器上安装了msyql数据库,在本地访问的时候可以访问,但是我想通过远程的方式访问的时候就不能访问了,查询资料后发现,Linux下mysql默认安装完成后只有本地访问的权限,没 ...

  8. LINUX 下 配置MySQL数据库集群

    LINUX 下 配置MySQL数据库集群 MySQL数据库集群进行正确配置步骤(1) 此文章主要向大家讲述的是对MySQL数据库集群进行正确配置的实际操作步骤,以及对其概念的讲述,如果你对其相关的实际 ...

  9. 脚本同步mysql数据_windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

最新文章

  1. webform repeater
  2. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞
  3. CMS模板应用调研问卷
  4. python3 sleep 并发_Python3并发写文件与Python对比
  5. 剑与远征“超能力”玩家,恶魔瑟可斯上线第1天就被他拉满
  6. array_sum的用法
  7. mybatis3源码1-初始化
  8. windows下使用批处理设置环境变量
  9. 【名词解释】7.UML类图
  10. cad 2005 计算机,AutoCAD2005
  11. python捕捉kdj交易信号_KDJ指标详解:教你两种方式判断交易信号!
  12. 利用cookie实现登陆知网与抽屉网 基于session自动登录抽屉网 cookie与session区别
  13. 初恋失败让我学会推销自己
  14. 数据结构名词解释详细总结
  15. JavaScript数组对象深拷贝
  16. 拥有火绒后关闭Windows防火墙
  17. MMD导入unity中使用
  18. 基于itchat的自动调查机器人
  19. --TEXT()函数与TEXT()有什么区别
  20. 有道翻译 python 翻译

热门文章

  1. 【UML学习】--包图
  2. 【力扣刷题——字符串】附力扣链接、题目描述、解题方法及代码(344、541、剑指Offer05、151、剑指 Offer58、28、459)后续再补充
  3. python openpyxl 设置表格列宽的自动适应_Python的openpyxl列宽调整大小
  4. CSS 图片浮动导致页面无垂直拓展
  5. 太阳高度角计算题_太阳高度角的计算问题
  6. koa2中使用jwt
  7. 0Ω电阻到底能过多大电流
  8. 零基础开发一款微信小程序商城
  9. Deep Knowledge Tracing with Transformers论文阅读
  10. 劳务派遣制度与工伤保险制度的衔接