• Sqlite学习笔记(一)&&编译安装


    Sqlite简介

          sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中。 sqlite动态库非常小,最新的3.8.11版本也只有500k左右。sqlite虽然小,但功能并不弱,它支持sql-92标准中大部分SQL规范, 支持表,索引,视图,触发器等对象,同时它还支持事务,满足ACID特性,因此非常适合嵌入式设备存储数据,尤其是手机,君不见微信,支付宝其实都在用哦。鉴于sqlite在嵌入式 领域非常流行,本人最近也在学习这个数据库,后面在学习的过程中,会整理些笔记,希望对大家有帮助。

    下载源代码

          在sqlite官网上http://www.sqlite.com/download.html下载最新的源代码,目前最新的版本是3.8.11。sqlite的源码包有两类,一类是sqlite-amalgamation-3081101.zip,这个包里面的 的源码只有一个源码文件sqlite3.c,包含了sqlite各个模块的所有代码;另外一类是sqlite-src-3081101.zip,这个包按sqlite模块拆分成了很多小文件。如果你想学习源代码,建议使用sqlite-src-3081101.zip,而如果用来熟悉sqlite功能,则建议使用sqlite-amalgamation-3081101.zip,因为就一个文件,方便将代码整合到自己的工程。下文,都假设采用只有一个文件的包。

    编译&安装

    拿到源码后,我们看到除了sqlite3.c源文件,还有shell.c文件。因为sqlite3.c只是一个动态库的源文件,因此通过整合shell.c可以生成sqlite执行码,简单来说就是sqlite3的客户端。

    1)  编译命令行管理工具

    gcc shell.c sqlite3.c -lpthread -ldl -o sqlite3

    2)  编译动态链接库

    gcc sqlite3.c -lpthread -ldl -fPIC -shared -o libsqlite3.so 

    备注:

    -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,动态载入时是通过代码拷贝的方式来满足不同进程的需要, 这样,N个进程就就需要N个动态库的拷贝,不能达到真正代码段共享的目的。

    -shared:表示生成一个共享目标文件,即我们所说的动态链接库。它可以和其他目标文件连接产生可执行文件。

    -lpthread系统库用于支持线程操作。

    -dl系统库用于支持动态装载。

    3)  编译静态库

    gcc -c sqlite3.c -lpthread -ldl -o sqlite3.o

    ar -r libsqlite3.a sqlite3.o

    将列出的各个目标文件一起打包成一个静态库libsqlite3.a

    sqlite3基本操作

    经过第一步和第二步,我们已经有了动态库和可执行码,这一节主要讲讲sqlite客户端的基本操作。由于sqlite支持sql-92标准,因此,在sqlite中使用sql语句与其他关系型数据库并没有太多差别。

    1)  创建名为test.db的数据库

    sqlite3  test.db

    2)  创建表t,并添加索引idx_c1

    create table t1(id int primary key,  c1 varchar(100));

    create index idx_c1 on t1(c1);

    3)  创建视图 

    create view view_t1 as select * from t1;

    4)  元数据查询命令

        a)  .databaes  显示数据库对象

        b)  .tables   显示表对象

        c)  .schema  显示表对象创建语句

        d)  .indices  显示索引对象

    5)  sqlite_master元数据表

    sqlite中所有数据都存储在一个db文件中,其中sqlite_master用于存储元数据信息。第4节讲到的命令输出的数据,实质都是来源于sqlite_master表。Sqlite_master表结构如下

    type

    name

    tbl_name

    rootpage

    sql

    对象类型

    对象名

    表名

    对象B树存储的根页

    创建对象语句

    比如,查询当前数据库的所有对象

     

    6) .show 显示格式

    默认查询输出结果可能不太容易看,可以通过设置以下参数来调整输出。.show命令显示了当前各种输出参数的设置,比如我们输出结果时,需要输出列名,可以使用.headers on即可。其他参数,大家可以逐个试试。

    sqlite> .show     

    echo: off  

    explain: off  

    headers: on     

    mode: column

    nullvalue: ""   

    output: stdout

    separator: "|"    

    7)  导入&导出

    sqlite备份恢复相当容易,直接拷贝db文件就完事了。同样sqlite也支持导入导出功能,相对于拷贝物理文件方式,导出的对象更灵活,可以只导出数据库中的指定对象,另外导出文件存储的是SQL语句,物理文件存储的是二进制数据。

       a) 导出

       .dump  默认导出数据库所有对象到屏幕

     

       b) 导出 t1和t2表到文件,需要设置.output参数

       .output filename

       .dump  t1 t2 

       .output stdout

       c) 导入

       .read  filename

     

     

     

     

     

     

     

  • 相关阅读:
    设计模式一:简单工厂模式
    排序算法一:冒泡排序
    设计模式三:工厂方法模式
    设计模式二:单例模式
    >Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
    eclipse打开会出现初始化错误>解决办法
    easyui页面上的增删改功能
    springboot集成druid数据源
    springboot集成shiro的验证
    Java虚拟机
  • 原文地址:https://www.cnblogs.com/cchust/p/4722931.html
Copyright © 2020-2023  润新知