Sqlite 使用
Posted 呓语
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sqlite 使用相关的知识,希望对你有一定的参考价值。
SQLite 数据类型
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。
SQLite 存储类
每个存储在 SQLite 数据库中的值都具有以下存储类之一:
存储类 | 描述 |
---|---|
NULL | 值是一个 NULL 值。 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。
SQLite Affinity 类型
SQLite 支持列上的类型 affinity 概念。任何列仍然可以存储任何类型的数据,但列的首选存储类是它的 affinity。在 SQLite3 数据库中,每个表的列分配为以下类型的 affinity 之一:
Affinity | 描述 |
---|---|
TEXT | 该列使用存储类 NULL、TEXT 或 BLOB 存储所有数据。 |
NUMERIC | 该列可以包含使用所有五个存储类的值。 |
INTEGER | 与带有 NUMERIC affinity 的列相同,在 CAST 表达式中带有异常。 |
REAL | 与带有 NUMERIC affinity 的列相似,不同的是,它会强制把整数值转换为浮点表示。 |
NONE | 带有 affinity NONE 的列,不会优先使用哪个存储类,也不会尝试把数据从一个存储类强制转换为另一个存储类。 |
SQLite Affinity 及类型名称
下表列出了当创建 SQLite3 表时可使用的各种数据类型名称,同时也显示了相应的应用 Affinity:
数据类型 | Affinity |
---|---|
INTINTEGERTINYINTSMALLINTMEDIUMINTBIGINTUNSIGNED BIG INTINT2INT8 | INTEGER |
CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)NCHAR(55)NATIVE CHARACTER(70)NVARCHAR(100)TEXTCLOB | TEXT |
BLOBno datatype specified | NONE |
REALDOUBLEDOUBLE PRECISIONFLOAT | REAL |
NUMERICDECIMAL(10,5)BOOLEANDATEDATETIME | NUMERIC |
Boolean 数据类型
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。
Date 与 Time 数据类型
SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。
存储类 | 日期格式 |
---|---|
TEXT | 格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。 |
REAL | 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。 |
INTEGER | 从 1970-01-01 00:00:00 UTC 算起的秒数。 |
可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。
SQL 常用命令
- 获取最后插入的自动增量的值
select last_insert_rowid();
- 查看建表语句
# 不加 table_name 则查看所有的
.schema table_name
- 查看更详细的信息
.mode column
.headers on
select * from sqlite_master;
- 将数据保存为sql文件
# 导出sql文件
.output sql_file_name
.dump
.output stdout
# 导出CSV文件
.output file.csv
.separator
select * from table_name;
.output stdout
# 导出csv文件2
.output file.csv
.mode csv
select * from table_name;
.output stdout
# 方法1 和 2 的区别时 2会自动换行 字段值并将其加上双引号,而列模式不加
# 直接导出数据
sqlite3 test.db .dump > test.sql
# 创建数据库的两种方法
sqlite3 test.db < test.sql
# 加上.exit 是因为不想进入 sqlite shell 命令界面
sqlite3 -init test.sql test.db .exit
4.1 导入数据文件
# sql 文件
.read file.sql
# 有分隔符的文件
# 1. 查看当前指定的分隔符
.show
# separator -> "|"
# 2. 指定不同的分隔符
.separator
# 3. 导入文件
.import [file] [table]
- 查看表信息
sqlite>.tables --查看当前数据库所有表
sqlite>.tables table_name --查看当前数据库指定表
sqlite>.schema --查看当前数据库所有表的建表(CREATE)语句
sqlite>.schema table_name --查看指定数据表的建表语句
sqlite>select * from sqlite_master from; --查看所有表结构及索引信息
sqlite>select * from sqlite_master where type=‘table‘; --查看所有表结构信息
sqlite>select name from sqlite_master where type=‘table‘; --对于表来说,name字段指表名,查询所有表
sqlite>select * from sqlite_master where type=‘table‘ and name=‘table_name‘; --查看指定表结构信息
sqlite>select * from sqlite_master where type=‘index‘; --查看所有表索引信息,查询所有索引
sqlite>select name from sqlite_master where type=‘table‘; --对于索引来说,name字段指索引名
sqlite>select * from sqlite_master where type=‘index‘ and name=‘table_name‘; --查看指定表索引信息
sqlite>pragma table_info (‘table_name‘) --查看指定表所有字段信息,类似于msyql:desc table_name
sqlite>select typeof(‘column‘) from table_name; --查看指定表字段【column】类型,括号内可不输引号
- 清空表数据
delete from [tablename]
//1. 将表名为tablename的自增量置0
update sqlite_sequence set seq = 0 where name = ‘tablename‘
//2. 将表名为tablename的记录删除
delete from sqlite_sequence where name = ‘tablename‘
//3. 将sqlite_sequence表清空数据
delete from sqlite_sequence
- 建表
create table contacts (
id integer primary key, -- 设置主键
name text not null collate nocase, -- 不能为空 排序时 忽略大小写
phone text not null default ‘unknown‘, -- 设置默认值
uniqe (name, phone) --
);
- 修改表
alert table contacts add column email text not null default ‘‘ collate nocase;
- 查询语句
select [distinct] heading
from tables
where predicate
group by columns
having predicate
order by columns
limit count, offset;
以上是关于Sqlite 使用的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段
SQLite 片段函数实现不会在 TextView 中将文本格式化为 HTML
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段