SqlLite的工具类SQLiteOpenHelper

两盒软妹~` 提交于 2020-04-17 03:59:32

【推荐阅读】微服务还能火多久?>>>

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





易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!