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
       
  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/baiyanhuang/p/2310109.html
Copyright © 2011-2022 走看看