SQLite简单教程

最早使用SQLite是因为sql2005实在是重量了,我的老机器跑的咯吱咯吱了。
而且,Access用得不习惯--指的是.Net的访问。
后来Cnblogs搜索了一下,觉得SQLite不错,因为我的框架本身没有使用存储过程。
废话不多说,言归正传。
1。从www.sqlite.org下载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。从http://sqlite.phxsoftware.com/下载Ado.net驱动。
   下载了安装,在安装目录中存在System.Data.SQLite.dll
    我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了
   所有的Ado.net对象都是以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;

;

posted @ 2006-03-25 13:56 深渊野鱼 阅读(25847) 评论(9) 编辑 收藏

性能怎样?
 回复 引用   
#2楼 2007-05-17 15:50 Gray[未注册用户]
有关sqlite的使用,我是新手,有些问题想跟你请教一下。不知道方便不方便。

我的QQ: 1386425
公司不能用msn,晚上可以。visualboy2000@hotmail.com

邮件 gray.dai@gmail.com

 回复 引用   
#3楼 2007-06-19 15:03 Rexzhou[未注册用户]
性能很高,在嵌入式数据库中仅次于Berkeley DB,但是BDB不支持SQL语句
 回复 引用 查看   
#4楼 2008-09-25 10:09 麦舒      
请问楼主:在SQLite里如何连接两个字符串?直接加似乎不行。
例如:
SELECT [t0].[CustomerID], ([t0].[City] + [t0].[Country]) AS [Location]
FROM [Customers] AS [t0]

 回复 引用 查看   
#5楼[楼主] 2008-09-26 13:59 深渊野鱼      
SELECT [t0].[CustomerID], ([t0].[City] || [t0].[Country]) AS [Location]
FROM [Customers] AS [t0]


 回复 引用 查看   
#6楼 2008-10-29 19:46 麦舒      
@深渊野鱼
谢谢楼主,我做了个SQLite 的Linq,有兴趣的可以到我博客看看。
http://ansiboy.cnblogs.com

 回复 引用 查看   
#7楼 2009-02-16 09:40 aierong      
您好,请教一个问题
我想在sqlite中,写一个这样的sql语句怎么写?
就是某个查询不存在时,往表里面插入数据

下面是我在sql2000中的写法:
IF NOT EXISTS (SELECT * FROM mydata WHERE data='abc' )
BEGIN
INSERT INTO mydata(Data) SELECT '1'
END

或者是:

SELECT * FROM mydata WHERE data='abc'
IF (@@ROWCOUNT=0)
BEGIN
INSERT INTO mydata(Data) SELECT '1'
END

您看看sqlite中有没有类似这样的sql语句?

 回复 引用 查看   
#8楼 2009-07-30 16:09 褚一剑      
能设置密码吗
 回复 引用 查看   
#9楼 2010-01-10 02:45 image72      
给个sqlitedbhelper吧!