package com.zhxjz.map.util; import java.util.List; import org.apache.commons.lang.math.NumberUtils; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import com.zhxjz.map.Config; /** * 操做SqlLite的工具類 * * @author caozj * */ public class DBUtil extends SQLiteOpenHelper { private SQLiteDatabase db; public DBUtil(Context context) { this(context, Config.get("db"), null, NumberUtils.toInt(Config .get("dbversion"))); } public DBUtil(Context context, String name) { this(context, name, null, NumberUtils.toInt(Config.get("dbversion"))); } public DBUtil(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); db = this.getWritableDatabase(); } @Override public void onCreate(SQLiteDatabase arg0) { } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } public SQLiteDatabase getDB() { return db; } public void closeDB() { db.close(); } public void execSQL(String sql, Object... args) { db.execSQL(sql, args); } public Cursor query(String sql, String... args) { return db.rawQuery(sql, args); } public void batchInsert(List<String> sqllist) { db.beginTransaction(); try { // 批量處理操做 // do something db.execSQL("SQL語句", new Object[] {}); db.execSQL("SQL語句", new Object[] {}); // 設置事務標誌爲成功,當結束事務時就會提交事務 db.setTransactionSuccessful(); } catch (Exception e) { } finally { // 結束事務 db.endTransaction(); } } }
1.關於獲取數據庫:java
getWritableDatabase();android
getReadableDatabase();sql
兩方法均可以獲取一個用於操做數據庫的SQLiteDatabase實例。當調用getWritableDatabase()或者getReadableDatabase()方法獲取用於操做數據庫的SQLiteDatabase實例的時候,android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version),數據庫
若是數據庫不存在,Android系統會自動生成一個數據庫,這裏的String name就是數據庫名。apache
2.關於onCreat方法:ide
onCreate()方法在初次生成數據庫時纔會被調用,就是在getWritableDatabase()打開數據庫後當即調用,在onCreate()方法裏能夠生成數據庫表結構及添加一些應用使用到的初始化數據工具
3.關於onUpgrade方法:
this
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);spa
在數據庫的版本發生變化時會被調用,通常在軟件升級時才需改變版本號,能夠認爲這個方法基本不用。.net
4.db.execSQL(sql) // 執行任何SQL語句
5.db.rawQuery(sql, selectionArgs)// 執行SQL語句的時候帶參數
6.關於事務處理:
使用SQLiteDatabase的beginTransaction()方法能夠開啓一個事務,程序執行到endTransaction() 方法時會檢查事務的標誌是否爲成功,若是程序執行到endTransaction()以前調用了setTransactionSuccessful() 方法設置事務的標誌爲成功則提交事務,若是沒有調用setTransactionSuccessful() 方法則回滾事務。事務處理應用:不少時候咱們須要批量的向Sqlite中插入大量數據時,單獨的使用添加方法致使應用響應緩慢, 由於sqlite插入數據的時候默認一條語句就是一個事務,有多少條數據就有多少次磁盤操做。如初始8000條記錄也就是要8000次讀寫磁盤操做。同時也是爲了保證數據的一致性,避免出現數據缺失等狀況http://blog.csdn.net/luckyjda/article/details/8103372。