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.关于获取数据库:
getWritableDatabase();
getReadableDatabase();
两方法都可以获取一个用于操作数据库的SQLiteDatabase实例。当调用getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version),
如果数据库不存在,Android系统会自动生成一个数据库,这里的String name就是数据库名。
2.关于onCreat方法:
onCreate()方法在初次生成数据库时才会被调用,就是在getWritableDatabase()打开数据库后立即调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据
3.关于onUpgrade方法:
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);
在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,可以认为这个方法基本不用。
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。