zoukankan      html  css  js  c++  java
  • [try it] 使用sqlite

    很早就听说过sqlite这个数据库引擎,但鉴于我一贯好逸恶劳,纸上谈兵的恶劣行径,一直没着手玩过它。记得老东家当年做CAD系统的标准库时,用的就是sqlite来存储那些标准零件 - 作为desktop版本的标准库,作为数据库安装发布到单机,sqlite的确是不二之选。并且按照sqlite支持的容量上限2TB来看,如果每个标准库零件要5M,可以存2*1024*1024/5 = 419430个,应该是足够的!

    这次用sqlite,主要有两个原因:

    • 最近想写一个android下微博知识管理器,对于保存离线数据,sqlite是不二之选
    • csdn泄露的密码,把它导入数据库,一是可以做一些分析,二是可以练习一下sql
      陈硕同学总结最常用的10个密码的shell命令: awk '{print $3}' www.csdn.net.sql |sort |uniq -c |sort -nr |head

    基本概念

    sqlite是一个相当有名的单机数据库系统,据说是世界上被部署的最多的数据库系统了 - 那到不意外,作为serverless的单机版数据库,其已经被部署到无数pc,智能设备中,相比那些只部署在强劲服务器上的MS SQLSERVER, MYSQL, ORACLE,DB2等,自然要占很大的优势,相对于这些大型数据库系统,其优势是:资源占用非常少,配置极其简单(无需配置),进程内数据库操作,效率较高;当然,相对的就是其不适合高并发,大数据(>2TB)的应用。这篇文章比较详细的分析了sqlite适合于不适合的场景。

    sqlite支持windows,linux和mac,当然也支持Android,android.database.sqlite是android sdk中提供的api。sqlite除了提供编程接口之外,也提供了一个命令行工具sqlite3来管理数据库:通过它你可以创建数据库、表;插入、查询数据等等。

    另外,sqlite网站上列出的关于sql语法pragma内容,也是非常值得参考的。

    下载安装

    sqlite,正如其宣称的一样,是zero-configuration的,所以一旦你下载解压好了,它就可以用了。一般可以认为sqlite包含3个部分吧:

    • SDK
    • sqlite3命令行工具
    • sqlite3_analyzer命令行工具

    你需要在这里下载不同的zip包获得,简单验证一下sqlite3是否工作:

    D:\Source\Data\Password
    $ sqlite3 my.db
    SQLite version 3.7.5
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> create table company(name varchar(50) primary key, address varchar(50));
    sqlite> insert into company values("Morgan Stanley", "Huamu Road");
    sqlite> insert into company values("Autodesk", "Caobao Road");
    sqlite> select * from company;
    Morgan Stanley|Huamu Road
    Autodesk|Caobao Road

    操作实践

    可以用两个例子

    一、使用sqlite3命令行工具进行数据分析

    对象自然是csdn密码库,首先,将密码文本导入数据库:

    D:\Source\Data\Password
    $ sqlite3 csdn.db
    SQLite version 3.7.5
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> create table user(id varchar(50) primary key, pwd varchar(50), mail varchar(50));
    sqlite> .separator " # "
    sqlite> .import csdn/www.csdn.net.sql user

    这里先创建user表,然后用.separator命令设置列分隔符,并使用.import命令导入,因为源数据的格式为:userid # password # mail,当然,如果有人的密码中用了" # ",导入就会失败 - 但貌似csdn的密码库并没有这种情况。(或许黑客同志们事先把这些行去掉了)。

    数据有了,看看有多少行:

    sqlite> select count(*) from user;
    6428632

    现在,我要找出csdn中使用最多的10个密码:

    sqlite> select pwd, count(*) from user group by pwd order by count(*) desc limit 10;
    123456789|235012
    12345678|212749
    11111111|76346
    dearbook|46053
    00000000|34952
    123123123|19986
    1234567890|17790
    88888888|15033
    111111111|6995
    147258369|5965



    可以看到,都是一些比较符合键盘分布密码,至于dearbook,那是csdn的另一个子网站,不知道为什么有那么多人选他;而147258369,则很明显是用小键盘敲入的,看来用先键盘的程序员也不在少数。

    二、是简单是使用sqlite3的C/C++编程接口。

    你可以直接使用源代码,也可以使用预编译好的dll文件(windows),这里采用dll,因为直接用源码比较简单:

    • 下载dll包,里面包含一个sqlite3.def和sqlite3.dll两个文件。
    • 下载source code包,需要里面的sqlite3.h头文件
    • 把sqlite3.def转换成lib文件:
      $ lib /def:sqlite3.def /machine:x86
      Microsoft (R) Library Manager Version 9.00.30729.01
      Copyright (C) Microsoft Corporation. All rights reserved.

      Creating library sqlite3.lib and object sqlite3.exp
    • 创建VC++工程,拷贝这里的C代码,设置additonal include directories和additonal include libraries, 编译并把sqlite3.dll所在目录加入path
       
  • 相关阅读:
    mysql 需要掌握的重点
    Java基础知识之常见关键字以及概念总结
    abstract类中method
    java异常继承何类,运行时异常与一般异常的区别
    Java关键字final、static使用总结
    JAVA读取XML文件
    关于ApplicationContext的初始化
    web.xml配置详解
    maven javaProject打包发布成服务
    Spring Boot Actuator 配置和应用
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/2310109.html
Copyright © 2011-2022 走看看