[try it] 使用sqlite

來源:互聯網
上載者:User

很早就聽說過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
     

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.