当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > sqlite3数据库常用指令及函数接口介绍

sqlite3数据库常用指令及函数接口介绍 时间:2018-07-30      来源:未知

【1】 sqlite3的安装:

1.离线安装:sudo dpkg -i *.deb

2.在线安装: sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

【2】 sqlite3的基本命令:

1.系统命令:

以‘.’(点)开头的命令

.help 帮助

.quit 退出

.exit 退出

.schema 查看标的结构图

.databases 查看打开的数据库

.table 查看表

2.sql命令:

不以‘.’(点)开头,但是需要以‘;’(分号)结尾;

1)创建一张数据的表

create table student(no Integer,name char,score float);

数据类型:

Integer 整型

char 字符串,也可以用string

...

2)插入一条数据:

完整数据插入:

insert into student values(1, ‘zhangsan', 80);

注意:字符串zhangsan既可以用单引号‘zhangsan’,也可以用双引号“zhangsan”;

部分数据插入:

insert into student (no,name) values(2, 'lisi');

3)查询记录

完整数据查询:

select * from student;

部分数据查询:

select no,name from student;

按照条件查询:

select * from student where score=100;

select * from student where no=1 and score=100;

select * from student where no=1 or score=100;

4)删除记录:

删除某一条记录:

delete from student where name='lisi';

删除整张表数据:

delete from student;

5)更新记录:

update student set name=‘lisi’ where id=3;

update student set name='lisi',score=80 where id=2;

6)在表中增加一列

alter table student add column address char

7)在表中删除一列:

不支持直接删一列:

1)创建一个新的表并从原有表中提取字段;

create table stu as select id, name, score from student;

2)删除原有的表格;

drop table student;

3)将新的表格名字改为原有表的名字

alter table stu rename to student;

【3】 sqlite3函数接口:

int sqlite3_open(

const char *filename, /* Database filename (UTF-8) 要操作的数据库文件的路径;*、

sqlite3 **ppDb /* OUT: SQLite db handle */

);

功能:打开一个数据库;

参数:

filename: 代表数据库的路径名;

ppdb: 代表数据库的操作句柄(指针);

返回值:成功-SQLITE_OK,出错-错误码;

int sqlite3_close(sqlite3*);

功能:关闭数据库

参数:

db :操作数据库的句柄;

返回值:成功-SQLITE_OK,出错-错误码;

const char *sqlite3_errmsg(sqlite3*);

功能:通过db句柄,得到数据库操作的错误信息;

返回值:错误信息的首地址;

/********************************************************

int sqlite3_exec(

sqlite3*, /* An open database */

const char *sql, /* SQL to be evaluated */

int (*callback)(void*,int,char**,char**), /* Callback function */

void *, /* 1st argument to callback */

char **errmsg /* Error msg written here */

);

功能:执行一条sql语句;

参数:

db :数据库操作句柄;

sql :一条sql语句;

callback:只有sql为查询语句的时候,才会执行此语句;

arg :给回调函数callback传递参数;

errmsg :错误消息

返回值:成功-SQLITE_OK,出错-错误码;

int (*callback)(void *arg, int, char **, char **); /* Callback function */

功能:查询的结果,是一个函数指针类型,传递一个函数名即可。

参数:

para :传递给回调函数的参数;

f_num :记录中包含的字段数目;

f_value :包含每个字段值的指针数组;

f_name :包含每个字段名称的指针数组

返回值:成功返回0,失败返回-1;

***********************************************************/

查询数据:

int sqlite3_get_table(

sqlite3 *db, /* An open database */

const char *zSql, /* SQL to be evaluated */

char ***pazResult, /* Results of the query */

int *pnRow, /* Number of result rows written here */

int *pnColumn, /* Number of result columns written here */

char **pzErrmsg /* Error msg written here */

);

功能,查询表中数据

参数:

db :数据库操作句柄

zSql :查询的sql语句

pazResult :查询结果的返回地址;

pnRow :满足条件的记录数目(表中的行数)

pnColumn:每条记录包含的字段数目(表中的列数)

pzErrmsg:错误信息指针的地址;

返回值:成功返回0,失败返回错误码。

void sqlite3_free_table(char **result);

sqlite3 语句总结

1、

sqlite3长用于 轻量级的数据存储,象单片机这一类,但是现在的sqlite3,已经很先进,不能小看

2、sqlite3常用命令

当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:

#sqlite3 test.db

查看数据库文件信息命令(注意命令前带字符'.'):

sqlite>.database

查看所有表的创建语句:

sqlite>.schema

查看指定表的创建语句:

sqlite>.schema table_name

以sql语句的形式列出表内容:

sqlite>.dump table_name

设置显示信息的分隔符:

sqlite>.separator symble

Example:设置显示信息以‘:’分隔

sqlite>.separator :

设置显示模式:

sqlite>.mode mode_name

Example:默认为list,设置为column,其他模式可通过.help查看mode相关内容

sqlite>.mode column

输出帮助信息:

sqlite>.help

设置每一列的显示宽度:

sqlite>.width width_value

Example:设置宽度为2

sqlite>.width 2

列出当前显示格式的配置:

sqlite>.show

退出sqlite终端命令:

sqlite>.quit

sqlite>.exit

3、sqlite3指令

sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。

如:

sqlite>create studen_table(Stu_no interger PRIMARY KEY, Name text NOT NULL, Id interger UNIQUE, Age interger CHECK(Age>6), School text DEFAULT 'xx小学);

该语句创建一个记录学生信息的数据表。

3.1 sqlite3存储数据的类型

NULL:标识一个NULL值

INTERGER:整数类型

REAL:浮点数

TEXT:字符串

BLOB:二进制数

3.2 sqlite3存储数据的约束条件

Sqlite常用约束条件如下:

PRIMARY KEY - 主键:

1)主键的值必须唯一,用于标识每一条记录,如学生的学号

2)主键同时也是一个索引,通过主键查找记录速度较快

3)主键如果是整数类型,该列的值可以自动增长

NOT NULL - 非空:

约束列记录不能为空,否则报错

UNIQUE - 唯一:

除主键外,约束其他列的数据的值唯一

CHECK - 条件检查:

约束该列的值必须符合条件才可存入

DEFAULT - 默认值:

列数据中的值基本都是一样的,这样的字段列可设为默认值

3.3 sqlite3常用指令

1)建立数据表

create table table_name(field1 type1, field2 type1, ...);

table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。

例,建立一个简单的学生信息表,它包含学号与姓名等学生信息:

create table student_info(stu_no interger primary key, name text);

create table if not exists 表名(字段名1,字段名2...);

2)添加数据记录

insert into table_name(field1, field2, ...) values(val1, val2, ...);

valx为需要存入字段的值。

例,往学生信息表添加数据:

Insert into student_info(stu_no, name) values(0001, alex);

3)修改数据记录

update table_name set field1=val1, field2=val2 where expression;

where是sql语句中用于条件判断的命令,expression为判断表达式

例,修改学生信息表学号为0001的数据记录:

update student_info set stu_no=0001, name=hence where stu_no=0001;

4)删除数据记录

delete from table_name [where expression];

不加判断条件则清空表所有数据记录。

例,删除学生信息表学号为0001的数据记录:

delete from student_info where stu_no=0001;

5)查询数据记录

select指令基本格式:

select columns from table_name [where expression];

a查询输出所有数据记录

select * from table_name;

b限制输出数据记录数量

select * from table_name limit val;

c升序输出数据记录

select * from table_name order by field asc;

d降序输出数据记录

select * from table_name order by field desc;

e条件查询

select * from table_name where expression;

select * from table_name where field in ('val1', 'val2', 'val3');

select * from table_name where field between val1 and val2;

f查询记录数目

select count (*) from table_name;

g区分列数据

select distinct field from table_name;

有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。

6)建立索引

当说数据表存在大量记录,索引有助于加快查找数据表速度。

create index index_name on table_name(field);

例,针对学生表stu_no字段,建立一个索引:

create index student_index on student_table(stu_no);

建立完成后,sqlite3在对该字段查询时,会自动使用该索引。

7)删除数据表或索引

drop table table_name;

drop index index_name;

打开数据库链接sqlite3_open用法

原型:

int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ )

用这个函数开始数据库操作。需要传入两个参数,一是数据库文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件来打开。二是sqlite3**,即前面提到的关键数据结构。这个结构底层细节如何,你不要管它。函数返回值表示操作是否正确,如果是SQLITE_OK则表示操作正常。相关的返回值sqlite定义了一些宏。具体这些宏的含义可以参考sqlite3.h 文件。里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。只要你会看英文,sqlite 可以让你学到不少东西)。

关闭数据库链接sqlite3_close用法

原型:

int sqlite3_close(sqlite3 *ppDb)

Db为刚才使用sqlite3_open打开的数据库链接

执行sql操作sqlite3_exec用法

原型:

int sqlite3_exec( sqlite3* ppDb, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */ )

这就是执行一条sql 语句的函数。第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。第2个参数constchar*sql是一条sql 语句,以\0结尾。第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。第5个参数char** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接cout<

exec 的回调

typedef int(*sqlite3_callback)(void*,int,char**,char**);你的回调函数必须定义成上面这个函数的类型。下面给个简单的例子://sqlite3的回调函数//sqlite 每查到一条记录,就调用一次这个回调int LoadMyInfo(void* para,intn_column,char** column_value,char** column_name)

//para是你在sqlite3_exec 里传入的void*参数通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),//然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据//n_column是这一条记录有多少个字段(即这条记录有多少列)//char** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个1维数组(不要以为是2维数组),//每一个元素都是一个char*值,是一个字段内容(用字符串来表示,以\0结尾)//char** column_name 跟column_value是对应的,表示这个字段的字段名称

实例:

#include using namespace std; #include "sqlite/sqlite3.h" int callback(void*,int,char**,char**); int main() { sqlite3* db; int nResult = sqlite3_open("test.db",&db); if (nResult != SQLITE_OK) { cout<<"打开数据库失败:"<

上一篇:socket网络编程基础

下一篇:网络编程实验一-TCP通信

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部