codeinsert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
sqlite>
Changing Output Formats
sqlite> .mode list
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>
sqlite>
sqlite> select * from tbl1;
hello, 10
goodbye, 20
sqlite>
sqlite> .mode line
sqlite> select * from tbl1;
one = hello
two = 10
one = goodbye
two = 20
sqlite>
In column mode, each record is shown on a separate line with the data aligned in columns. For example:
sqlite> .mode column
sqlite> select * from tbl1;
one two
---------- ----------
hello 10
goodbye 20
sqlite>
sqlite> .width 12 6
sqlite> select * from tbl1;
one two
------------ ------
hello 10
goodbye 20
sqlite>
If you specify a column a width of 0, then the column width is automatically adjusted to be the maximum of three numbers: 10, the width of the header, and the width of the first row of data. This makes the column width self-adjusting. The default width setting for every column is this auto-adjusting 0 value.
sqlite> .header off
sqlite> select * from tbl1;
hello 10
goodbye 20
sqlite>
When specifying insert mode, you have to give an extra argument which is the name of the table to be inserted into. For example:
sqlite> .mode insert new_table
sqlite> select * from tbl1;
INSERT INTO 'new_table' VALUES('hello',10);
INSERT INTO 'new_table' VALUES('goodbye',20);
sqlite>
Writing results to a file
sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$
Querying the database schema
The sqlite3 program provides several convenience commands that are useful for looking at the schema of the database. There is nothing that these commands do that cannot be done by some other means. These commands are provided purely as a shortcut.
sqlite> .tables
tbl1
tbl2
sqlite>
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
In fact, if you look at the source code to the sqlite3 program (found in the source tree in the file src/shell.c) you'll find exactly the above query.
sqlite> .schema
create table tbl1(one varchar(10), two smallint)
CREATE TABLE tbl2 (
f1 varchar(30) primary key,
f2 text,
f3 real
)
sqlite> .schema tbl2
CREATE TABLE tbl2 (
f1 varchar(30) primary key,
f2 text,
f3 real
)
sqlite>
SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta'
ORDER BY tbl_name, type DESC, name
SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'
ORDER BY substr(type,2,1), name
You can supply an argument to the .schema command. If you do, the query looks like this:
SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE tbl_name LIKE '%s'
AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'
ORDER BY substr(type,2,1), name
sqlite> .schema %abc%
sqlite> .databases
Converting An Entire Database To An ASCII Text File
sqlite3.
A good way to make an archival copy of a database is this:
$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz
This generates a file named ex1.dump.gzthat contains everything you need to reconstruct the database at a later time, or on another machine. To reconstruct the database, just type:
$ zcat ex1.dump.gz | sqlite3 ex2
The text format is pure SQL so you can also use the .dump command to export an SQLite database into other popular SQL database engines. Like this:
$ createdb ex2
$ sqlite3 ex1 .dump | psql ex2
Other Dot Commands
sqlite> .explain
sqlite> explain delete from tbl1 where two<20;
addr opcode p1 p2 p3
---- ------------ ----- ----- -------------------------------------
0 ListOpen 0 0
1 Open 0 1 tbl1
2 Next 0 9
3 Field 0 1
4 Integer 20 0
5 Ge 0 2
6 Key 0 0
7 ListWrite 0 0
8 Goto 0 2
10 ListRewind 0 0
11 ListRead 0 14
12 Delete 0 0
13 Goto 0 11
14 ListClose 0 0
sqlite3program will wait for locks to clear on files it is trying to access before returning an error. The default value of the timeout is zero so that an error is returned immediately if any needed database table or index is locked.
Berkeley DB
技术特点:
1. Berkeley DB是一个
开放源代码的内嵌式
数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。(不使用SQL语言)
2. Berkeley DB为许多
编程语言提供了实用的API接口,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。
3. Berkeley DB轻便灵活(Portable),可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种
嵌入式实时操作系统之下。Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个
数据库系统存在。
4. Berkeley DB是可伸缩(Scalable)的,这一点表现在很多方面。Database library本身是很精简的(少于300KB的文本空间),但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。Berkeley DB能以足够小的空间占用量运行于有严格约束的
嵌入式系统。
Berkeley DB在嵌入式应用中比关系数据库和
面向对象数据库要好,有以下两点原因:
(1)因为数据库
程序库同应用程序在相同的
地址空间中运行,所以数据库操作不需要进程间的通讯。在一台机器的不同进程间或在网络中不同机器间进行进程通讯所花费的开销,要远远大于
函数调用的开销;
(2)因为Berkeley DB对所有操作都使用一组API接口,因此不需要对某种查询语言进行解析,也不用生成执行计划,大大提高了运行效。
国产嵌入式数据库
OpenBASE Lite是东软集团股份有限公司开发的嵌入式数据库产品。它是一个典型的轻量级数据库,定制的数据库引擎大小在250KB到600KB之间伸缩,可支持多种
桌面操作系统、主流
嵌入式系统平台及不同的处理器。作为一款功能全面的
关系型数据库系统,OpenBASE Lite支持标准的SQL语法、ACID
事务特性、备份/恢复等功能,提供了标准化开发接口JDBC、ODBC,能够在嵌入式环境下沿用关系数据库的经验继续来进行应用的开发。OpenBASE Lite提供了
内存数据库运行模式,提供高速的数据访问与更新能力。
产品特色
1.完善的数据管理功能
OpenBASE Lite嵌入式数据库具有完善的
数据管理功能,提供了对SQL92标准子集的支持;提供对标准
数据类型以及BLOB/CLOB类型的支持;
支持数据库完整性控制;具有完整的
数据管理能力,可以处理GB级的数据量;并提供对
空间数据的管理能力。
2.广泛的平台通用性
OpenBASE Lite嵌入式数据库可运行于Windows 2000/2003/XP/Vista/Win 7、Windows Mobile 5&6、Windows CE、Linux、Embedded Linux、VxWorks、Symbian、Android等多种操作系统平台。
3.微小的核心内核
OpenBASE Lite嵌入式数据库具有
微内核特性,可根据需求定制和裁剪,内核大小在250KB~600KB之间伸缩。
4.真正的零管理
在OpenBASE Lite嵌入式数据库的使用过程中无需对数据库进行配置,在
移动终端应用中实现了“零管理”。
5.出色的处理性能
OpenBASE Lite嵌入式数据库可以作为
内存数据库进行使用,实现了高速的数据访问与更新,单条
数据处理时间不超过15us;在并发处理性能上,提供库级锁与表级锁并发访问控制,提高了进程与多线程对数据库并发访问处理性能。
6.充分的安全保障
OpenBASE Lite嵌入式数据库支持用户
身份认证以及
数据库对象的
自主访问控制,可以有效防止用户数据的非法访问;支持128-bit AES
存储加密,以保证
数据库文件的
安全性。
7.快速的故障恢复
提供了日志和故障恢复机制有效地保障了
事务的ACID特性,另外还提供了数据库的联机热备与主从复制功能,使用户可以简单快速地提高应用系统的可靠性。
8.标准的访问接口
OpenBASE Lite嵌入式数据库为嵌入式应用的开发提供了C API接口以及JDBC/ODBC标准访问接口。
9.丰富的实用工具
OpenBASE Lite提供了丰富的实用工具进行数据库管理,包括数据库图形管理工具、建库工具、查询工具、备份恢复工具、
导入导出工具及数据库加解密工具等。
可用于移动开发的嵌入式数据库简介
嵌入式数据库是轻量级的,独立的库,没有服务器组件,无需管理,一个小的代码尺寸,以及有限的资源需求。目前有几种嵌入式数据库,你可以在移动应用程序中使用。让我们来看看这些最流行的数据库。