Android下SQLite3数据库操作笔记(二)之-SQLiteOpenHelper

在前面使用SQLite3的时候,并没有留意到有SQLiteOpenHelper这个类,所以只好在Activity里面去创建和维护数据库跟数据表的创建。

但是,现在有了SQLiteOpenHelper这个类,就可以把数据库和数据表,以及一些初始化的数据的维护跟Activity分开了。。。


数据库和数据表结构的创建,是只需要执行一次的,而打开数据库获取数据库相应的SQLiteDatabase操作类则有可能是每次运行程序都需要执行的,如何把这两个步骤操作合理的放到一个辅助类里面呢?SQLiteOpenHelper!木错!就是这个类,只需要继承这个类,调用构造函数SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)然后重写onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)这两个方法即可(不过好像我只是使用了onCreate...)。

下面说一下这个类的大概原理,假设你的SQLiteHelper继承于SQLiteOpenHelper类,调用SQLiteOpenHelper的构造函数并且实现了onCreate和断onUpgrade,当你在程序中调用getWritableDatabase()方法的时候,会自动去检查你的databases目录,如果里面不存在你需要打开的数据库文件,则会自动调用你所写的方法onCreate,然后返回你所创建的数据库表象,如果已经存在则会直接返回该数据库的表象。这样,我们初始化的数据库表,跟默认数据就可以放到onCreate函数里面去实现。。。


继承的类构造函数里面必须调用父类(SQLiteOpenHelper)的构造函数SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)。

context是为打开创建数据库库用的,name是数据库的文件名称,factory设置为空使用默认的,version是创建或打开的数据库的版本号,这个必须大于等于1

如果这一次的version版本和上一次打开的version不一致的时候,SQLiteOpenHelper就会自动调用onUpgrade方法。。

对了,在Activity中,如果打开了数据库,一定要记得关闭!!!


测试SQLiteOpenHelper的一个代码框架,

SQLiteHelper.java

package com.Yao_GUET.test;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * SQLite3数据库辅助类
 * @author Yao.GUET
 * blog: http://blog.csdn.net/Yao_GUET
 * date: 2011-07-06
 */

public class SQLiteHelper extends SQLiteOpenHelper {
	private final static String TAG = "SQLiteHelper";
	
	public SQLiteHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		Log.e(TAG, "SQLitehelper onCreate!");
		try {
			db.execSQL("Create TABLE  Data( " +
					"ID integer Primary Key AUTOINCREMENT, " +
					"UserName varchar(50) " +
					")");
			Log.e(TAG, "createDataTable OK!");
		} catch (SQLException se) {
			se.printStackTrace();
		}
	}

	@Override
	public void onOpen(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		Log.e(TAG, "SQLiteHelper on Open!");
		super.onOpen(db);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		Log.e(TAG, "SQLitehelper onUpgrade!");
	}

}

测试Activity

SQLiteHelperTest.java

package com.Yao_GUET.test;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Button;
import android.widget.TextView;

public class SQLiteHelperTest extends Activity {
	private final static String TAG = "SQLiteHelperTest";
	
	private SQLiteHelper sqlHelper;
	private SQLiteDatabase db;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sqlitehelper_test);
		
		sqlHelper = new SQLiteHelper(this, "test2.db", null, 2);
		db = sqlHelper.getWritableDatabase();
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		Log.e(TAG, "onDestroy!");
		if (db != null)
			db.close();
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.e(TAG, "onPause");
		super.onPause();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一.创建一个DataBaseHelper DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDataBase对象的时候onCreate 、创建一个实体person类并且给字段和封装 三、创建一个业务类对SQL的CRUD操作 1.getWritableDatabase()和getReadableDatabase()的区别 ,两个方法都可以获取一个用于操作数据库SQLiteDatabase实例 2.execSQL(增,删,改都是这个方法)和close();android内部有缓存可关闭也不关闭也行,查询rawQuery是方法 3.在分页有到Cursor(游标)取游标下一个值cursor.moveToNext(),用游标对象接数据 "select * from person limit ?,?" person不能加上where 关键字 4.在删除注意:sb.deleteCharAt(sb.length() - 1); 四、AndroidCRUD业务对SQLite的CRUD操作 1.ContentValues对象的使用 2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般设置为局部对象 */ 六、AndroidManifest.xml的配置 <!-- 配置用户类库android.test.runner测试 --> package jll.sqlitedb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 * 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 */ public class DataBaseHelper extends SQLiteOpenHelper { // 给一个默认的SQLite数据库名 private static final String DataBaseName = "SQLite_DB"; private static final int VERSION = 2; // 在SQLiteOpenHelper的子类当中,必须要有的构造函数 public DataBaseHelper(Context context, String name, CursorFacto

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值