本节所讲内容为使用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'"nullnullnullnull);   
  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"nullnullnullnull);   
  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, 0null);   //创建数据库   
  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. }  

 

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/261.html
2012年11月3日
发布:鸡啄米 分类:Android开发实例 浏览: 评论:0