Android 实例-个人理财工具 之二 启动时初始化数据

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

  1. static       SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
  2. 打开数据库
  3. Cursor  query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
  4. 执行查询SQL
  5. void     execSQL(String sql)
  6. 执行非查询sql

sdk 1.0 关于cursor和sqlite的相关api对于前面的版本改变很多.

我觉得关键是没了query(String sql) 这个简单的方法了.很不爽.

 

不过如果你对新的query方法了解深入点,发现其实也就一样.

我们来看2个例子

  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();
  1. //执行多表查询
  2. //select fee,desc from acctite a,bills b where a.id=b.id 
  3. String col2[] = { "fee" "desc"  };
  4.             Cursor c2 =db.query( "acctitem a,bills b" , col,  "a.id=b.id" null null null null );
  5.              int  n2=c2.getCount();       
  6.             Log.v( "cola" , "c2.getCount=" +n2+ "" );
  7.             
  8.             c2.moveToFirst(); 
  9.              int  k = 0;
  10.                  while (!c2.isAfterLast()){
  11.                 String ss = c2.getString(0) + ", " + c2.getString(1);              
  12.                 c2.moveToNext(); 
  13.                 
  14.                 Log.v( "cola" , "ss=" +ss+ "" );
  15.             }

 现在来看看我们如何在这个理财工具里面应用它.

我们需要在程序的第一次启动时,创建数据库,然后把基本的表创建好,并且初始化好账目表.

对于上一篇中的initapp方法 ,我们需要改造成

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

下面我们给出BilldbHelper.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. }

你可能感兴趣的:(sql,理财,android,sqlite,Symbian)