Android 個(gè)人理財(cái)工具二:使用SQLite實(shí)現(xiàn)啟動(dòng)時(shí)初始化數(shù)據(jù)
關(guān)于SQLite
sqlite是嵌入式SQL數(shù)據(jù)庫(kù)引擎SQLite(SQLite Embeddable SQL Database Engine)的一個(gè)擴(kuò)展。SQLite是一個(gè)實(shí)現(xiàn)嵌入式SQL數(shù)據(jù)庫(kù)引擎小型C語(yǔ)言庫(kù)(C library),實(shí)現(xiàn)了獨(dú)立的,可嵌入的,零配置的SQL數(shù)據(jù)庫(kù)引擎。特性包括:事務(wù)操作是原子,一致,孤立,并且持久的,即使在系統(tǒng)崩潰和電源故障之后。 零配置——不需要安裝和管理。 實(shí)現(xiàn)了絕大多數(shù)SQL92標(biāo)準(zhǔn)。
我在多年前就關(guān)注sqlite的發(fā)展,非??春胹qlite的前景,因?yàn)樵谝苿?dòng)、嵌入式的應(yīng)用里面,sqlite具有非常好的特性來(lái)滿(mǎn)足需求。
早在symbian 9.0 之前,openc 出來(lái)后,我就研究sqlite到symbian的移植。后來(lái)symbian9.3 nokia就已經(jīng)集成了sqlite。
至今j2me還不支持sqlite,可以說(shuō)是個(gè)遺憾。
現(xiàn)在我們來(lái)看看android sqlitedatabase 包里面的關(guān)鍵api:
Java代碼
static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) //打開(kāi)數(shù)據(jù)庫(kù) Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) //執(zhí)行查詢(xún)SQL void execSQL(String sql) //執(zhí)行非查詢(xún)sql
sdk 1.0 關(guān)于cursor和sqlite的相關(guān)api對(duì)于前面的版本改變很多。
我覺(jué)得關(guān)鍵是沒(méi)了query(String sql)這個(gè)簡(jiǎn)單的方法了,很不爽。
不過(guò)如果你對(duì)新的query方法了解深入點(diǎn),發(fā)現(xiàn)其實(shí)也就一樣。
實(shí)例代碼
我們來(lái)看兩個(gè)例子。
Java代碼
//執(zhí)行select type,name from sqlite_master where name='colaconfig'
String col[] = {"type", "name" };
Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null);
int n=c.getCount();
//執(zhí)行多表查詢(xún)
//select fee,desc from acctite a,bills b where a.id=b.id
String col2[] = {"fee", "desc" };
Cursor c2 =db.query("acctitem a,bills b", col, "a.id=b.id", null, null, null, null);
int n2=c2.getCount();
Log.v("cola","c2.getCount="+n2+"");
c2.moveToFirst();
int k = 0;
while(!c2.isAfterLast()){
String ss = c2.getString(0) +", "+ c2.getString(1);
c2.moveToNext();
Log.v("cola","ss="+ss+"");
}
現(xiàn)在來(lái)看看我們?nèi)绾卧谶@個(gè)理財(cái)工具里面應(yīng)用它。
我們需要在程序的第一次啟動(dòng)時(shí),創(chuàng)建數(shù)據(jù)庫(kù),然后把基本的表創(chuàng)建好,并且初始化好賬目表。
對(duì)于上一篇中的initapp方法,我們需要改造成:
Java代碼
public void initApp(){
BilldbHelper billdb=new BilldbHelper(this);
billdb.FirstStart();
billdb.close();
}
下面我們給出BilldbHelper.java 代碼:
Java代碼
package com.cola.ui;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* Provides access to a database of notes. Each note has a title, the note
* itself, a creation date and a modified data.
*/
public class BilldbHelper {
private static final String TAG = "Cola_BilldbHelper";
private static final String DATABASE_NAME = "cola.db";
SQLiteDatabase db;
Context context;
BilldbHelper(Context _context) {
context=_context;
db=context.openOrCreateDatabase(DATABASE_NAME, 0, null); //創(chuàng)建數(shù)據(jù)庫(kù)
Log.v(TAG,"db path="+db.getPath());
}
public void CreateTable_acctitem() {
try{
db.execSQL("CREATE TABLE acctitem (" //創(chuàng)建賬目表
+ "ID INTEGER PRIMARY KEY,"
+ "PID integer,"
+ "NAME TEXT,"
+ "TYPE INTEGER"
+ ");");
Log.v("cola","Create Table acctitem ok");
}catch(Exception e){
Log.v("cola","Create Table acctitem err,table exists.");
}
}
public void CreateTable_bills() {
try{
db.execSQL("CREATE TABLE bills ("
+ "ID INTEGER PRIMARY KEY,"
+ "fee integer,"
+ "userid integer,"
+ "sdate TEXT,"
+ "stime TEXT,"
+ "desc TEXT"
+ ");");
Log.v("cola","Create Table acctitem ok");
}catch(Exception e){
Log.v("cola","Create Table acctitem err,table exists.");
}
}
public void CreateTable_colaconfig() {
try{
db.execSQL("CREATE TABLE colaconfig ("
+ "ID INTEGER PRIMARY KEY,"
+ "NAME TEXT"
+ ");");
Log.v("cola","Create Table colaconfig ok");
}catch(Exception e){
Log.v("cola","Create Table acctitem err,table exists.");
}
}
public void InitAcctitem() {
db.execSQL("insert into acctitem values (100,0,'收入',0)");
db.execSQL("insert into acctitem values (100100,100,'工資',0)");
db.execSQL("insert into acctitem values (200,0,'支出',1)");
db.execSQL("insert into acctitem values (200100,200,'生活用品',1)");
db.execSQL("insert into acctitem values (200101,200,'水電煤氣費(fèi)',1)");
db.execSQL("insert into acctitem values (200103,200,'汽油費(fèi)',1)");
Log.v("cola","insert into ok");
}
public void QueryTable_acctitem(){
}
public void FirstStart(){
//如果是第一次啟動(dòng),就不存在colaconfig這張表.
try{
String col[] = {"type", "name" };
Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null);
int n=c.getCount();
if (c.getCount()==0){
CreateTable_acctitem();
CreateTable_colaconfig();
CreateTable_bills();
InitAcctitem();
}
Log.v("cola","c.getCount="+n+"");
}catch(Exception e){
Log.v("cola","e="+e.getMessage());
}
}
public void close(){
db.close();
}
}
系列文章:
Android 個(gè)人理財(cái)工具六:顯示賬單明細(xì) 下
Android 個(gè)人理財(cái)工具五:顯示賬單明細(xì) 上
Android 個(gè)人理財(cái)工具四:添加賬單頁(yè)面 下
Android 個(gè)人理財(cái)工具三:添加賬單頁(yè)面 上
Android 個(gè)人理財(cái)工具二:使用SQLite實(shí)現(xiàn)啟動(dòng)時(shí)初始化數(shù)據(jù)
Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
以上就是對(duì)Android SQL的講解及實(shí)例,后續(xù)繼續(xù)做個(gè)人理財(cái)項(xiàng)目,謝謝大家支持!
- Android 個(gè)人理財(cái)工具六:顯示賬單明細(xì) 下
- Android 個(gè)人理財(cái)工具五:顯示賬單明細(xì) 上
- Android 個(gè)人理財(cái)工具四:添加賬單頁(yè)面 下
- Android 個(gè)人理財(cái)工具三:添加賬單頁(yè)面 上
- Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
- Android 錢(qián)包支付之輸入支付密碼的實(shí)現(xiàn)步驟
- Android 高仿微信轉(zhuǎn)賬金錢(qián)輸入框規(guī)則
- Android快速實(shí)現(xiàn)一個(gè)財(cái)務(wù)APP程序詳解
相關(guān)文章
Android使用ViewPager實(shí)現(xiàn)翻頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)翻頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android滑動(dòng)刪除數(shù)據(jù)功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android滑動(dòng)刪除功能2017-01-01
使用 Swift 語(yǔ)言編寫(xiě) Android 應(yīng)用入門(mén)
為了能順利使用這份向?qū)?,你需要? 1. 可以編譯Swift源碼的Linux環(huán)境。stdlib目前只能在Linux環(huán)境下編譯成安卓可用版本。在嘗試為安卓構(gòu)建之前,確保你能夠參考Swift項(xiàng)目的README為L(zhǎng)inux做編譯。2016-04-04
Android實(shí)現(xiàn)自定義驗(yàn)證碼輸入框效果(實(shí)例代碼)
這篇文章主要介紹了Android實(shí)現(xiàn)自定義驗(yàn)證碼輸入框效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Android編程實(shí)現(xiàn)獲取當(dāng)前系統(tǒng)語(yǔ)言及地區(qū)并更改語(yǔ)言的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取當(dāng)前系統(tǒng)語(yǔ)言及地區(qū)并更改語(yǔ)言的方法,涉及Android針對(duì)系統(tǒng)語(yǔ)言及地區(qū)的獲取與設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
logcat命令使用方法和查看android系統(tǒng)日志緩沖區(qū)內(nèi)容的方法
這篇文章主要介紹了logcat命令使用方法和查看android系統(tǒng)日志緩沖區(qū)內(nèi)容的方法,需要的朋友可以參考下2014-02-02
Android開(kāi)發(fā)之緩沖dialog對(duì)話(huà)框創(chuàng)建、使用與封裝操作
這篇文章主要介紹了Android開(kāi)發(fā)之緩沖dialog對(duì)話(huà)框創(chuàng)建、使用與封裝操作,結(jié)合具體實(shí)例形式分析了Android緩沖dialog對(duì)話(huà)框的創(chuàng)建、設(shè)置、顯示、關(guān)閉等操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
Android移動(dòng)應(yīng)用開(kāi)發(fā)指南之六種布局詳解
Android應(yīng)用界面要美觀好看,就需要運(yùn)用到一定的布局技術(shù),Android布局是不可忽視的,是android應(yīng)用界面開(kāi)發(fā)的重要一環(huán),這篇文章主要給大家介紹了關(guān)于Android移動(dòng)應(yīng)用開(kāi)發(fā)指南之六種布局的相關(guān)資料,需要的朋友可以參考下2022-09-09

