package com.nononsenseapps.notepad.database; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Database handler, SQLite wrapper and ORM layer. * */ public class DatabaseHandler extends SQLiteOpenHelper { // All Static variables // Database Version private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "SampleDB"; private final Context context; private static DatabaseHandler instance = null; public synchronized static DatabaseHandler getInstance(Context context) { if (instance == null) instance = new DatabaseHandler(context.getApplicationContext()); return instance; } public DatabaseHandler(Context context) { super(context.getApplicationContext(), DATABASE_NAME, null, DATABASE_VERSION); this.context = context.getApplicationContext(); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); if (!db.isReadOnly()) { // Enable foreign key constraints // This line requires android16 // db.setForeignKeyConstraintsEnabled(true); // This line works everywhere though db.execSQL("PRAGMA foreign_keys=ON;"); // Create temporary triggers and views DatabaseTriggers.createTemp(db); DatabaseViews.createTemp(db); } } @Override public synchronized void onCreate(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + taskviewItem.TABLE_NAME); db.execSQL(taskviewItem.CREATE_TABLE); // Create Triggers and Views DatabaseTriggers.create(db); DatabaseViews.create(db); } // Upgrading database @Override public synchronized void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Try to drop and recreate. You should do something clever here onCreate(db); } // Convenience methods public synchronized boolean putItem(final DBItem item) { boolean success = false; int result = 0; final SQLiteDatabase db = this.getWritableDatabase(); final ContentValues values = item.getContent(); if (item.getId() > -1) { result += db.update(item.getTableName(), values, DBItem.COL_ID + " IS ?", new String[] { String.valueOf(item.getId()) }); } // Update failed or wasn't possible, insert instead if (result < 1) { final long id = db.insert(item.getTableName(), null, values); if (id > 0) { item.setId(id); success = true; } } else { success = true; } if (success) { item.notifyProvider(context); } return success; } public synchronized int deleteItem(DBItem item) { final SQLiteDatabase db = this.getWritableDatabase(); final int result = db.delete(item.getTableName(), DBItem.COL_ID + " IS ?", new String[] { Long.toString(item.getId()) }); if (result > 0) { item.notifyProvider(context); } return result; } public synchronized Cursor gettaskviewItemCursor(final long id) { final SQLiteDatabase db = this.getReadableDatabase(); final Cursor cursor = db.query(taskviewItem.TABLE_NAME, taskviewItem.FIELDS, taskviewItem.COL_ID + " IS ?", new String[] { String.valueOf(id) }, null, null, null, null); return cursor; } public synchronized taskviewItem gettaskviewItem(final long id) { final Cursor cursor = gettaskviewItemCursor(id); final taskviewItem result; if (cursor.moveToFirst()) { result = new taskviewItem(cursor); } else { result = null; } cursor.close(); return result; } public synchronized Cursor getAlltaskviewItemsCursor(final String selection, final String[] args, final String sortOrder) { final SQLiteDatabase db = this.getReadableDatabase(); final Cursor cursor = db.query(taskviewItem.TABLE_NAME, taskviewItem.FIELDS, selection, args, null, null, sortOrder, null); return cursor; } public synchronized List<taskviewItem> getAlltaskviewItems(final String selection, final String[] args, final String sortOrder) { final List<taskviewItem> result = new ArrayList<taskviewItem>(); final Cursor cursor = getAlltaskviewItemsCursor(selection, args, sortOrder); while (cursor.moveToNext()) { taskviewItem q = new taskviewItem(cursor); result.add(q); } cursor.close(); return result; } }