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

来源:互联网 发布:ps合成照片软件 编辑:程序博客网 时间:2024/04/28 23:45

关键字:android sdk 1.0 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

  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'"nullnullnullnull);
  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"nullnullnullnull);
  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'"nullnullnullnull);
  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. }

#2008-11-18 湖北武汉

 

原创粉丝点击