`
jandroid
  • 浏览: 1933758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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. }

1
0
分享到:
评论

相关推荐

    Android 个人理财工具二:使用SQLite实现启动时初始化数据

    在Android开发中,SQLite是一个非常重要的组件,它作为一个轻量级的...对于个人理财工具这样的应用,初始化数据可能包括预设的账户类型、预算类别或者示例账单,确保用户在初次使用时即可开始记录和管理财务状况。

    Android 个人理财工具三:添加账单页面 上

    总之,实现Android个人理财工具的账单页面涉及数据库设计、界面布局和数据适配器的使用。通过精心设计和代码实现,用户可以方便地添加和管理他们的财务记录,从而提高个人财务管理的效率。在后续的部分,开发者可能...

    安卓程序启动时的初始化

    在安卓程序开发中,启动时的初始化是一个至关重要的环节,它涉及到应用的生命周期管理、资源加载、数据预处理等多个方面。下面将详细讲解这个过程。 首先,安卓应用程序的启动流程通常从`AndroidManifest.xml`文件...

    安卓架构小工具app startup的使用-------让初始化代码更简单(csdn)————程序.pdf

    App Startup 是 AndroidX 提供的一个轻量级框架,用于在应用程序启动时优雅地管理组件的初始化工作。这个框架的主要目的是简化初始化代码,提高性能,并确保初始化顺序的一致性。以下是对 App Startup 框架的详细...

    Android应用小实例--炫酷计时器

    在这个“Android应用小实例--炫酷计时器”中,我们将深入探讨如何在Android应用中创建并定制一个功能丰富的计时器。 计时器组件在Android SDK中是`android.widget.Chronometer`类,它类似于一个倒计时定时器,但...

    android ocr-tess实例源码

    初始化完成后,可以调用`recognize()`方法对图像进行识别。 3. 图像预处理: 在识别前,通常需要对图像进行预处理,包括灰度化、二值化、噪声去除等,以提高识别准确率。这些步骤可以通过OpenCV等图像处理库实现,...

    解决ORA-01033 ORACLE 正在初始化或关闭

    ORA-01033错误的全称是“ORA-01033: ORACLE 正在初始化或关闭”,它表明Oracle实例可能没有正确启动或关闭,导致后续的操作无法正常进行。 #### 错误原因分析 ORA-01033错误出现的原因可能有多种,包括但不限于...

    Android推送遇到的问题--app关闭后,点击通知后点击通知后app未初始化的问题

    然而,当用户在app完全关闭的状态下点击推送通知时,可能会遇到应用没有正确初始化的问题,导致通知的处理出现问题。这个问题涉及到Android的生命周期管理、服务、广播接收器以及通知的点击处理等多个方面。 首先,...

    android 实例源码 集合

    存储和检索本地数据时,SQLite是常用的选择。实例源码会教授如何创建数据库,执行SQL查询,以及如何使用ContentProvider进行数据共享。 9. **网络编程**: 使用HttpURLConnection、OkHttp或者Volley进行网络请求...

    Android-RealmAssetHelper-用于将Realm.IO集成在Android应用工具类

    3. **初始化Realm**:在应用程序启动时,需要初始化Realm配置,并设置数据存储位置。 RealmAssetHelper就是为了解决这个初始化过程中的一个特定问题。 4. **使用Realm**:通过Realm实例进行数据读写操作。可以创建、...

    Android代码-Android SQLite 数据库工具集合

    轻量的 Android SQLite 数据库工具集合, 适合用SQLite做一些数据存储的项目. 根据Java实体自动生成数据库表. 不需要书写任何SQL语句即可实现对数据库的 创表 增 删 查 改 分页 操作. 所有的操作方法都是静态的...

    Android串口开发(android-serialport-api开发)工程实例

    Android串口开发(android-serialport-api开发)工程实例。SerialPortUtil里面有我常用的转换工具(16进制字符串转二进制字符串并补位、二进制字符串转16进制字符串并补位)

    Android实例三:学习Service

    1. onCreate(): 当Service首次创建时调用,用于初始化工作。 2. onStartCommand(): 当通过startService()方法启动Service时调用,返回一个int值表示Service的启动策略。 3. onBind(): 当其他组件(如Activity)通过...

    android-sdk-windows.rar

    4. 配置AVD(Android Virtual Device):通过AVD Manager创建模拟器实例,选择设备配置、系统镜像和硬件选项,以便在Windows上运行Android应用。 三、使用Android SDK进行开发 1. 创建项目:使用Android Studio,...

    Android应用启动界面的实例

    在`SplashActivity`的`onCreate()`方法中,启动后台任务,例如初始化数据、检查更新等。同时,设置一个合理的延时时间,确保用户能看到启动界面,但又不会过长导致等待感。 ```java new Handler().postDelayed(new...

    Android Bluetooth初始化代码解析

    Android蓝牙初始化涉及多个层次的处理,从驱动层、框架层到应用层都有相应的组件和接口参与整个流程。在深入解析Android蓝牙初始化代码之前,先来了解一下蓝牙的整体架构。 蓝牙整体架构包括蓝牙系统apk、JNI、...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android 使用服务读取串口数据实例

    android 使用服务读取串口数据实例,读取的数据实时写到txt文本。串口读写的库的地址:https://code.google.com/p/android-serialport-api/。我的博客:http://blog.csdn.net/qq_16064871。

    android 判断应用是否第一次启动

    在Android开发中,判断应用是否第一次启动是一个常见的需求,这通常用于执行一些初始化操作,比如引导界面、数据初始化或者设置默认值。以下是如何实现这一功能的详细步骤和相关知识点: 一、SharedPreferences ...

    android实例开发完全手册

    《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...

Global site tag (gtag.js) - Google Analytics