Android 個人財務工具二:使用SQLite實現啟動時初始化資料_Android

來源:互聯網
上載者:User

   關於SQLite

       sqlite是嵌入式SQL資料庫引擎SQLite(SQLite Embeddable SQL Database Engine)的一個擴充。SQLite是一個實現嵌入式SQL資料庫引擎小型C語言庫(C library),實現了獨立的,可嵌入的,零配置的SQL資料庫引擎。特性包括:事務操作是原子,一致,孤立,並且持久的,即使在系統崩潰和電源故障之後。 零配置——不需要安裝和管理。 實現了絕大多數SQL92標準。

       我在多年前就關注sqlite的發展,非常看好sqlite的前景,因為在移動、嵌入式的應用裡面,sqlite具有非常好的特性來滿足需求。

       早在symbian 9.0 之前,openc 出來後,我就研究sqlite到symbian的移植。後來symbian9.3 nokia就已經整合了sqlite。

       至今j2me還不支援sqlite,可以說是個遺憾。

       現在我們來看看android sqlitedatabase 包裡面的關鍵api:

Java代碼

static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) //開啟資料庫 Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) //執行查詢SQL void execSQL(String sql) //執行非查詢sql 

       sdk 1.0 關於cursor和sqlite的相關api對於前面的版本改變很多。

       我覺得關鍵是沒了query(String sql)這個簡單的方法了,很不爽。

       不過如果你對新的query方法瞭解深入點,發現其實也就一樣。

       執行個體代碼

       我們來看兩個例子。

Java代碼

//執行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(); //執行多表查詢 //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+""); } 

       現在來看看我們如何在這個理財工具裡面應用它。

       我們需要在程式的第一次啟動時,建立資料庫,然後把基本的表建立好,並且初始化好賬目表。

       對於上一篇中的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); //建立資料庫  Log.v(TAG,"db path="+db.getPath());  }   public void CreateTable_acctitem() {  try{  db.execSQL("CREATE TABLE acctitem (" //建立賬目表   + "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,'水電瓦斯費',1)");  db.execSQL("insert into acctitem values (200103,200,'汽油費',1)");  Log.v("cola","insert into ok");   }    public void QueryTable_acctitem(){   }   public void FirstStart(){  //如果是第一次啟動,就不存在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 個人財務工具六:顯示賬單明細 下

                       Android 個人財務工具五:顯示賬單明細 上

                       Android 個人財務工具四:添加賬單頁面 下

                       Android 個人財務工具三:添加賬單頁面 上

                       Android 個人財務工具二:使用SQLite實現啟動時初始化資料

                       Android 個人財務工具一:項目概述與啟動介面的實現

       以上就是對Android SQL的講解及執行個體,後續繼續做個人財務項目,謝謝大家支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.