.help回车即可3)可以在这里直接输入SQL语句创建表格用;结束,然后回车就可以看到了4" />
当前位置:文档之家› SQLlite简单教程

SQLlite简单教程

1。从https://www.doczj.com/doc/1519172476.html,下载SQLite 3.3.4的版本

为了方便,我把它解压了,就一个SQLite3.exe,放入Windows目录下。

Cmd 进入命令行

1)

创建数据库文件:

>SQLite3 d:"test.db 回车

就生成了一个test.db在d盘。

这样同时也SQLite3挂上了这个test.db

2)

用.help可以看看有什么命令

>.help 回车即可

3)可以在这里直接输入SQL语句创建表格用;结束,然后回车就可以看到了

4)看看有创建了多少表

>.tables

5)看表结构

>.schema 表名

6)看看目前挂的数据库

>.database

7)如果要把查询输出到文件

>.output 文件名

> 查询语句;

查询结果就输出到了文件c:"query.txt

把查询结果用屏幕输出

>.output stdout

8)把表结构输出,同时索引也会输出

.dump 表名

9)退出

>.exit 或者.quit

2。从https://www.doczj.com/doc/1519172476.html,/下载https://www.doczj.com/doc/1519172476.html,驱动。

下载了安装,在安装目录中存在System.Data.SQLite.dll

我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了

所有的https://www.doczj.com/doc/1519172476.html,对象都是以SQLite开头的,比如SQLiteConnection

连接串只需要如下方式

Data Source=d:"test.db 或者DataSource=test.db--应用在和应用程序或者.net能够自动找到的目录

剩下的就很简单了~~

3。SQL语法

由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜

1)创建一个单个Primary Key的table

CREATE TABLE [Admin] (

[UserName] [nvarchar] (20) PRIMARY KEY NOT NULL ,

[Password] [nvarchar] (50) NOT NULL ,

[Rank] [smallint] NOT NULL ,

[MailServer] [nvarchar] (50) NOT NULL ,

[MailUser] [nvarchar] (50) NOT NULL ,

[MailPassword] [nvarchar] (50) NOT NULL ,

[Mail] [nvarchar] (50) NOT NULL

) ;

2)创建一个多个Primary Key的table

CREATE TABLE [CodeDetail] (

[CdType] [nvarchar] (10) NOT NULL ,

[CdCode] [nvarchar] (20) NOT NULL ,

[CdString1] [ntext] NOT NULL ,

[CdString2] [ntext] NOT NULL ,

[CdString3] [ntext] NOT NULL,

PRIMARY KEY (CdType,CdCode)

) ;

3)创建索引

CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);

还可以视图等等。

4.还有很有用的SQL

Select * from Sqlite_master

Select datetime('now')

Select date('now')

Select time('now')

以及很多函数,具体可以参考SQLite的wiki.

oh,还有就是看到有人说,好像成批插入的时候,启动事务,比不启动事务快n倍还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare.

===========

sqlite可以在shell/dos command底下直接执行命令:

sqlite3 film.db "select * from film;"

输出HTML 表格:

sqlite3 -html film.db "select * from film;"

将数据库「倒出来」:

sqlite3 film.db ".dump" > output.sql

利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):

sqlite3 film.db < output.sql

在大量插入资料时,你可能会需要先打这个指令:

begin;

插入完资料后要记得打这个指令,资料才会写进数据库中:

commit;

一.如何获取SQLite最新版本官方站点:https://www.doczj.com/doc/1519172476.html,/

从https://www.doczj.com/doc/1519172476.html,/网站的Download页面获取

即如下页面下载

https://www.doczj.com/doc/1519172476.html,/download.html

二.Windows下的SQLite的源代码是哪个软件压缩包?

sqlite-amalgamation-3_6_22.zip是SQLite的windows下源码文件三.Window下的SQLite命令行工具sqlite-3_6_22.zip

四.Window下的SQLite开发库,即动态链接库以及DEF文件

sqlitedll-3_6_22.zip

五.SQLite最新版本是:3.6.22 六.b<=a && a <= c 的SQL语句如何写

在SQLite中, 表达式"a BETWEEN b AND c"等于表达式 "a >= b AND a <= c",在比较表达式时,a可以是具有任何亲和性

七.a的值是x,y,z其中一个值,SQL 语句如何写

SQLite把表达式 "a IN (x, y, z)" 和 "a = z OR a = y OR a = z"视为相等.

八.如何创建制定目录的数据库

sqlite3 D:/Project/SyncML/Lib/debug/atsync.db

九.创建数据的注意事项

如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。

十.如何添加一张数据表

create table student(name varchar(10), age smallint);

十一.如何往数据表中添加数据

insert into student values('张三', 20);

十二.如何通过sqlite3.dll与

sqlite3.def生成sqlite3.lib文件

LIB /DEF:sqlite3.def /machine:IX86

十三.如何查询SQLite工具的软件版本也就是sqlite3.exe应用程序小工具的版本号

方法一:进入sqlite3.exe所在目录,在命令行执行如下命令

sqlite3 –version

方法二:

select sqlite_version();

十四.如何在字符串中使用单引号(')?SQL 标准规定,在字符串中,单引号需要使用逃逸字符,即在一行中使用两个单引号

十五.如果删除了大量数据,而又想缩小数据库文件占用的空间,执

行 VACUUM 命令

vacuum;

十六.在SQLite中,如何在一个表上添加或删除一列?

SQLite 有有限地 ALTER TABLE 支持。你可以使用它来在表的末尾增加一列,可更改表的名称。如果需要对表结构做更复杂的改变,则必须重新建表。重建时可以先将已存在的数据放到一个临时表中,删除原表,创建新表,然后将数据从临时表中复制回来。

如,假设有一个 t1 表,其中有 "a", "b", "c" 三列,如果要删除列 c ,以下过程描述如何做: 开始事物处理

BEGIN TRANSACTION;

创建临时表格t1-backup

CREATE TEMPORARY TABLE t1_backup(a,b);

将数据库表t1中的所有数据拷贝到表t1-backup中

INSERT INTO t1_backup SELECT a,b FROM t1;

删除表格t1

DROP TABLE t1;

创建表格t1

CREATE TABLE t1(a,b);

将数据库表t1-backup中的所有数据拷贝到表t1中

INSERT INTO t1 SELECT a,b FROM t1_backup;

删除备份表格t1-backup

DROP TABLE t1_backup;

事物提交

COMMIT;

十七.如何查询当前的编码的编码格式pragma encoding;

十八.SQLite支持哪些数据类型些?

NULL 值为NULL

INTEGER 值为带符号的整型,根据类别用1,2,3,4,6,8字节存储

REAL 值为浮点型,8字节存储

TEXT 值为text字符串,使用数据库编码(UTF-8, UTF-16BE or UTF-16-LE)存储

BLOB 值为二进制数据,具体看实际输入

但实际上,sqlite3也接受如下的数据类型:

smallint 16 位元的整数

interger 32 位元的整数

decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。

float 32位元的实数。

double 64位元的实数。

char(n) n 长度的字串,n不能超过 254。

varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。

graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。

vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。

date 包含了年份、月份、日期。

time 包含了小时、分钟、秒。

timestamp 包含了年、月、日、时、分、秒、千分之一秒。

十九.如果将某个字段设置为INTEGER PRIMARY KEY属性,有什么特性?

如果将声明表的一列设置为 INTEGER PRIMARY KEY,则具有:

1.每当你在该列上插入一NULL值时, NULL自动被转换为一个比该列中最大值大1的一个整数;

2.如果表是空的,将会是1;

注意该整数会比表中该列上的插入之前的最大值大1。该键值在当前的表中是唯一的。但有可能与已从表中删除的值重叠。要想建立在整个表的生命周期中唯一的键值,需要

在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。

二十.字段声明中有AUTOINCREMENT属性,有什么与众不同的含义?

要想建立在整个表的生命周期中唯一的键值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。

一.建立数据库

sqlite3.exe test.db

二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行

三.退出

.exit

或者

.quit

四.SQLite支持如下5种数据类型

1.NULL:空值。

2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。

3.REAL:浮点数字,存储为8-byte IEEE浮点数。

4.TEXT:字符串文本。

5.BLOB:二进制对象。

五.联系人表格结构如下

create table contact(id integer primary key autoincrement,

lastname varchar(20),firstname varchar(20),

mobile varchar(30), telephone varchar(20),

email varchar(30), company varchar(50),

department varchar(16),address varchar(80),

id1 interger,id2 integer, updatetime datetime);

六.查看数据库有哪些数据表

命令是:.tables

七.如何插入一条记录

insert into contact(lastname,firstname,mobile,telephone,updatetime) values('刘','畅

','139********','010-********','2009-07-22');

八.查看数据表的结构

针对整个数据库

.schema

针对仅仅是contact联系人该表

.schema contact 注意没有分号

九.如何打开一个已经创建的数据库

sqlite3 test.db

十.如何解决如下问题

SQL error: near "sqlite3": syntax error

SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去

十一.如何建立索引

create index index_name on table_name(field_to_be_indexed);

十二.如何删除一张数据表

drop table contact;

十三.查看当前的数据库

.database

十四.如何删除一个数据表的数据

delete from contact;

十五.如何导入一个文件到某个表中

.import 文件路径表名

注意这是非SQL语句,所以不加分号

十六.如何设置文件字段的分隔符

.separator “,”

.import e:/contact.txt contact

十七.如何查看当前sqllite字段的分隔符是什么?

.show

十八.如何将查询结果导出到一个文件

第一步:.output a.txt

第二步:执行要导出的SQL语句

第三步:.output stdout

十九.SQL查询语句

select * from film order by year limit 10;

select * from film order by year desc limit 10;

select count(*) from film;

select * from film where starring like 'Jodie%';

select * from film where starring='Jodie Foster';

select title, year from film order by year desc limit 10;

select columns from table_name where expression;

最常见的用法,当然是倒出所有数据库的内容:

select * from film;

如果资料太多了,我们或许会想限制笔数:

select * from film limit 10;

或是照着电影年份来排列:

select * from film order by year limit 10;

或是年份比较近的电影先列出来:

select * from film order by year desc limit 10;

或是我们只想看电影名称跟年份:

select title, year from film order by year desc limit 10;

查所有茱蒂佛斯特演过的电影:

select * from film where starring='Jodie Foster';

查所有演员名字开头叫茱蒂的电影('%' 符号便是 SQL 的万用字符):

select * from film where starring like 'Jodie%';

查所有演员名字以茱蒂开头、年份晚于1985年、年份晚的优先列出、最多十笔,只列出电影名称和年份:

select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;

有时候我们只想知道数据库一共有多少笔资料:

select count(*) from film;

有时候我们只想知道1985年以后的电影有几部:

select count(*) from film where year >= 1985;

(进一步的各种组合,要去看SQL专书,不过你大概已经知道SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!)

如何更改或删除资料

了解select的用法非常重要,因为要在sqlite更改或删除一笔资料,也是靠同样的语法。

例如有一笔资料的名字打错了:

update film set starring='Jodie Foster' where starring='Jodee Foster';

就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成Jodie Foster。

delete from film where year < 1970;

就会删除所有年代早于1970年(不含)的电影了。

其他sqlite的特别用法

sqlite可以在shell底下直接执行命令:

sqlite3 film.db "select * from film;"

输出 HTML 表格:

sqlite3 -html film.db "select * from film;"

将数据库「倒出来」:

sqlite3 film.db ".dump" > output.sql

利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):

sqlite3 film.db < output.sql

在大量插入资料时,你可能会需要先打这个指令:

begin;

插入完资料后要记得打这个指令,资料才会写进数据库中:

commit;

创建数据库文件:

>SQLite3 d:/test.db 回车

就生成了一个test.db在d盘。

这样同时也SQLite3挂上了这个test.db

2)

用.help可以看看有什么命令

>.help 回车即可

3)可以在这里直接输入SQL语句创建表格用;结束,然后回车就可以看到了

4)看看有创建了多少表

>.tables

5)看表结构

>.schema 表名

6)看看目前的数据库

>.database

7)如果要把查询输出到文件

>.output 文件名

> 查询语句;

查询结果就输出到了文件c:/query.txt

把查询结果用屏幕输出

>.output stdout

8)把表结构输出,同时索引也会输出

.dump 表名

9)退出

>.exit 或者.quit

2。从https://www.doczj.com/doc/1519172476.html,/下载https://www.doczj.com/doc/1519172476.html,驱动。

下载了安装,在安装目录中存在System.Data.SQLite.dll

我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了

所有的https://www.doczj.com/doc/1519172476.html,对象都是以SQLite开头的,比如SQLiteConnection

连接串只需要如下方式

Data Source=d:/test.db 或者DataSource=test.db--应用在和应用程序或者.net能够自动

找到的目录

剩下的就很简单了~~

3。SQL语法

由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜

1)创建一个单个Primary Key的table

CREATE TABLE [Admin] (

[UserName] [nvarchar] (20) PRIMARY KEY NOT NULL ,

[Password] [nvarchar] (50) NOT NULL ,

[Rank] [smallint] NOT NULL ,

[MailServer] [nvarchar] (50) NOT NULL ,

[MailUser] [nvarchar] (50) NOT NULL ,

[MailPassword] [nvarchar] (50) NOT NULL ,

[Mail] [nvarchar] (50) NOT NULL

) ;

2)创建一个多个Primary Key的table

CREATE TABLE [CodeDetail] (

[CdType] [nvarchar] (10) NOT NULL ,

[CdCode] [nvarchar] (20) NOT NULL ,

[CdString1] [ntext] NOT NULL ,

[CdString2] [ntext] NOT NULL ,

[CdString3] [ntext] NOT NULL,

PRIMARY KEY (CdType,CdCode)

) ;

3)创建索引

CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);

还可以视图等等。

4.还有很有用的SQL

Select * from Sqlite_master

Select datetime('now')

Select date('now')

Select time('now')

SQLite 内建函数表

oh,还有就是看到有人说,好像成批插入的时候,启动事务,比不启动事务快n倍

还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare.

===========

sqlite可以在shell/dos command底下直接执行命令:

sqlite3 film.db "select * from film;"

输出 HTML 表格:

sqlite3 -html film.db "select * from film;"

将数据库「倒出来」:

sqlite3 film.db ".dump" > output.sql

利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):

sqlite3 film.db < output.sql

在大量插入资料时,你可能会需要先打这个指令:

begin;

插入完资料后要记得打这个指令,资料才会写进数据库中:

commit;

SQLITE深入------常见问题

如何建立自动增长字段?

简短回答:声明为 INTEGER PRIMARY KEY 的列将会自动增长。

长一点的答案:如果你声明表的一列为 INTEGER PRIMARY KEY,那么,每当你在该列上插入一NULL值时, NULL自动被转换为一个比该列中最大值大1的一个整数,如果表是空的,将会是1。 (如果是最大可能的主键9223372036854775807,那个,将键值将是随机未使用的数。)如,有下列表:

CREATE TABLE t1(

a INTEGER PRIMARY KEY,

b INTEGER

);

在该表上,下列语句

INSERT INTO t1 VALUES(NULL,123);

在逻辑上等价于:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);

有一个新的API叫做sqlite3_last_insert_rowid(),它将返回最近插入的整数值。注意该整数会比表中该列上的插入之前的最大值大1。该键值在当前的表中是唯一的。但有可能与已从表中删除的值重叠。要想建立在整个表的生命周期中唯一的键值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。如果最大可能的整数值在数据表中曾经存在过,INSERT将会失败,并返回SQLITE_FULL错误代码。

多个应用程序或一个应用程序的多个实例可以同时访问同一个数据库文件吗?

多个进程可同时打开同一个数据库。多个进程可以同时进行SELECT 操作,但在任一时刻,只能有一个进程对数据库进行更改。

SQLite使用读、写锁控制对数据库的访问。(在Win95/98/ME等不支持读、写锁的系统下,使用一个概率性的模拟来代替。)但使用时要注意:如果数据库文件存放于一个NFS文件系统上,这种锁机制可能不能正常工作。这是因为fcntl() 文件锁在很多NFS上没有正确的实现。在可能有多个进程同时访问数据库的时候,应该避免将数据库文件放到NFS上。在Windows上,Microsoft的文档中说:如果使用 FAT 文件系统而没有运行 share.exe 守护进程,那么锁可能是不能正常使用的。那些在Windows上有很多经验的人告诉我:对于网络文件,文件锁的实现有好多Bug,是靠不住的。如果他们说的是对的,那么在两台或多台Windows机器间共享数据库可能会引起不期望的问题。

相关主题
文本预览
相关文档 最新文档