SQLite3 在應用啟動時初始化資料

2021-08-26 05:07:46 字數 2544 閱讀 3113

今天想實現乙個功能,即在應用安裝初始化時,建立本地資料庫,同時為資料庫新增資料,之後再從資料庫中讀取資料。

1 首先需要寫乙個類實現android中的sqliteopenhelper類。**如下:

public class databasehelper extends sqliteopenhelper 

public databasehelper(context context, string name, int version)

public databasehelper(context context)

string sql = "create table if not exists car ( _id varchar(50) primary key ,"

+ "company_name varchar(50) , "

+ "type varchar(50) , "

+ " general_name varchar(50) ,"

+ "transmission varchar(50) , "

+ " emission varchar(50),"

+ "city_consume varchar(50) , "

+ "suburban_consume varchar(50) ,"

+ "total_consume varchar(50),"

+ "factor varchar(50)) ;";

//該函式是在第一次建立資料庫的時候執行,實際上是在第一次得到sqlitedatabase物件的時候,

//才會呼叫這個方法

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

}

2.判斷資料庫表中是否有資料,這個可以區分出是否已經對錶進行填充了。這個是在carservice中實現的。

carservice中的構造方法:

private databasehelper openhelper;

private sqlitedatabase sqlitedatabase;

private context mcontext;

public carservice(context context) catch (ioexception e)

} }

之後是實現方法:

//判斷資料庫表中是否有資料

public boolean i***ist()

cursor.close();

sqlitedatabase.close();

} return result;

}

3 開始往空表中填充資料。這個實現思路是直接把乙個檔案中的資料(大概1k條左右)寫進資料庫,因為資料量稍微多點,所以使用事務進行新增。同時這個資料檔案car.sql是放在res/raw/資料夾下。我試過跟類放在一起我找不到檔案。如果有同志實現了,可以交流下。呵呵。

/**

* 通過讀取檔案,插入初始化資料

* @throws ioexception

*/public void initinsert() throws ioexception

sqlitedatabase.settransactionsuccessful();

sqlitedatabase.endtransaction();

br.close();

reader.close();

sqlitedatabase.close();

}

我是用按行讀取的,比較簡便。嘿嘿難一點的,你們自己試吧。

4之後就是查詢了。

public listgetcompanylist(long startindex, long maxcount) throws unsupportedencodingexception ;

sqlitedatabase = openhelper.getreadabledatabase();

cursor cursor = sqlitedatabase.rawquery(sql, null);

listcars = new arraylist();

if (cursor.getcount() != 0)

cursor.close();

sqlitedatabase.close();//關閉資料庫

} else

return cars;

}

如果填充資料沒錯,就出現效果了。

出現問題:因為總是測試,很多時候使用命令列檢視資料庫。刪除應用的時候,只是刪除資料夾。有好幾次在程式初始化時都會報錯:unable to open database file

查了很多資料,最後才明白是自己的應用沒有刪乾淨。建議用模擬器自帶的解除安裝管理。

docker mysql啟動時自動執行初始建表指令碼

預設情況下,mysql映象建立的docker容器啟動時只是乙個空的資料庫例項,為了簡化docker部署,我們需要 在docker建立mysql容器的時,資料庫和表已經自動建好,初始化資料也已自動錄入,也就是說容器啟動後資料庫就可用了。這就需要容器啟動時能自動執行sql指令碼。在mysql官方映象中提...

在arm上測試sqlite3

這裡以sqlite官方站點http sqlite.org 的quick start文件中的測試程式為例對移植到arm linux上的sqlite3進行測試。該程式清單如下 1 include 2 include sqlite3.h 3 4 static int 5 callback void not...

在MFC中支援sqlite3

建立mfc工程的步驟我就不贅述了,以下操作均假設你已經建立好了乙個mfc工程 測試環境 windows7 編譯環境 visual studio 2015 新增步驟 2 解壓,將common 資料夾中的cppsqlite3.cpp cppsqlite3.h sqlite3.dll sqlite3.li...