Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android個人理財工具實例之二:使用SQLite實現啟動時初始化數據

Android個人理財工具實例之二:使用SQLite實現啟動時初始化數據

編輯:Android開發實例

       本節所講內容為使用SQLite實現在啟動時初始化數據。

       關於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代碼
  1. static      SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)  //打開數據庫   
  2. Cursor  query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)  //執行查詢SQL   
  3. void    execSQL(String sql)  //執行非查詢sql  

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

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

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

       實例代碼

       我們來看兩個例子。

Java代碼
  1. //執行select type,name from sqlite_master where name='colaconfig'   
  2. String col[] = {"type", "name" };   
  3.             Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null);   
  4.             int n=c.getCount();   
  5. //執行多表查詢   
  6. //select fee,desc from acctite a,bills b where a.id=b.id    
  7. String col2[] = {"fee", "desc" };   
  8. Cursor c2 =db.query("acctitem a,bills b", col, "a.id=b.id", null, null, null, null);   
  9. int n2=c2.getCount();          
  10. Log.v("cola","c2.getCount="+n2+"");   
  11.                
  12. c2.moveToFirst();    
  13. int k = 0;   
  14. while(!c2.isAfterLast()){   
  15.      String ss = c2.getString(0) +", "+ c2.getString(1);                 
  16.      c2.moveToNext();    
  17.                    
  18.      Log.v("cola","ss="+ss+"");   
  19. }  

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

       我們需要在程序的第一次啟動時,創建數據庫,然後把基本的表創建好,並且初始化好賬目表。

       對於上一篇中的initapp方法,我們需要改造成:

Java代碼
  1. public void initApp(){   
  2.        BilldbHelper billdb=new BilldbHelper(this);   
  3.        billdb.FirstStart();   
  4.        billdb.close();   
  5. }  

       下面我們給出BilldbHelper.java 代碼:

Java代碼
  1. package com.cola.ui;   
  2. import android.content.Context;   
  3. import android.database.Cursor;   
  4. import android.database.sqlite.SQLiteDatabase;   
  5. import android.util.Log;   
  6. /**  
  7.  * Provides access to a database of notes. Each note has a title, the note  
  8.  * itself, a creation date and a modified data.  
  9.  */  
  10. public class BilldbHelper {   
  11.     private static final String TAG = "Cola_BilldbHelper";   
  12.     private static final String DATABASE_NAME = "cola.db";     
  13.        
  14.     SQLiteDatabase db;   
  15.     Context context;   
  16.        
  17.     BilldbHelper(Context _context) {   
  18.         context=_context;   
  19.         db=context.openOrCreateDatabase(DATABASE_NAME, 0, null);   //創建數據庫   
  20.         Log.v(TAG,"db path="+db.getPath());   
  21.     }   
  22.        
  23.     public void CreateTable_acctitem() {   
  24.         try{   
  25.             db.execSQL("CREATE TABLE acctitem (" //創建賬目表   
  26.                     + "ID INTEGER PRIMARY KEY,"  
  27.                     + "PID integer,"  
  28.                     + "NAME TEXT,"  
  29.                     + "TYPE INTEGER"                   
  30.                     + ");");   
  31.             Log.v("cola","Create Table acctitem ok");   
  32.         }catch(Exception e){   
  33.             Log.v("cola","Create Table acctitem err,table exists.");   
  34.         }   
  35.     }   
  36.        
  37.     public void CreateTable_bills() {   
  38.         try{   
  39.             db.execSQL("CREATE TABLE bills ("  
  40.                     + "ID INTEGER PRIMARY KEY,"  
  41.                     + "fee integer,"  
  42.                     + "userid integer,"  
  43.                     + "sdate TEXT,"  
  44.                     + "stime TEXT,"  
  45.                     + "desc TEXT"                   
  46.                     + ");");   
  47.             Log.v("cola","Create Table acctitem ok");   
  48.         }catch(Exception e){   
  49.             Log.v("cola","Create Table acctitem err,table exists.");   
  50.         }   
  51.     }   
  52.        
  53.     public void CreateTable_colaconfig() {   
  54.         try{   
  55.             db.execSQL("CREATE TABLE colaconfig ("  
  56.                     + "ID INTEGER PRIMARY KEY,"  
  57.                     + "NAME TEXT"               
  58.                     + ");");   
  59.             Log.v("cola","Create Table colaconfig ok");   
  60.         }catch(Exception e){   
  61.             Log.v("cola","Create Table acctitem err,table exists.");   
  62.         }   
  63.     }   
  64.        
  65.     public void InitAcctitem() {   
  66.            
  67.         db.execSQL("insert into acctitem values (100,0,'收入',0)");   
  68.         db.execSQL("insert into acctitem values (100100,100,'工資',0)");   
  69.         db.execSQL("insert into acctitem values (200,0,'支出',1)");   
  70.         db.execSQL("insert into acctitem values (200100,200,'生活用品',1)");   
  71.         db.execSQL("insert into acctitem values (200101,200,'水電煤氣費',1)");   
  72.         db.execSQL("insert into acctitem values (200103,200,'汽油費',1)");   
  73.         Log.v("cola","insert into ok");   
  74.            
  75.     }   
  76.        
  77.        
  78.     public void QueryTable_acctitem(){   
  79.            
  80.     }   
  81.        
  82.     public void FirstStart(){   
  83.       //如果是第一次啟動,就不存在colaconfig這張表.   
  84.         try{   
  85.             String col[] = {"type", "name" };   
  86.             Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null);   
  87.             int n=c.getCount();   
  88.             if (c.getCount()==0){   
  89.                 CreateTable_acctitem();   
  90.                 CreateTable_colaconfig();   
  91.                 CreateTable_bills();   
  92.                 InitAcctitem();   
  93.                    
  94.             }   
  95.                
  96.             Log.v("cola","c.getCount="+n+"");   
  97.            
  98.                
  99.                
  100.         }catch(Exception e){   
  101.             Log.v("cola","e="+e.getMessage());   
  102.         }          
  103.            
  104.     }      
  105.        
  106.     public void close(){   
  107.         db.close();   
  108.     }   
  109. }  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved