編輯:關於Android編程
Android項目開發過程中經常使用到SQLite數據對數據進行存儲,每個app都會有各自的數據DB,以及各種表項。這就意味著每次進行app開發都要編寫數據庫以及表項的創建代碼,而這些建庫建表代碼量往往不少,但是大多雷同,只是具體數據不一樣。僅僅拷貝後,替換都覺得麻煩。
為何不將建庫建表封裝起來呢?下次建庫或者建表時只用配置對應的數據庫名,表名以及表屬性字段即可。
1,建庫建表
簡單來說SQLite建表就是利用SQLiteDatabase獲取DBOpenHelper 來執行相應的建表SQL語句即可。SQLiteDatabase對象容易獲取,建庫只用一條拼接後的SQL建庫一句即可,而一個庫中可以存在多張表,每張表的建表語句有些微的不同(應為表字段有差異),故建表語句數對應了需要創建的表數。下面在代碼中體現與說明建庫建表過程。
package com.ws.coyc.wsnote.SQLiteHelper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import com.ws.coyc.wsnote.SQLiteHelper.Utils.l; import java.io.File; import java.io.IOException; import java.util.ArrayList; /** * Created by coyc on 16-8-23. * before use the SDK you should do SQLiteManager.init(); * then you can create table by SQLiteManager.crateTable(); */ public class SQLiteManager { /* member */ // SQLite public SQLiteDatabase db;//數據庫操作對象 private Context context; //上下文 private DBOpenHelper dbOpenHelper;//建表所需的幫助類(不懂的另外百度) private class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase _db) { int size = tables.size();//獲取當前需要建表的數量 for(int i = 0;iprivate ArrayList tables = new ArrayList<>();//該庫中表對象列表 /* fun */ //constrat public SQLiteManager() { } //init 初始化建庫工作,傳入庫名 public void init(Context context,String DB_name) { tables.clear(); this.context = context; this.DB_NAME = DB_name; } private static SQLiteManager instance = null; public static SQLiteManager getInstance()//單例模式 方便外部調用 { if(instance == null) { synchronized (SQLiteManager.class) { if(instance == null) { instance = new SQLiteManager(); } } } return instance; } //open 做數據庫操作之前都要調用open方法 public void open() { dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION); try { db = dbOpenHelper.getWritableDatabase(); } catch (SQLiteException ex) { ex.printStackTrace(); exceptionHandler(); } db.beginTransaction(); } /** * 數據庫文件損壞刪除異常處理 * */ private void exceptionHandler() { if(db == null) { return; } File file = new File(db.getPath()); if (!file.exists()) { try { if (file.createNewFile()) { open(); } } catch (IOException e) { e.printStackTrace(); } } } //close 長時間不適用數據庫可執行close方法關閉數據庫 public void close() { db.setTransactionSuccessful(); db.endTransaction(); if (db != null) { db.close(); db = null; } } //create table 注冊表 外界任何想在該庫下創建的表都必須注冊 注冊後tables列表會增加,這回作用到建表時SQL語句的生成 public void registerTable(String table_name, ArrayList - items) { Table table = new Table(table_name,"_id",items); tables.add(table); } //兩種不同的注冊方式 建議使用第二種方式進行注冊,因為第二種方式的表對象是外界傳入的,外界可以利用該對象進行更多的操作。詳情見下 public void registerTable(Table table) { tables.add(table); } // get table create sql by items 建表語句拼接代碼 遍歷tables列表,由於每個表又可以有多個字段,故字段類型不同又有對應的語句區別。 private static String getTableCreateSQLString(Table table) { String sql = "create table "+table.table_name;//表名 下面依次是“主鍵”+“item1”+“item2”+.....+"item n" 拼接代碼原理不熟的百度能搜出一大把,這裡只是稍微換了一種形式的寫法。 sql += "("+table.keyItem+" integer primary key autoincrement"; int size = table.items.size(); for(int i = 0;i
1. 為何要開啟多進程為何開啟android應用要開啟多進程,主要有以下幾點:單進程所分配的內存不夠,需要更多的內存。在早期android系統只為一個單進程的應用分配了1
正文 1 Started Service介紹 Started Service,即被啟動的服務。它是2種常見服務之一,另一種是Bo
在這裡,總結一下loading進度條的使用簡單總結一下。一、說起進度條,必須說說條形進度條,經常都會使用到嘛,特別是下載文件進度等等,還有像騰訊QQ安裝進度條一樣,有個進
前置內容:Callable、Future、FutureTask Executor子類的execute方法接收一個Runnable作為參數,會在新線程中執行Ru