編輯:關於Android編程
關於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開發之 SwipeRefreshLayout
SwipeRefreshLayout概述 用戶通過手勢或者點擊某個按鈕實現內容視圖的刷新,布局裡加入SwipeRefreshLayout嵌套一個子視圖如ListView、
一起學android之磨刀不誤砍柴工(6)
菜單包括選項菜單(OptionMenu)、上下文菜單(ContextMenu)、子菜單(SubMenu). 創建子菜單(SubMenu)的步驟: 1、重寫Activity
Android ViewPager無限循環實現底部小圓點動態滑動
頁面拖動到最後一頁 再向下滑動回復到 第一頁,第一頁向前滑動回到 最後一頁同時,底部紅色小圓點隨著頁面的滑動距離比例隨時改變位置布局:<?xml versi
使用surfaceview實現直播中的點贊效果
直播功能現在已經是一個很熱門的功能了,很多應用都會涉及到直播模塊,比如 花椒 NOW 還有辣媽幫。。等,最近因為項目需要也加入了直播功能。直播中有一個點贊的效果 ,今天我