SQLite

作者: ROTK_lvzhenhua | 来源:发表于2017-03-09 17:28 被阅读10次

    SQLite,是一个轻型的关系型数据库,它的设计目标是支持,嵌入式,它占用的资源非常低,在嵌入式设备中,他可能只需要几百K的内存,它能够支持WIndows/LINUX/等等主流的操作系统,目前版本是SQLite3

    主键:唯一标示一条记录的字段(它会随着数据自动增加)
    外键:在本表中存在其他表中的主键字段
    关系型数据库:就是根据主键和外键关联起来的
    多个表之间的联系

    数据类型

    存储值类型.png

    Boolean数据类型

    SQLite没有单独的Boolean存储类。相反,布尔值被存储为整数0(false)和1(true)。

    Date与Time数据类型

      存储值                    格式        
      TEXT-> 格式为“YYYY-MM-DD HH:MM:SS.SSS" 的日期                                                                                                   
      REAL -> 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数   
      INTEGER->从 1970-01-01 00:00:00 UTC 算起的秒数。        
    

    常用指令

    插入INSERT

    INSERT INTO table_name VALUES (8, 'Paul', 24, 'Houston', 20000.00 )
    

    SQLite Update

    用于修改表中已有的记录。

    UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
    

    SQLIte Delete

    SQLite 的 DELETE 查询用于删除表中已有的记录

    DELETE FROM table_name WHERE [condition];
    

    查询手册

    SQLite LIKE 子句

    • 百分号(%)
    • 下划线(
      百分号(%)代表零个、一个或多个数字或字符。下划线(
      )代表一个单一的数字或字符。这些符号可以被组合使用。
    LIke.png

    SQLite GLOB 子句

    SQLite的GLOB运算符是用来匹配通配符指定模式的文本值。

    注意GLOB是大小写敏感的

    • 星号(*)代表零个,一个或者多个数字或字符
    • 问号(?) 代表一个单一的数字或字符
    GLOB.png

    SQLite limit 子句

    SELECT column1, column2, columnN FROM table_name LIMIT [no of rows]   
    

    选取所对应的表单的个行数

    SELECT column1, column2, columnN FROM table_name LIMIT [no of rows] OFFSET [row num] 
    

    选取到指定的个数并返回

    Example:

    SELECT * FROM table_name LIMIT 3 OFFSET 2
    

    选出对应的三个记录

    SQLite Order By

    SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。

    ORDER BY 子句的基本语法如下:

    SELECT * FROM table_name where 条件 ORDER BY 【键值,键值,…】【 DESC(降序),ASC(升序)】

    SELECT * FROM table_name ORDER BY key DESC
    

    从表中选取对应的key以降序排列

    SQlite Group By

    SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。

    SELECT column-list FROM table_name WHERE [ conditions ]
    GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
    

    Example:

    SELECT NAME, SUM(SALARY) FROM table_name GROUP BY NAME;
    

    C/C++接口

    API&描述

    • sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 如果 filename 参数是 NULL 或 ':memory:',那么 sqlite3open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3open() 将创建一个新的命名为该名称的数据库文件并打开
    1.  sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)                                                                                                         该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成                                                                                                      在这里,第一个参数 sqlite3 是打开的数据库对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误                                                                                                        sqlite3exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。
      
    • sqlite3_close(sqlite3*) 该例程关闭之前调用 sqlite3open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成 如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息

    连接数据库

    int main(int argc, char* argv[]) {
    sqlite3 *db;
    char *zErrMsg = 0; int rc;
    //打开数据库
    rc = sqlite3_open("test.db", &db);
    if( rc ){
    fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db)); exit(0);
    }else{
    fprintf(stderr, "Opened database successfullyn");
    }
    sqlite3_close(db);
    }
    

    SQLite

    重新命名数据库的表

    ALTER TABLE database_name.table_name RENAME TO new_table_name;
    

    添加一个新的字段

    ALTER TABLE table_name ADD COLUMN SEX char(1);
    

    数据还需要多加练习。

    相关文章

      网友评论

        本文标题:SQLite

        本文链接:https://www.haomeiwen.com/subject/pnfggttx.html