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。
来源:oschina
链接:https://my.oschina.net/u/555061/blog/488497