大家好,好久不寫部落格。今天分享下如何將Excel的資料匯入到Sqlite,最近做一個撥號程式,需要做來電提醒的功能,來電提醒有幾種實現方式,第一種方式是通過一些開發的介面,通過提交號碼進行查詢,在沒連網的情況下,這就不可能了,所以斷然放棄。最後通過在本地構建一個存取號碼段的資料庫來進行查詢。全國的電話號碼段,資料量高達25萬條。這些資料存在一個Excel表格中,這麼大的資料量,在SqlServer或者Oracle中都好辦,可Sqlite中可如何是好呢?肯定也有匯入功能,於是經過一番學習。原來很簡單,好了。說了一堆廢話,看操作吧。
一、準備匯入的環境設定
首先確定系統中是否有sqlite3,查看system/xlib目錄。
# ls /system/xbin/sqlite3
沒有的話請下載(包含兩個檔案,sqlite3,libncurses.so),將sqlite3拷貝到/system/xbin目錄,將libncurses.so拷貝到/system/lib目錄
到此,首先建立一個資料庫:
# Sqlite3 /mnt/sdcard/test.db
我們看到現在已經進入sqlite了。接下來,輸入.help可以看到所有命令及說明,剛興趣的可移步到本文後面的附錄中
二、準備資料來源
我這裡原本是一個Excel檔案,通過另存新檔的方式儲存為cvs檔案。這裡要特別注意!!使用記事本的方式開啟cvs檔案,將其另存新檔UTF-8,因為sqlite預設是UTF-8編碼的,如果編碼不一致,就亂碼了。
建立一個表:create table phones(ID INTEGER PRIMARY KEY,MobileNumber INTEGER(7), MobileArea VARCHAR(16),MobileType VARCHAR(15),AreaCode VARCHAR(4));
設定分割字串
# .separator ","
三、匯入資料
# .import /mnt/sdcard/all.csv phones
上述匯入資料的方式,android系統中必須要sqlite3命令。更簡單的方式是使用可視化資料庫工具sqlitebrowser匯入,簡單快捷。
匯入成功後進行相關操作,發現25萬條資料檢索毫無壓力,基本上是幾百毫秒就可以搞定,而且13M的資料庫壓縮後連只有2M多一點。....
四、附錄
sqlite> .help
.backup ?DB? FILE Backup DB (default "main") to FILE
.bail ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
If TABLE specified, only dump tables matching
LIKE pattern TABLE.
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off.
With no args, it turns EXPLAIN on.
.genfkey ?OPTIONS? Options are:
--no-drop: Do not drop old fkey triggers.
--ignore-errors: Ignore tables with fkey errors
--exec: Execute generated SQL immediately
See file tool/genfkey.README in the source
distribution for further information.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices ?TABLE? Show names of all indices
If TABLE specified, only show indices for tables
matching LIKE pattern TABLE.
.load FILE ?ENTRY? Load an extension library
.log FILE|off Turn logging on or off. FILE can be stderr/stdout
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.restore ?DB? FILE Restore content of DB (default "main") from FILE
.schema ?TABLE? Show the CREATE statements
If TABLE specified, only show tables matching
LIKE pattern TABLE.
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?TABLE? List names of tables
If TABLE specified, only list tables matching
LIKE pattern TABLE.
.timeout MS Try opening locked tables for MS milliseconds
.width NUM1 NUM2 ... Set column widths for "column" mode
.timer ON|OFF Turn the CPU timer measurement on or off