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