package me.ele.demo.provider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import java.util.HashMap;
public class StudentProvider extends ContentProvider {
private static final String TAG = StudentProvider.class.getSimpleName();
private static final String DB_NAME = "demo.db";
private static final String DB_STUDENT_TABLE = "tb_student";
private static final int DB_VERSION = 1;
private static final HashMap<String, String> articleProjectionMap;
private static final String DB_CREATE = "create table " + DB_STUDENT_TABLE +
" (" + Student.ID + " integer primary key, " +
Student.NAME + " text not null, " +
Student.GENDER + " integer)";
static {
articleProjectionMap = new HashMap<>();
articleProjectionMap.put(Student.ID, Student.ID);
articleProjectionMap.put(Student.NAME, Student.NAME);
articleProjectionMap.put(Student.GENDER, Student.GENDER);
}
private DBHelper dbHelper;
@Override
public boolean onCreate() {
Log.d(TAG, "onCreate: ");
dbHelper = new DBHelper(getContext(), DB_NAME, null, DB_VERSION);
insertStudent(new Student(0, "stu1", 0));
insertStudent(new Student(1, "stu2", 0));
insertStudent(new Student(2, "stu3", 1));
return true;
}
private void insertStudent(Student student) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(Student.NAME, student.name);
values.put(Student.GENDER, student.gender);
db.insert(DB_STUDENT_TABLE, null, values);
}
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
Log.d(TAG, "query: " + uri);
SQLiteDatabase db = dbHelper.getReadableDatabase();
SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();
sqlBuilder.setTables(DB_STUDENT_TABLE);
sqlBuilder.setProjectionMap(articleProjectionMap);
return sqlBuilder.query(db, projection, selection, selectionArgs, null, null,
TextUtils.isEmpty(sortOrder) ? Student.DEFAULT_SORT_ORDER : sortOrder, null);
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
throw new UnsupportedOperationException("do not support insert op yet.");
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
public static class Student {
public static final String ID = "_id";
public static final String NAME = "_name";
public static final String GENDER = "_gender";
public static final String DEFAULT_SORT_ORDER = "_id asc";
public int id;
public String name;
public int gender; // 0=male, 1=female
public Student(int gender, String name, int id) {
this.gender = gender;
this.name = name;
this.id = id;
}
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DB_STUDENT_TABLE);
onCreate(db);
}
}
}