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

 更新时间:2016年08月30日 09:59:48   投稿:lqh  
本文主要介绍 Android 使用SQLite实现启动时初始化数据,这里对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代码

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

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

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

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

       实例代码

       我们来看两个例子。

Java代码

//执行select type,name from sqlite_master where name='colaconfig' 
String col[] = {"type", "name" }; 
 Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null); 
 int n=c.getCount(); 
//执行多表查询 
//select fee,desc from acctite a,bills b where a.id=b.id 
String col2[] = {"fee", "desc" }; 
Cursor c2 =db.query("acctitem a,bills b", col, "a.id=b.id", null, null, null, null); 
int n2=c2.getCount(); 
Log.v("cola","c2.getCount="+n2+""); 
 
c2.moveToFirst(); 
int k = 0; 
while(!c2.isAfterLast()){ 
 String ss = c2.getString(0) +", "+ c2.getString(1);  
 c2.moveToNext(); 
  
 Log.v("cola","ss="+ss+""); 
} 

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

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

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

Java代码

public void initApp(){ 
 BilldbHelper billdb=new BilldbHelper(this); 
 billdb.FirstStart(); 
 billdb.close(); 
} 

       下面我们给出BilldbHelper.java 代码:

Java代码

package com.cola.ui; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 
/** 
 * Provides access to a database of notes. Each note has a title, the note 
 * itself, a creation date and a modified data. 
 */ 
public class BilldbHelper { 
 private static final String TAG = "Cola_BilldbHelper"; 
 private static final String DATABASE_NAME = "cola.db"; 
 
 SQLiteDatabase db; 
 Context context; 
 
 BilldbHelper(Context _context) { 
 context=_context; 
 db=context.openOrCreateDatabase(DATABASE_NAME, 0, null); //创建数据库 
 Log.v(TAG,"db path="+db.getPath()); 
 } 
 
 public void CreateTable_acctitem() { 
 try{ 
 db.execSQL("CREATE TABLE acctitem (" //创建账目表 
  + "ID INTEGER PRIMARY KEY," 
  + "PID integer," 
  + "NAME TEXT," 
  + "TYPE INTEGER"  
  + ");"); 
 Log.v("cola","Create Table acctitem ok"); 
 }catch(Exception e){ 
 Log.v("cola","Create Table acctitem err,table exists."); 
 } 
 } 
 
 public void CreateTable_bills() { 
 try{ 
 db.execSQL("CREATE TABLE bills (" 
  + "ID INTEGER PRIMARY KEY," 
  + "fee integer," 
  + "userid integer," 
  + "sdate TEXT," 
  + "stime TEXT," 
  + "desc TEXT"  
  + ");"); 
 Log.v("cola","Create Table acctitem ok"); 
 }catch(Exception e){ 
 Log.v("cola","Create Table acctitem err,table exists."); 
 } 
 } 
 
 public void CreateTable_colaconfig() { 
 try{ 
 db.execSQL("CREATE TABLE colaconfig (" 
  + "ID INTEGER PRIMARY KEY," 
  + "NAME TEXT" 
  + ");"); 
 Log.v("cola","Create Table colaconfig ok"); 
 }catch(Exception e){ 
 Log.v("cola","Create Table acctitem err,table exists."); 
 } 
 } 
 
 public void InitAcctitem() { 
 
 db.execSQL("insert into acctitem values (100,0,'收入',0)"); 
 db.execSQL("insert into acctitem values (100100,100,'工资',0)"); 
 db.execSQL("insert into acctitem values (200,0,'支出',1)"); 
 db.execSQL("insert into acctitem values (200100,200,'生活用品',1)"); 
 db.execSQL("insert into acctitem values (200101,200,'水电煤气费',1)"); 
 db.execSQL("insert into acctitem values (200103,200,'汽油费',1)"); 
 Log.v("cola","insert into ok"); 
 
 } 
 
 
 public void QueryTable_acctitem(){ 
 
 } 
 
 public void FirstStart(){ 
 //如果是第一次启动,就不存在colaconfig这张表. 
 try{ 
 String col[] = {"type", "name" }; 
 Cursor c =db.query("sqlite_master", col, "name='colaconfig'", null, null, null, null); 
 int n=c.getCount(); 
 if (c.getCount()==0){ 
 CreateTable_acctitem(); 
 CreateTable_colaconfig(); 
 CreateTable_bills(); 
 InitAcctitem(); 
  
 } 
 
 Log.v("cola","c.getCount="+n+""); 
 
 
 
 }catch(Exception e){ 
 Log.v("cola","e="+e.getMessage()); 
 } 
 
 } 
 
 public void close(){ 
 db.close(); 
 } 
} 

        系列文章:

                       Android 个人理财工具六:显示账单明细 下

                       Android 个人理财工具五:显示账单明细 上

                       Android 个人理财工具四:添加账单页面 下

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

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

                       Android 个人理财工具一:项目概述与启动界面的实现

       以上就是对Android SQL的讲解及实例,后续继续做个人理财项目,谢谢大家支持!

相关文章

  • Android自定义控件横向柱状统计图

    Android自定义控件横向柱状统计图

    这篇文章主要为大家详细介绍了Android自定义控件横向柱状统计图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Android性能优化以及数据优化方法

    Android性能优化以及数据优化方法

    我和大家之前一起探讨了在Android中对SQLite数据库的操作优化细节。今天谈谈Android性能数据优化方法,需要的朋友可以参考下
    2016-05-05
  • android仿QQ个人主页下拉回弹效果

    android仿QQ个人主页下拉回弹效果

    这篇文章主要为大家详细介绍了android仿QQ个人主页下拉回弹效果的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Kotlin基础学习之循环和异常

    Kotlin基础学习之循环和异常

    最近在学习kotlin,Kotlin 是一个基于 JVM 的新的编程语言,下面这篇文章主要给大家介绍了关于Kotlin基础学习之循环和异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 浅谈Android应用的内存优化及Handler的内存泄漏问题

    浅谈Android应用的内存优化及Handler的内存泄漏问题

    这篇文章主要介绍了Android应用的内存优化及Handler的内存泄漏问题,文中对Activity无法被回收而造成的内存泄漏给出了通常的解决方案,需要的朋友可以参考下
    2016-02-02
  • android使用TextView实现跑马灯效果

    android使用TextView实现跑马灯效果

    这篇文章主要为大家详细介绍了android使用TextView实现跑马灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Android如何集成极光短信验证

    Android如何集成极光短信验证

    这篇文章主要为大家详细介绍了Android如何集成极光短信验证,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android之EditText控制禁止输入空格和回车

    Android之EditText控制禁止输入空格和回车

    本文主要介绍了Android中使用EditText控制禁止输入空格和回车的实现代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Android View的事件分发机制

    Android View的事件分发机制

    本文主要介绍了Android View的事件分发机制。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android超简单悬浮窗使用教程

    Android超简单悬浮窗使用教程

    这篇文章主要介绍了Android超简单悬浮窗使用教程,本文分步骤给大家介绍了使用前需要依赖库,给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09

最新评论