SQLite数据库使用

一、安装SQLite3方法

1、字符界面

sudo apt-get install sqlite3

2、图形界面

sudo apt-get install sqliteman

二、SQLite数据类型

SQLite具有以下五种基本数据类型:

1、integer:带符号的整型(最多64位)。

2、real:8字节表示的浮点类型。

3、text:字符类型,支持多种编码(如UTF-8、UTF-16),大小无限制。

4、blob:任意类型的数据,大小无限制。

5、null:表示空值。

三、SQLite命令使用

1、创建、打开数据库:

sqlite3 *.db

提示:当*.db文件不存在时,sqlite会创建并打开数据库文件。当*.db文件存在时,sqlite会打开数据库文件。

2、退出数据库命令:

.quit 或 .exit

注意:SQL的语句格式:所有的SQL语句都是以分号结尾的,SQL语句不区分大小写。两个减号“--”则代表注释。

3、创建表:create 语句语法:

create table 表名称 (列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, ...);创建一表格该表包含3列,列名分别是:“id”、“name”、“addr”。

在终端下输入:create  table  persons  (id  integer, name  text, addr  text);

4、创建表:create 语句 (设置主键)

在用sqlite设计表时,每个表都可以通过primary key手动设置主键(整型),设置为主键的列数据不可以重复。语法:

create table 表名称 (列名称1 数据类型 primary key, 列名称2 数据类型, 列名称3 数据类型, ...);

在终端下输入:create  table  persons  (id  integer  primary  key, name  text, addr  text);

5、查看表: .tables                   查看数据表的结构:  .schema

6、修改表:alter语句

在已有的表中添加或删除列。语法:(添加、删除-sqlite3暂不支持)

alter table 表名 add 列名 数据类型;

在终端下输入:alter  table  persons  add  sex  text ;

7、删除表:drop table语句

用于删除表(表的结构、属性以及表的索引也会被删除)语法:drop table 表名称;

在终端输入:drop  table  persons ;

8、插入新行:inser into 语句(全部赋值)给一行中的所有列赋值。语法:insert into 表名 values (列值1, 列值2,列值3,列值4, ...);

注意:当列值为字符串时要加上‘’号。

在终端下输入:create  table  persons  (id  integer, name  text, addr  text);

insert  into  persons  values  (1, ‘lucy‘, ‘beijing‘);

9、插入新行:inser into 语句(部分赋值) 给一行中的部分列赋值。语法:insert into 表名 (列名1, 列名2, ...) values(列值1, 列值2, ...);

在终端下输入:insert  into  persons  (id, name)  values  (1, ‘peter‘);

10、修改表中的数据:update 语句

使用where根据匹配条件,查找一行或多行,根据查找的结果修改表中相应行的列值(修改哪一列由列名指定)。

语法:update 表名 set 列1 = 值1 [, 列2 = 值2, ...] [匹配条件];

注意:当表中有多列、多行符合匹配条件时会修改相应的多行。当匹配条件为空时则匹配所有。

11、匹配:where 子句

where 子句用于规定匹配的条件:等于(=)、不等于(<>)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。

匹配条件语法:(基础)  where 列名 操作符 列值

在终端输入:update  persons  set  id=2,  addr=‘tianjing‘  where  name=‘peter‘;

12、删除表中的数据:delete 语句

使用where根据匹配条件,查找一行或多行,根据查找的结果删除表中的查找到的行。语法:delete from 表名 [匹配条件];

注意:当表中有多列、多行符合匹配条件时会删除相应的多行。

在终端输入:delete  from  persons  where  name=‘peter‘;

13、查询:select 语句(基础)

于从表中选取数据,结果被存储在一个结果表中(称为结果集)。语法:

1、select * from 表名 [匹配条件];

2、select 列名1[, 列名2, ...] from 表名 [匹配条件];

提示:星号(*)是选取所有列的通配符。

在终端输入:insert  into  persons  values  (1, ‘peter‘, ‘tianjing‘);

insert  into  persons  values  (3, ‘bob‘, ‘hebei‘);

select  *  from  persons;

select  *  from  persons  where  id=1;

select  name  from  persons;

select  name  from  persons  where  id=1;

14、in 允许我们在 where 子句中规定多个值。匹配条件语法:where 列名 in (列值1, 列值2, ...)例:

1、select * from 表名 where 列名 in (值1, 值2, ...);

2、select 列名1[,列名2,...] from 表名 where列名 in (列值1, 列值2, ...)

在终端输入:select  *  from  persons  where  id  in  (1, 2);

select  name  from  persons  where  id  in  (1, 2);

15、and 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是与的关系)。匹配条件语法:where 列1 = 值1 [and 列2 = 值2 and ...]例:

1、select * from 表名 where 列1 = 值1 [and列2 = 值2 and ...];

2、select 列名1[, 列名2, ...] from 表名where 列1 = 值1 [and 列2 = 值2 and ...];

在终端输入:select  *  from  persons  where  id=1  and  addr=‘beijing‘;

select  name  from  persons  where  id=1  and  addr=‘beijing‘;

16、or 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是或的关系)。匹配条件语法:where 列1 = 值1 [or 列2 = 值2 or ...]例:

1、select * from 表名 where 列1 = 值1 [or 列2 = 值2 or ...];

2、select 列名1[,列名2,...] from 表名 列1 = 值1 [or 列2 = 值2 or ...];

在终端输入:select  * from  persons  where  addr=‘beijing‘  or  addr=‘hebei‘;

17、操作符 between A and B 会选取介于A、B之间的数据范围。这些值可以是数值、文本或者日期。匹配条件语法:where 列名 between A and B例:

1、select * from 表名 where 列名 between A and B;

2、select 列名1[,列名2,...] from 表名 where列名 between A and B;

注:匹配字符串时会以ascii顺序匹配。

在终端输入:select  * from  persons  where  id  between  1  and  3;

select  * from  persons  where  addr  between  ‘a‘  and  ‘c‘;

18、like 用于模糊查找。匹配条件语法:where 列名 like 列值

1、若列值为数字相当于列名=列值。

2、若列值为字符串可以用通配符“%”代表缺少的字符(一个或多个)。

在终端输入:select  *  from  persons  where  id  like  3;

select  *  from  persons  where  addr  like  ‘%jing%‘;

19、not 可取出原结果集的补集。匹配条件语法:例:

1、where 列名 not in (列值1, 列值2, ...)

2、 where not (列1 = 值1 [and 列2 = 值2 and...])

3、where not (列1 = 值1 [or 列2 = 值2 or ...])

4、where 列名 not between A and B

5、where 列名 not like 列值

在终端输入:select  *  from  persons  where  id  not  in  ( 1 );

select  *  from  persons  where  addr  not  like  ‘%jing%‘;

20、order by 语句根据指定的列对结果集进行排序。默认按照升序对结果集进行排序,可使用 desc 关键字按照降序对结果集进行排序。例:

升序 : select * from 表名 order by 列名;

降序 : select * from 表名 order by 列名 desc;

在终端输入:select  *  from  persons  order  by  name;

select  *  from  persons  order  by  id;

select  *  from  persons  order  by  id  desc;

四、SQLite  C语言编程

1、int sqlite3_open(char *db_name,sqlite3 **db);

功能:打开数据库。

参数:db_name:数据库文件名,若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码。

sqlite3:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。

返回值:成功返回SQLITE_OK,失败返回非 SQLITE_OK。

2、int sqlite3_close(sqlite3 *db);

功能:关闭数据库、释放打开数据库时申请的资源。

参数:db:数据库的标识。

返回值:成功返回 SQLITE_OK。失败返回非 SQLITE_OK。

注意:sqlite3使用了两个库:pthread、dl,故链接时应加上 -lpthread和 -ldl。

3、sqlite3_exec函数:int sqlite3_exec(sqlite3 *db, const char *sql,exechandler_t callback,void *arg, char **errmsg);

功能:执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数。

参数:db:数据库的标识。

sql:SQL语句(一条或多条),以’;’结尾。

callback:是回调函数指针,当这条语句执行之后,sqlite3会去调用你提供的这个函数。

arg:当执行sqlite3_exec的时候传递给回调函数的参数。

errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。

打印错误信息方法:printf("%s\n", errmsg);

4、回调函数指针:typedef int (*exechandler_t)(void *para, int n_column, char **column_value,char **column_name);

功能:此函数由用户定义,当sqlite3_exec函数执行sql语句后,结果集不为空时sqlite3_exec函数会自动调用此函数,每次调用此函数时会把结果集的一行信息传给此函数。

参数:para:sqlite3_exec传给此函数的参数,para为任意 数据类型的地址。

n_column:结果集的列数。

column_value:指针数组的地址,其存放一行信息中 各个列值的首地址。

column_name:指针数组的地址,其存放一行信息中各 个列值对应列名的首地址。

返回值:若为非0值,则通知sqlite3_exec终止回调。

5、sqlite3_get_table函数:int sqlite3_get_table(sqlite3 *db, const char *sql,char ***resultp, int *nrow,int *ncolumn,char **errmsg);

功能:执行sql指向的SQL语句,函数将结果集相关的数据的地址保存在函数的参数中。

参数:db:数据库的标识。

sql:SQL语句(一条或多条),以’;’结尾。

resultp:指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值。

nrow:结果集的行数(不包含列名)。

ncolumn:结果集的列数。

errmsg:错误信息。

6、sqlite3_free_table函数:void sqlite3_free_table(char **resultp);

功能:释放sqlite3_get_table分配的内存。

参数:结果集数据的首地址。

时间: 2024-10-23 06:49:54

SQLite数据库使用的相关文章

在Android程序中使用已有的SQLite数据库

已经将这篇文章迁移至 Code问答,你也能够到这里查看这篇文章,请多多关注我的新技术博客CodeWenDa.com 在中文搜索中,没有找到一篇比較好的关于怎样在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,依照它的步骤,測试成功.决定把这篇文章大致的翻译一下,想看原文的能够点击这里:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ .

iOS中 FMDB第三方SQLite数据库 UI_20

1.什么是FMDB? FMDB是iOS平台下SQLite数据库,只不过它是OC方式封装了C语言的SQLite语句,使用起来更加面向对象 2.FMDB的优点:1.使用起来更加面向对象; 2.对比苹果自带的 Core Data 数据管理工具更加的轻量级,更加的灵活,而且FMDB支持跨平台; 3.提供多线程下的数据安全保护机制,有效地防止数据混乱 3.FMDM中重要的类: FMDBDataBase: 它代表一个数据库对象,(我们需要创建数据库对象时就使用这个类) FMDBDataBaseQueue:

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件.这个数据库在data/data/<package_name>/databases里面,其中<package_name>为该安卓app的工程包名,这个目录必须root后才能看到.在Windows,单机的应用程序,存储数据,基本放到一个文件里面,正如游戏的存档,基本就是把当前的游戏状态存到一个用户很难找到的文件里面.每次存档读档就是一个从这个存

Sqlite数据库创建、删除、降级笔记

(1).在创建sqlite数据库时需要注意oncreate()方法只有在第一次创建数据库时候运行.当数据库删除后也会执行,sqlite不支持数据库删除,但可以删除相应的文件,即删了数据库.当我们再次配置文件时候就会执行oncreate()了. (2).onUpgrade()只有在版本号发生改变(增加)时候才会执行,很多时候我们直接在onUpgrade()里添加我们想插入的表或者列,但会报错,那是因为你之前版本onUpgrade里的语句会再次执行,若之前插入了表.或者行,此时会再执行一次,因此每次

Python操作SQLite数据库

连接数据库 从2.5版本开始,Python的标准库中就有了一个专门用于SQLite的sqlite3模块.连接SQLite数据库方式如下: import sqlite3 as dbapi con = dbapi.connect('population.db') cur = con.cursor() 第一个语句用于引用数据库API: 第二个语句创建了一个到数据库的连接(connection):调用数据库模块的connect方法.该方法的参数是一个字符串,它定义了我们所要连接的那个数据库.由于SQLi

Android SQLite数据库使用示例

简单介绍一下,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面我们用SQLite来开发一个英语词典.下图是项目结构-- MySQLite.java package sn.qdj.sqlitedemo; im

Windows通过脚本建立SQLite数据库

用脚本建立一个SQLite数据库 依次建立以下两个文件: 1)一个BAT文件:script.bat @ECHO OFF C: CD %HOMEPATH%/Desktop SQLITE3 TEST_DB.DB < a.sql SQLITE3 TEST_DB.DB .dump > result.sql Sqlite3程序可以从Sqlite的官方网站上下载到 2)一个SQL文件:a.sql,里面存储了SQLite的建库脚本,如下例: --SQLite脚本 a.sql --创建PERSONS类 CRE

Android 使用存放在存assets文件夹下的SQLite数据库

因为这次的项目需要自带数据,所以就就把数据都放到一个SQLite的数据库文件中了,之后把该文件放到了assets文件夹下面.一开始打算每次都从assets文件夹下面把该文件夹拷贝到手机的SD卡或者手机自身的存储上之后再使用,后来考虑到每次都拷贝的话效率不高,并且如果涉及到对数据库的修改操作的话拷贝之后数据就被恢复了. 因此就写了该封装,该封装只是在第一次使用数据库文件的时候把该文件夹拷贝到手机的/data/data/应用程序报名/database文件夹下,之后就直接从这个地方使用了.并且它允许你

SqlIte数据库并发性

把遇到的一些小问题都记下来,告诉自己,一些小细节会铸成打错的 今天没事复习以前的知识,用sqlite做数据库,发现修改数据的时候等好久才有反应,而且还失败,可是过一会之后又会好,好了以后又是一样,种以为是自己的语句有问题,测试了好多次,感觉没问题,在到网上查查错误才发现,原来sqlite不可以并发处理数据,我要说的不是这个问题,一个好的习惯可以避免所有的小问题,前面的解决方法就是把datareader等要释放的释放,关闭的关闭就可以,这本来就是要的,但是自己却没有这么做,这一个小问题纠结了我一个

微信 SQLite 数据库修复实践

https://mp.weixin.qq.com/s/N1tuHTyg3xVfbaSd4du-tw 微信 SQLite 数据库修复实践 原创 2017-04-25 guoling WeMobileDev 1.前言 众所周知,微信在后台服务器不保存聊天记录,微信在移动客户端所有的聊天记录都存储在一个 SQLite 数据库中,一旦这个数据库损坏,将会丢失用户多年的聊天记录.而我们监控到现网的损坏率是0.02%,也就是每 1w 个用户就有 2 个会遇到数据库损坏.考虑到微信这么庞大的用户基数,这个损坏