Android数据存储之SQLite DataBases

   把结构化或者需要重复使用的数据保存在数据库中是个不错的主意,如联系人数据、媒体信息、短信等,Android中使用SQLite来作为数据库储存。

定义Schema 和 Contract 

     SQL数据库一个主要的原则就是建立Scheme(规则),用来说明数据库是怎么组织的。通常我们用一个结构类(Contract)来明确的说明数据库的布局结构。

    一个好的方式是创建一个类用来表示你的数据库,这个类定义了你的数据库名称版本号等。然后为数据库中的每一个表格创建一个内部类,类中列举了该表格对应的全部字段名称。

    注意:你可以继承BaseColums接口来使你的内部类继承一个主键"_id",在Android的许多控件中必须有这个字段(ListView, GridView等)。

    下面是一个简单的例子,演示了数据库结构声明:

package com.ns.sqlite;

import android.net.Uri;
import android.provider.BaseColumns;

public final class NotesContract {
	
	public static final String SCHEME = "content";
	/*** The authority for the notes provider */
    public static final String AUTHORITY = "com.ns.note";
    /*** A content:// style uri to the authority for the notes provider */
    public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
	
	public NotesContract() {
	};
	
	public abstract static class Notes implements BaseColumns{
		// the table name
		public static final String TABLE_NAME = "notes";
		// name column
		public static final String NAME = "name";
		// year column
		public static final String YEAR = "year";
		// query uri
		public static final Uri CONTENT_URI = new Uri.Builder().scheme(SCHEME).authority(AUTHORITY).path(TABLE_NAME).build();
	}
}

使用SQLHelper创建数据库

    搞清楚数据库的结构后,我们就可以通过继承SQLiteOpenHelper来创建数据库了,我们需要关心的主要有onCreate()和onUpgrade方法,其中onCreate方法只有在数据库第一次被创建时才会调用,在这里我们应该完成表格的创建;onUpgrade方法是在数据库升级时调用的,在这里我们可以对数据库进行修改。

    示例代码如下:

package com.ns.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MaikuDBHelper extends SQLiteOpenHelper {

	private static final int DATABASE_VERSION = 1;
	private static final String DATABASE_NAME = "school.db";
	
	private static final String SQL_CREATE_STUDENT = "create table " + NotesContract.Notes.TABLE_NAME + " (" + 
													NotesContract.Notes._ID + " INTEGER PRIMARY KEY, " + 
													NotesContract.Notes.NAME + " TEXT, " + 
													NotesContract.Notes.YEAR + " TEXT)";
	
	/**
	 * constructor
	 * 
	 * @param context
	 *            Context object used for create database
	 */
	public MaikuDBHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(SQL_CREATE_STUDENT);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}
}
    有了SQLHelper类,我们就可以通过SQL Helper.getWritableDatabase() 获取一个可读可写的数据库实例,来对数据库做增、删、改操作;也可以过SQLHelpergetReadableDatabase()获取一个只读的数据库实例,来对数据库做查询操作。

    由于后面会讲ContentProvider的内容,所以对数据库直接增删改查的操作就不再赘述,详见官方文档:

    https://developer.android.com/training/basics/data-storage/databases.html#DbHelper

你可能感兴趣的:(Android数据存储之SQLite DataBases)