SQLite数据库创建、更新入门

简述:

sqliteOpenHelper 是一个抽象类,就是说如果我们想要使用它的话,就需要创建一个自己的帮助类去继承它。
sqliteOpenHelper 中有两个抽象方法,分别是
onCreate()和 onUpgrade(),
我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。

sqliteOpenHelper 中还有两个非常重要的实例方法
getReadableDatabase() 和getWritableDatabase()。
这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库) ,
并返回一个可对数据库进行读写操作的对象。
不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而 getWritableDatabase()方法则将出现异常。

使用sqlite数据库步骤:

一、创建自己的类,继承sqliteOpenHelper,重写构造方法,onCreate()和 onUpgrade()。
sqliteOpenHelper 中有两个构造方法可供重写, 一般使用参数少一点的那个构造方法即可。
public MyDatabaseHelper(Context context,String name,CursorFactoryfactory,int version) {
super(context,name,factory,version);
mContext = context;
}

这个构造方法中接收四个参数,
1)、第一个参数是上下文 Context,有它才能对数据库进行操作。
2)、第二个参数是数据库名,创建数据库时的名称
3)、第三个参数查询数据的时候返回一个自定义的 Cursor,一般都是传入 null。
4)、第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。

二、实例化继承了sqliteOpenHelper抽象类的类,调用它的 getReadableDatabase()或 getWritableDatabase()方法
构建出sqliteOpenHelper 的实例之后,再调用它的 getReadableDatabase()或 getWritableDatabase()方法就能够创建数据库了,
数据库文件会存放在/data/data/<package name>/databases/目录下】
此时,重写sqliteOpenHelper抽象类的onCreate()方法会得到执行,所以通常会在这里去处理一些创建表的逻辑。


代码

MysqLiteOpenHelper.java中的代码:

public class MysqLiteOpenHelper extends sqliteOpenHelper {

	/**
	 * 创建数据库表book语句 解析: 1)integer 表示整型, 2)real 表示浮点型, 3)text 表示文本类型, 4)blob
	 * 表示二进制类型。 5)primary key 将 id 列设为主键,并用 autoincrement关键字表示 id 列是自增长的。
	 */
	public static final String CREATE_BOOK = "create table book ("
			+ "id integer primary key autoincrement," + "author text,"
			+ "price real," + "pages integer," + "name text)";

	/**
	 * 创建数据库表Category 语句
	 */
	public static final String CREATE_CATEGORY = "create table Category ("
			+ "id integer primary key autoincrement," + "category_name text,"
			+ "category_code integer)";

	/**
	 * 上下文对象
	 */
	private Context context;

	/**
	 * 重写sqliteOpenHelper的构造方法,这个构造方法中接收四个参数:
	 * 
	 * @param context
	 *            (上下文 Context,有它才能对数据库进行操作)
	 * @param name
	 *            (是数据库名,创建数据库时的名称)
	 * @param factory
	 *            (查询数据的时候返回一个自定义的 Cursor,一般都是传入 null)
	 * @param version
	 *            (当前数据库的版本号,可用于对数据库进行升级操作)
	 */
	public MysqLiteOpenHelper(Context context,CursorFactory factory,int version) {
		super(context,version);
		this.context = context;
	}

	/**
	 * 实例化sqliteOpenHelper类之后 ,调用getReadableDatabase()或 getWritableDatabase()方法。
	 * 如果是要创建的数据库不存在,就执行oncreate()方法,创建数据库; 如果已经存在要创建的数据库,则不执行oncreate()方法
	 */
	@Override
	public void onCreate(sqliteDatabase db) {
		db.execsql(CREATE_BOOK);// 执行sql语句
		Toast.makeText(context,"数据库创建成功",1).show();
	}

	/**
	 * 对数据库进行升级,注意: switch 中每一个 case的最后都是没有使用 break ,
	 * 这是为了保证在跨版本升级的时候,每一次的数据库修改都能被全部执行到
	 */
	@Override
	public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
		switch (oldVersion) {
		case 1:
			db.execsql(CREATE_CATEGORY);
			Toast.makeText(context,"更新数据库,旧版本是" + oldVersion,1).show();
		case 2:
			Toast.makeText(context,"更新数据库,旧版本是" + oldVersion,1).show();
		default:
		}
	}

}

MainActivity.java中的代码
public class MainActivity extends Activity {

	private MysqLiteOpenHelper helper;
	private Button create_sqliteDataBase;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/**
		 * 实例化MysqLiteOpenHelper,指定数据库名:Book.db,和版本号 1
		 * 如果此次执行的版本号,比上次的版本号大(如,上次是1.这次是2),则执行MysqLiteOpenHelper类中的重写的onUpgrade()方法
		 */
		helper = new MysqLiteOpenHelper(this,"Book.db",null,1);
		create_sqliteDataBase = (Button) findViewById(R.id.create_sqliteDataBase);
		create_sqliteDataBase.setonClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// Todo Auto-generated method stub
				/**
				 * 当第一次点击 按钮时,会检测 到当前程序中并没有 Book.db这个数据库,
				 * 于是会创建该数据库调用 MysqLiteOpenHelper中的 onCreate()方法,这样 Book表也就得到了创建。
				 *  再次点击 按钮时,会发现此时已经存在 BookStore.db 数据库了,因此不会重复创建一次。
				 */
				helper.getWritableDatabase();
			}
		});
	}

}


下载链接

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能