欢迎投稿

今日深度:

SQLite(轻量级最佳数据库) 原理分析和开发应用,

SQLite(轻量级最佳数据库) 原理分析和开发应用,sqlite


概述

SQLite介绍

自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少。
SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效而且可靠。
SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。

架构(architecture)

SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。

 

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

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

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()两个函数实现字符间转换。

 

 

 

开发示例

using System;
using System.Data;
using System.Data.SQLite;
using System.Collections.Generic;
using System.IO;

namespace DataHelper
{
    public class SqLiteHelper
    {
        /// <summary>
        /// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
        /// </summary>
        public static string ConnectionString
        {
            get
            {
                return  @"Data source= "+DataBasePath+";";
            }
            set { throw new NotImplementedException(); }
        }

        public static string DataBasePath
        {
            get { return "SpringYang.db";};
        }

        private static object lockObject = new object();

        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, List<SQLiteParameter> parameters)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Parameters.Clear();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 30;
            foreach (var parameter in parameters)
            {
                cmd.Parameters.Add(parameter);
            }
        }

        public static DataSet ExecuteQuery(string cmdText, List<SQLiteParameter> parameters)
        {
            lock (lockObject)
            {
                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
                {
                    using (SQLiteCommand command = new SQLiteCommand())
                    {
                        DataSet ds = new DataSet();
                        PrepareCommand(command, conn, cmdText, parameters);
                        SQLiteDataAdapter da = new SQLiteDataAdapter(command);
                        da.Fill(ds);
                        return ds;
                    }
                }
            }
        }

        public static int ExecuteNonQuery(string cmdText, List<SQLiteParameter> parameters)
        {
            lock (lockObject)
            {
                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
                {
                    using (SQLiteCommand command = new SQLiteCommand())
                    {

                        PrepareCommand(command, conn, cmdText, parameters);
                        return command.ExecuteNonQuery();
                    }
                }
            }
        }

        public static SQLiteDataReader ExecuteReader(string cmdText, List<SQLiteParameter> parameters)
        {
            lock (lockObject)
            {
                SQLiteConnection conn = new SQLiteConnection(ConnectionString);

                SQLiteCommand command = new SQLiteCommand();

                PrepareCommand(command, conn, cmdText, parameters);
                SQLiteDataReader sqLiteDataReader = command.ExecuteReader();
                return sqLiteDataReader;
            }
        }

        public static object ExecuteScalar(string cmdText, List<SQLiteParameter> parameters)
        {
            lock (lockObject)
            {
                using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
                {
                    using (SQLiteCommand command = new SQLiteCommand())
                    {
                        PrepareCommand(command, conn, cmdText, parameters);
                        return command.ExecuteScalar();
                    }
                }
            }
        }
        public static void CreateDataBase()
        {
            if (!File.Exists(DataBasePath))
                SQLiteConnection.CreateFile(DataBasePath);
            CreateTable();
        }


        public static void CreateTable()
        {
            ExecuteNonQuery(CodeDetailTabale, null);
        }


        private static string CodeDetailTabale
        {
            get
            {
                return @"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)         
   ) ;";
            }
        }
    }
}

 

 

示例讲解

A、使用到自己定义的锁private  static object lockObject = new object();

B、使用完连接后都进行关闭操作。使用了using

C、创建数据库命令:SQLiteConnection.CreateFile(DataBasePath);

 

最后再讲解个Insert or Replace into的经典用法

Insert or Replace INTO User(ID, Name,Age) Select old.ID,new.Name,new.Age From
(select 'Spring Yang' as Name, '25' as Age) as new left join (Select ID,Name from User where Name = 'Spring Yang' ) as old on old.Name = new.Name

 

欢迎各位参与讨论,如果觉得对你有帮助,请点击image    推荐下,万分谢谢.

 

作者:spring yang

出处:http://www.cnblogs.com/springyangwc/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

www.htsjk.Com true http://www.htsjk.com/SQLite/10474.html NewsArticle SQLite(轻量级最佳数据库) 原理分析和开发应用,sqlite 概述 SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一...
相关文章
    暂无相关文章
评论暂时关闭