设为首页 加入收藏

TOP

SQLite(轻量级最佳数据库) 原理分析和开发应用 (二)
2014-11-24 01:22:06 来源: 作者: 【 】 浏览:25
Tags:SQLite 轻量级 最佳 数据库 原理 分析 开发 应用
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
) ;
创建一个多个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)
) ;
创建索引
CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);
还可以视图等等。


SQLite 分页查询

写法1:

SELECT * FROM TABLE1 LIMIT 20 OFFSET 20 ;

写法2:

SELECT * FROM TABLE1 LIMIT 20 , 20;

SQLite 文件的压缩
在多次删除数据、插入数据、更新数据后,数据库体积增大,但实际有效数据量很小,则需要对数据库进行压缩、整理,把已经删除的数据从物理文件中移除。调用一下SQL命令即可:

VACUUM

VACUUM的实现

sqlite3

数据插入与更新

使用REPLACE替代INSERT、UPDATE命令。在无满足条件记录,则执行Insert,有满足条件记录,则执行UPDATE。

1 REPLACE INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val3);

Insert or Replace Into 和Replace Into 的效果是一样的上面这句话也可以这样写

1 Insert or Replace INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val3);

字符编码转换

sqlite3的源码中,提供了utf8ToUnicode()、unicodeToUtf8()、mbcsToUnicode()、unicodeToMbcs()、sqlite3_win32_mbcs_to_utf8 ()、utf8ToMbcs ()等8个函数进行字符在不同编码间的转换,但未在sqlite3.def、sqlite3.h文件中列出,即未对外公开。这些函数中,都使用了MultiByteToWideChar()、WideCharToMultiByte()两个函数实现字符间转换。

开发示例

001 using System;

002 using System.Data;

003 using System.Data.SQLite;

004 using System.Collections.Generic;

005 using System.IO;

006

007 namespace DataHelper

008 {

009 public class SqLiteHelper

010 {

011 ///

012 /// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false

013 ///

014 public static string ConnectionString

015 {

016 get

017 {

018 return @"Data source= "+DataBasePath+";";

019 }

020 set { throw new NotImplementedException(); }

021 }

022

023 public static string DataBasePath

024 {

025 get { return "SpringYang.db";};

026 }

027

028 private static object lockObject = new object();

029

030 private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, List parameters)

031 {

032 if (conn.State != ConnectionState.Open)

033 conn.Open();

034 cmd.Parameters.Clear();

035 cmd.Connection = conn;

036 cmd.CommandText = cmdText;

037 cmd.CommandType = CommandType.Text;

038 cmd.CommandTimeout = 30;

039 foreach (var parameter in parameters)

040 {

041 cmd.Parameters.Add(parameter);

042 }

043 }

044

045 public static DataSet ExecuteQuery(string cmdText, List parameters)

046 {

047 lock (lockObject)

048 {

049 using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))

050 {

051 using (SQLiteCommand command = new SQLiteCommand())

052 {

053 DataSet ds = new DataSet();

054

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何把数据导入不同的表空间 下一篇将SQLite中的数据转换为Excel表

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: