SQLite使用随记

厌倦了SQL Server的系统服务和臃肿的安装文件。。又不想用MySQL,于是开启了SQLite的坑

 

总的来说还是不错,SQLite对一些SQL语法只提供有限的支持,太复杂的操作需要重新建表。网上说10万条以下数据SQLite都不在话下。so,小型的数据库再合适不过了

这里示范SQLite的本地读写

 

相关链接

====================================================================

SQLite操作软件推荐 SQLiteSpy

 

SQL语句的研究可以看W3School的教程:http://www.w3school.com.cn/sql/

 

SQLite的下载和文档,可以去官网:http://www.sqlite.org/

 

 

 

 

SQLite操作示例

(注:示范的例子是我封装的一个类里的函数)

====================================================================

using System.Data.SQLite;

首先在引用完Dll之后,引用上面这个命名空间

 

SQLiteDataReader类的实例,可以保存读到的数据,进行操作

SQLiteConnection类的实例,和连接硬盘上的数据库文件有关。

SQLiteConnectionStringBuilder这个类听名字应该是构建器之类的,只会导入数据的时候用一次,一般不会用到。

 

下面的示例都和这3个类有关

 

1.打开数据库文件

public SQLiteConnection SqliteInit(string path)
{
    SQLiteConnection result = new SQLiteConnection();
    SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();

    connstr.DataSource = path;
    result.ConnectionString = connstr.ToString();
    result.Open();

    return result;
}

返回的实例类似控制连接的句柄。如果同时连接多个数据库,可能会有多个这样的句柄吧

 

2.SQL语句

public SQLiteDataReader GetSqlDataReader(string sqlCmd, SQLiteConnection conn)
{
    SQLiteDataReader result = null;
    SQLiteCommand cmd = new SQLiteCommand();
    cmd.CommandText = sqlCmd;
    cmd.Connection = conn;
    cmd.ExecuteNonQuery();

    result = cmd.ExecuteReader();

    return result;
}

sqlCmd参数就是SQL语句。那么要怎么通过SQLiteDataReader来读取呢?。下面演示

 

3.读取SQLiteDataReader的数据

public string[,] GetTableDatas(string tableName, string[] colNames)
{
    string[,] result = null;
    List<string[]> datas = new List<string[]>();

    SQLiteDataReader reader = GetSqlDataReader("SELECT * FROM "+tableName, mConnect);

    while (reader.Read())
    {
        string[] tmp = new string[colNames.Length];
        for (int i = 0; i < colNames.Length; i++)
        {
            tmp[i] = reader[colNames[i]].ToString();
        }

        datas.Add(tmp);
    }

    result = new string[datas.Count, colNames.Length];

    for (int i = 0; i < datas.Count; i++)
    {
        for (int j = 0; j < colNames.Length; j++)
        {
            result[i, j] = datas[i][j];
        }
    }

    return result;
}

这个函数写的不是很好,只供参考。

假设表里有一个名为Name的列,可以这样写reader["Name"].Getxxx();

它支持索引器

 

 

常用SQL语句介绍

===============================================================

多行的数据都需要加分号,我的SQL语句语法约定: 所有SQL操作关键字一律大写

 

插入数据  按照列从左往右的顺序插入

INSERT INTO 表名 VALUES('Jack','200')

 

取出一个表的数据

SELECT * FROM 表名

 

创建表

CREATE TABLE 表名(列名1 varchar(20),列名2 varchar(20))

 

如果表不存在就创建表

CREATE TABLE if not exists 表名(列名1 varchar(20),列名2 varchar(20))

 

删除表
DROP TABLE 表名

 

在表中插入一列数据
ALTER TABLE 表名 ADD 列名 VARCHAR(20)

 

不删除表的情况下,删除所有行

DELETE FROM 表名

 

删除一行数据. where后的为条件,下面的例子中,如果Name列中有一个数据叫Jack,就会被删除.
DELETE FROM 表名 WHERE Name='Jack';

 

多条件. AND就是&&, OR就是||
DELETE FROM 表名 WHERE Name='Jack' AND Lv='200'

 

排序
SELECT * FROM 表名 ORDER by 列名

 

修改数据  通常用于集体修改  这里演示把 Name列为 "Jack"的值 全部修改为“None”

UPDATE 表名 SET Name = 'None', Age=0 WHERE Name = 'Jack'

 

选择最后一行数据

SELECT top 1 * FROM [MyTable] ORDER BY [id] DESC

MySql里这样:

SELECT * FROM user ORDER BY id DESC LIMIT 1;

 

模糊查询(%类似*,_类似?)

SELECT * FROM 表名 WHERE Name LIKE '%Jack%'

 

多表查询(通过第一张表存的ID读到第二张表映射的真实姓名)

SELECT b.realName, a.value, a.goods FROM [MyTable1] a, [MyTable2] b WHERE a.id = b.id

 

以主键id作为参考,选择其中10-50

SELECT TOP 50 * FROM 表名 WHERE id NOT IN(SELECT TOP 10 id FROM 表名)

posted @ 2013-05-22 09:57  HONT  阅读(546)  评论(0编辑  收藏  举报