目录

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-16LEreal浮点型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中是不包含的,看下:

可以下载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 database

    sqlite3 *ppdb;

    int ret=sqlite3_open("student.db",&ppdb);

    if(ret!=SQLITE_OK){

        printf("sqlite3_open: %s\n",sqlite3_errmsg(ppdb));

        exit(1);

    }

第二步:创建表

 //create table

    char 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 data

    int id;

    int i;

    char name[32]={0};

    int n;

    printf("please entry the insert number: ");

    scanf("%d",&n);

    

    for(i=0;i

        printf("please entry the id and name\n");

        scanf("%d %s",&id,name);

        //clean the sql

        memset(sql,0,sizeof(sql));

        sprintf(sql,"insert into demo values(%d,'%s');",id,name);

        //exert the sqlite3_exec

        ret=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 table

    memset(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

printf("%s = %s ",name[i],value[i]);

}

printf("\n");

//return 0 represent select successfully

return 0;

}

 这里的column表示字段数

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

name对应每一个字段名;

查询方式二:

//the second select method

char **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

for(j=0;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

#include

#include

#include

#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

printf("%s = %s",name[i],value[i]);

}

printf("\n");

//return 0 represent select successfully

return 0;

}

int main(){

//open the database

sqlite3 *ppdb;

int ret=sqlite3_open("student.db",&ppdb);

if(ret!=SQLITE_OK){

printf("sqlite3_open: %s\n",sqlite3_errmsg(ppdb));

exit(1);

}

//create table

char 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 data

int id;

int i;

char name[32]={0};

int n;

printf("please entry the insert number: ");

scanf("%d",&n);

for(i=0;i

printf("please entry the id and name\n");

scanf("%d %s",&id,name);

//clean the sql

memset(sql,0,sizeof(sql));

sprintf(sql,"insert into demo values(%d,'%s');",id,name);

//exert the sqlite3_exec

ret=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 table

memset(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 method

char **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

for(j=0;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

#include

#include

#include

#define maxn 100

int print(void*arg,int column,char**value,char **name){

int i;

for(int i=0;i

printf("%s = %s \n",name[i],value[i]);

}

printf("\n");

return 0;

}

int main(){

//open the database

int 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 table

char*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 table

int id,sex;

char name[30]={0};

int n;

printf("please entry the n number: \n");

scanf("%d",&n);

for(i=0;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 method

memset(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 method

int 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

for(j=0;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 database

ret=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标准,不受支持的一些功能包括完全触发器支持和写视图。

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: