Slide 1

Slide 1 text

SQLite Provider: A simplification of database access David Gonzalez

Slide 2

Slide 2 text

Content Providers Managers of structured data Abstract underlying data storage Allow external access to data

Slide 3

Slide 3 text

Manage connection to data source

Slide 4

Slide 4 text

Easy access to data

Slide 5

Slide 5 text

Implicit intents

Slide 6

Slide 6 text

Loader callbacks

Slide 7

Slide 7 text

Provide data to external apps

Slide 8

Slide 8 text

PROBLEMS — And we had to fix them

Slide 9

Slide 9 text

Boilerplate code

Slide 10

Slide 10 text

DB versioning

Slide 11

Slide 11 text

JSON to SQL mapping

Slide 12

Slide 12 text

Create the database public ExampleDatabase(Context context, CursorFactory factory, int version) { super(context, DATABASE_NAME, factory, version); } @Override public void onCreate(SQLiteDatabase db) { createDatabase(db); }

Slide 13

Slide 13 text

protected void createDatabase(SQLiteDatabase db) { final String articleTable = "CREATE TABLE articles" // + " ('" // + _id + "' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, '" // + title + "' TEXT, '" // + content + "' TEXT, '" // + timestamp + "' TIMESTAMP NOT NULL );"; db.execSQL(articleTable); @Override public void onCreate(SQLiteDatabase db) { createDatabase(db); }

Slide 14

Slide 14 text

Upgrade it @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion == 0) { db.execSQL("DROP TABLE article"); createDatabase(db); } }

Slide 15

Slide 15 text

Upgrade it ContentResolver resolver = getContentResolver(); String[] projection = new String[] {UserDictionary.Words._ID, UserDictionary.Words.WORD}; String selectionClause = UserDictionary.Words.WORD + " = ?"; String[] selectionArgs = new String[] {"Android"}; String sortOrder = UserDictionary.Words.WORD + " ASC”; Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, projection, selectionClause, selectionArgs, sortOrder);

Slide 16

Slide 16 text

Our solution https://github.com/novoda/SQLiteProvider