zoukankan      html  css  js  c++  java
  • 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))

    //删除表
    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' WHERE Name = 'Jack'

    //选择最后一行数据

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

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

    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 表名)

  • 相关阅读:
    【Luogu】P2491消防(单调队列)
    【Luogu】P2824排序(二分答案+线段树排序)
    2-k8s笔记-Kubernetes安装配置指南
    1-k8s笔记-Kubernetes入门
    22-MySQL DBA笔记-其他产品的选择
    21-MySQL DBA笔记-高可用性
    20-MySQL DBA笔记-可扩展的架构
    19-MySQL DBA笔记-操作系统、硬件、网络的优化
    18-MySQL DBA笔记-MySQL Server调优
    17-MySQL DBA笔记-应用程序调优
  • 原文地址:https://www.cnblogs.com/hont/p/3092222.html
Copyright © 2011-2022 走看看