Android数据库设计

一、SQLITE数据库字段类型

  NULL: 表示一个NULL值

  INTEGER: 用来存储一个整数,根据大小可以使用1,2,3,4,6,8位来存储.

  REAL: IEEE 浮点数

  TEXT: 按照字符串来存储

  BLOB: 按照二进制值存储,不做任何改变.

      id自增长字段:id integer primary key autoincrement

二、SQLITE的CRUD操作

  1. insert操作

         
           
    ContentValues values = new ContentValues();
    values.put(
    " name " , person.getName());
    database.insert(
    " person " , null , values);
       
  2. update操作

         
           
    ContentValues values = new ContentValues();
    values.put(
    " name " , person.getName());
    database.update(
    " person " , values, " personid=? " , new String[]{String.valueOf(person.getPersonId())});
     
  3. select操作

         
           
    Cursor cursor = database.query( " person " , null , null , null , null , null , null , offerset + " , " + maxResult);
    while (cursor.moveToNext()){
    int personIda = cursor.getInt(cursor.getColumnIndex( " personid " ));
    String name
    = cursor.getString(cursor.getColumnIndex( " name " ));
    Person person
    = new Person(personIda,name);
    persons.add(person);
    }

  4. delete操作
         
           
    database.delete( " person " , " personid=? " , new String[]{String.valueOf(personId)});

三、数据库版本问题

为防止应用的数据库版本变更,每次发布的应用都应指定相应的数据库版本;

如果数据库结构有变动,那么针对版本的变更进行相关升级操作

四、数据库事务操作

database.beginTransaction();//开启事务
database.setTransactionSuccessful();//当操作成功的时候把事务状态改为成功状态
database.endTransaction();//提交事务  会根据事务的状态来提交事务还是回滚事务

附wordpress的数据库类源码

package org.wordpress.android;



import java.text.StringCharacterIterator;

import java.util.HashMap;

import java.util.Vector;



import android.content.ContentValues;

import android.content.Context;

import android.content.Intent;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;



public class WordPressDB {



	private static final int DATABASE_VERSION = 9;

	

	private static final String CREATE_TABLE_SETTINGS = "create table if not exists accounts (id integer primary key autoincrement, "

			+ "url text, blogName text, username text, password text, imagePlacement text, centerThumbnail boolean, fullSizeImage boolean, maxImageWidth text, maxImageWidthId integer, lastCommentId integer, runService boolean);";

	private static final String CREATE_TABLE_EULA = "create table if not exists eula (id integer primary key autoincrement, "

		+ "read integer not null, interval text, statsdate integer);";

	private static final String SETTINGS_TABLE = "accounts";

	private static final String DATABASE_NAME = "wordpress";

	

	//localDrafts

	private static final String CREATE_TABLE_LOCALDRAFTS = "create table if not exists localdrafts (id integer primary key autoincrement, blogID text, uploaded boolean, title text,content text, picturePaths text, tags text, categories text, publish boolean);";

	private static final String CREATE_TABLE_LOCALPAGEDRAFTS = "create table if not exists localpagedrafts (id integer primary key autoincrement, blogID text, uploaded boolean, title text,content text, picturePaths text, publish boolean);";



	private static final String LOCALDRAFTS_TABLE = "localdrafts";

	private static final String LOCALPAGEDRAFTS_TABLE = "localpagedrafts";

	

	private static final String ADD_LATITUDE = "alter table localdrafts add latitude real";

	private static final String ADD_LONGITUDE = "alter table localdrafts add longitude real";

	

	private static final String ADD_STATUS = "alter table localdrafts add status text";

	private static final String ADD_PAGE_STATUS = "alter table localpagedrafts add status text";

	

	//postStore

	private static final String CREATE_TABLE_POSTSTORE = "create table if not exists poststore (blogID text, postID text, title text, postDate text, postDateFormatted text);";

	private static final String CREATE_TABLE_PAGES = "create table if not exists pages (blogID text, pageID text, parentID text, title text, pageDate text, pageDateFormatted text);";

	private static final String CREATE_TABLE_COMMENTS = "create table if not exists comments (blogID text, postID text, iCommentID integer, author text, comment text, commentDate text, commentDateFormatted text, status text, url text, email text, postTitle text);";

	private static final String POSTSTORE_TABLE = "poststore";

	private static final String PAGES_TABLE = "pages";

	private static final String COMMENTS_TABLE = "comments";

	

	//eula

	private static final String EULA_TABLE = "eula";

	

	//categories

	private static final String CREATE_TABLE_CATEGORIES = "create table if not exists cats (id integer primary key autoincrement, "

		+ "blog_id text, wp_id integer, category_name text not null);";

	private static final String CATEGORIES_TABLE = "cats";

	

	//for capturing blogID, trac ticket #

	private static final String ADD_BLOGID = "alter table accounts add blogId integer;";

	private static final String UPDATE_BLOGID = "update accounts set blogId = 1;"; //set them all to 1 if updating

	

	//add notification options

	private static final String ADD_SOUND_OPTION = "alter table eula add sound boolean default false;";

	private static final String ADD_VIBRATE_OPTION = "alter table eula add vibrate boolean default false;";

	private static final String ADD_LIGHT_OPTION = "alter table eula add light boolean default false;";

	private static final String ADD_TAGLINE = "alter table eula add tagline text;";

	private static final String ADD_TAGLINE_FLAG = "alter table eula add tagline_flag boolean default false;";

	

	//for capturing blogID, trac ticket #

	private static final String ADD_LOCATION_FLAG = "alter table accounts add location boolean default false;";

	

	//fix commentID data type

	private static final String ADD_NEW_COMMENT_ID = "ALTER TABLE comments ADD iCommentID INTEGER;";

	private static final String COPY_COMMENT_IDS = "UPDATE comments SET iCommentID = commentID;";

	

	//add wordpress.com stats login info

	private static final String ADD_DOTCOM_USERNAME = "alter table accounts add dotcom_username text;";

	private static final String ADD_DOTCOM_PASSWORD = "alter table accounts add dotcom_password text;";

	private static final String ADD_API_KEY = "alter table accounts add api_key text;";

	private static final String ADD_API_BLOGID = "alter table accounts add api_blogid text;";

	

	//add wordpress.com flag and version column

	private static final String ADD_DOTCOM_FLAG = "alter table accounts add dotcomFlag boolean default false;";

	private static final String ADD_WP_VERSION = "alter table accounts add wpVersion text;";

	

	//add new unique identifier to no longer use device imei

	private static final String ADD_UNIQUE_ID = "alter table eula add uuid text;";

	

	//add new table for QuickPress homescreen shortcuts

	private static final String CREATE_TABLE_QUICKPRESS_SHORTCUTS = "create table if not exists quickpress_shortcuts (id integer primary key autoincrement, accountId text, name text);";

	private static final String QUICKPRESS_SHORTCUTS_TABLE = "quickpress_shortcuts";

	

	private SQLiteDatabase db;



	public WordPressDB(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		//db.execSQL("DROP TABLE IF EXISTS "+ SETTINGS_TABLE);

		db.execSQL(CREATE_TABLE_SETTINGS);

		//added eula to this class to fix trac #49

		db.execSQL(CREATE_TABLE_EULA);

		//int test = db.getVersion();



		db.execSQL(CREATE_TABLE_LOCALDRAFTS);

		db.execSQL(CREATE_TABLE_LOCALPAGEDRAFTS);

		

		db.execSQL(CREATE_TABLE_POSTSTORE);

		db.execSQL(CREATE_TABLE_PAGES);

		db.execSQL(CREATE_TABLE_COMMENTS);

		

		db.execSQL(CREATE_TABLE_CATEGORIES);

		

		db.execSQL(CREATE_TABLE_QUICKPRESS_SHORTCUTS);

		

		try {

			if (db.getVersion() < 1){ //user is new install

				db.execSQL(ADD_BLOGID);

				db.execSQL(UPDATE_BLOGID);

				db.execSQL(ADD_SOUND_OPTION);

				db.execSQL(ADD_VIBRATE_OPTION);

				db.execSQL(ADD_LIGHT_OPTION);

				db.execSQL(ADD_LOCATION_FLAG);

				db.execSQL(ADD_LATITUDE);

				db.execSQL(ADD_LONGITUDE);

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION); //set to latest revision

			}

			else if (db.getVersion() == 1){ //v1.0 or v1.0.1

				db.execSQL(ADD_BLOGID);

				db.execSQL(UPDATE_BLOGID);

				db.execSQL(ADD_SOUND_OPTION);

				db.execSQL(ADD_VIBRATE_OPTION);

				db.execSQL(ADD_LIGHT_OPTION);

				db.execSQL(ADD_LOCATION_FLAG);

				db.execSQL(ADD_LATITUDE);

				db.execSQL(ADD_LONGITUDE);

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION); //set to latest revision

			}

			else if (db.getVersion()  == 2){

				db.execSQL(ADD_SOUND_OPTION);

				db.execSQL(ADD_VIBRATE_OPTION);

				db.execSQL(ADD_LIGHT_OPTION);

				db.execSQL(ADD_LOCATION_FLAG);

				db.execSQL(ADD_LATITUDE);

				db.execSQL(ADD_LONGITUDE);

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION); 

			}

			else if (db.getVersion() == 3){

				db.execSQL(ADD_LOCATION_FLAG);

				db.execSQL(ADD_LATITUDE);

				db.execSQL(ADD_LONGITUDE);

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION); 

			}

			else if (db.getVersion() == 4){

				db.execSQL(ADD_LOCATION_FLAG);

				db.execSQL(ADD_LATITUDE);

				db.execSQL(ADD_LONGITUDE);

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION);

			}

			else if (db.getVersion() == 5){

				db.execSQL(ADD_TAGLINE);

				db.execSQL(ADD_TAGLINE_FLAG);

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION);

			}

			else if (db.getVersion() == 6){

				db.execSQL(ADD_NEW_COMMENT_ID);

				db.execSQL(COPY_COMMENT_IDS);

				db.execSQL(ADD_DOTCOM_USERNAME);

				db.execSQL(ADD_DOTCOM_PASSWORD);

				db.execSQL(ADD_API_KEY);

				db.execSQL(ADD_API_BLOGID);

				db.execSQL(ADD_DOTCOM_FLAG);

				db.execSQL(ADD_WP_VERSION);

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION);

			}

			else if (db.getVersion() == 7){

				db.execSQL(ADD_UNIQUE_ID);

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION);

			}

			else if (db.getVersion() == 8){

				db.execSQL(ADD_STATUS);

				db.execSQL(ADD_PAGE_STATUS);

				db.setVersion(DATABASE_VERSION);

			}

		} catch (SQLException e) {

			e.printStackTrace();

		}

		db.close();

		

	}



	

	public boolean addAccount(Context ctx, String url, String blogName, String username, String password, String imagePlacement, boolean centerThumbnail, boolean fullSizeImage, String maxImageWidth, int maxImageWidthId, boolean runService, int blogId, boolean wpcom, String wpVersion) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("url", url);

		values.put("blogName", blogName);

		values.put("username", username);

		values.put("password", password);

		values.put("imagePlacement", imagePlacement);

		values.put("centerThumbnail", centerThumbnail);

		values.put("fullSizeImage", fullSizeImage);

		values.put("maxImageWidth", maxImageWidth);

		values.put("maxImageWidthId", maxImageWidthId);

		values.put("runService", runService);

		values.put("blogId", blogId);

		values.put("dotcomFlag", wpcom);

		values.put("wpVersion", wpVersion);

		boolean returnValue = db.insert(SETTINGS_TABLE, null, values) > 0;

		db.close();

		return (returnValue);

	}	

	public Vector<HashMap<String, Object>> getAccounts(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "id", "blogName", "username", "runService", "blogId", "url"}, null, null, null, null, null);

		String id;

		String blogName, username, url;

		int blogId;

		int runService;

		int numRows = c.getCount();

		c.moveToFirst();

		Vector<HashMap<String, Object>> accounts = new Vector<HashMap<String, Object>>();

		for (int i = 0; i < numRows; i++) {

			

			id = c.getString(0);

			blogName = c.getString(1);

			username = c.getString(2);

			runService = c.getInt(3);

			blogId = c.getInt(4);

			url = c.getString(5);

			if (id != null)

			{	

				HashMap<String, Object> thisHash = new HashMap<String, Object>();

				

				thisHash.put("id", id);

				thisHash.put("blogName", blogName);

				thisHash.put("username", username);

				thisHash.put("runService", runService);

				thisHash.put("blogId", blogId);

				thisHash.put("url", url);

				accounts.add(thisHash);

			}

			c.moveToNext();

		}

		c.close();

		db.close();

		

		return accounts;

	}

	

	public boolean checkMatch(Context ctx, String blogName, String blogURL, String username) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query(SETTINGS_TABLE, new String[] {"blogName", "url"}, "blogName='" + addSlashes(blogName) + "' AND url='" + addSlashes(blogURL) + "'" + " AND username='" + username + "'", null, null, null, null);

		int numRows = c.getCount();

		boolean result = false;

		

		if (numRows > 0){

			//this account is already saved, yo!

			result = true;

		}

		

		c.close();

		db.close();

		

		return result;

	}

	

	public static String addSlashes( String text ){    	

        final StringBuffer sb                   = new StringBuffer( text.length() * 2 );

        final StringCharacterIterator iterator  = new StringCharacterIterator( text );

        

  	  	char character = iterator.current();

        

        while( character != StringCharacterIterator.DONE ){

            if( character == '"' ) sb.append( "\\\"" );

            else if( character == '\'' ) sb.append( "\'\'" );

            else if( character == '\\' ) sb.append( "\\\\" );

            else if( character == '\n' ) sb.append( "\\n" );

            else if( character == '{'  ) sb.append( "\\{" );

            else if( character == '}'  ) sb.append( "\\}" );

            else sb.append( character );

            

            character = iterator.next();

        }

        

        return sb.toString();

    }



	public boolean saveSettings(Context ctx, String id, String url, String username, String password, String imagePlacement, boolean centerThumbnail, boolean fullSizeImage, String maxImageWidth, int maxImageWidthId, boolean location, boolean isWPCom, String originalUsername) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("url", url);

		values.put("username", username);

		values.put("password", password);

		values.put("imagePlacement", imagePlacement);

		values.put("centerThumbnail", centerThumbnail);

		values.put("fullSizeImage", fullSizeImage);

		values.put("maxImageWidth", maxImageWidth);

		values.put("maxImageWidthId", maxImageWidthId);

		values.put("location", location);

		boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;

		if (isWPCom){

			//update the login for other wordpress.com accounts

			ContentValues userPass = new ContentValues();

			userPass.put("username", username);

			userPass.put("password", password);

			returnValue = db.update(SETTINGS_TABLE, userPass, "username=\"" + originalUsername + "\" AND dotcomFlag=1" , null) > 0;

		}

		db.close();

		return (returnValue);

	}

	

	public boolean deleteAccount(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		int rowsAffected = db.delete(SETTINGS_TABLE, "id=" + id, null);

		

		boolean returnValue = false;

		if (rowsAffected > 0){

			returnValue = true;

		}

		

		// delete QuickPress homescreen shortcuts connected with this account

	    Vector<HashMap<String, Object>> shortcuts = this.getQuickPressShortcuts(ctx, id);

	    for(int i = 0; i < shortcuts.size(); i++) {

	    	HashMap<String, Object> shortcutHash = shortcuts.get(i);

	    	

	    	Intent shortcutIntent = new Intent();

	    	shortcutIntent.setClassName(editPost.class.getPackage().getName(), editPost.class.getName());

	    	shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

	    	shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

	    	shortcutIntent.setAction(Intent.ACTION_VIEW); 

	    	Intent broadcastShortcutIntent = new Intent();

	    	broadcastShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

	    	broadcastShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutHash.get("name").toString());

	    	broadcastShortcutIntent.putExtra("duplicate", false);

	    	broadcastShortcutIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");

	    	ctx.sendBroadcast(broadcastShortcutIntent);

	    	

	    	deleteQuickPressShortcut(ctx, shortcutHash.get("id").toString());

	    }

	    

	    db.close();

		return (returnValue);

	}



	public Vector<Object> loadSettings(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "url", "blogName", "username", "password", "imagePlacement", "centerThumbnail", "fullSizeImage", "maxImageWidth", "maxImageWidthId", "runService", "blogId", "location", "dotcomFlag"}, "id=" + id, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();



		Vector<Object> returnVector = new Vector<Object>();

		if (numRows > 0){

			if (c.getString(0) != null){

			returnVector.add(c.getString(0));

			returnVector.add(c.getString(1));

			returnVector.add(c.getString(2));

			returnVector.add(c.getString(3));

			returnVector.add(c.getString(4));

			returnVector.add(c.getInt(5));

			returnVector.add(c.getString(6));

			returnVector.add(c.getString(7));

			returnVector.add(c.getInt(8));

			returnVector.add(c.getInt(9));

			returnVector.add(c.getInt(10));

			returnVector.add(c.getInt(11));

			returnVector.add(c.getInt(12));

			}

			else

			{

				returnVector = null;

			}

		}

		c.close();

		db.close();

		

		return returnVector;

	}



	public Vector<String> loadStatsLogin(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "dotcom_username", "dotcom_password"}, "id=" + id, null, null, null, null);

		

		c.moveToFirst();



		Vector<String> returnVector = new Vector<String>();

		if (c.getString(0) != null){

		returnVector.add(c.getString(0));

		returnVector.add(c.getString(1));

		}

		else

		{

			returnVector = null;

		}

		c.close();

		db.close();

		

		return returnVector;

	}

	

	public boolean saveStatsLogin(Context ctx, String id, String statsUsername, String statsPassword) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("dotcom_username", statsUsername);

		values.put("dotcom_password", statsPassword);

		boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;

		db.close();

		

		return (returnValue);

		

	}

	

	public Vector<String> loadAPIData(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "api_key", "api_blogid"}, "id=" + id, null, null, null, null);



		c.moveToFirst();



		Vector<String> returnVector = new Vector<String>();

		if (c.getString(0) != null){

		returnVector.add(c.getString(0));

		returnVector.add(c.getString(1));

		}

		else

		{

			returnVector = null;

		}

		c.close();

		db.close();

		

		return returnVector;

	}

	

	public boolean saveAPIData(Context ctx, String id, String apiKey, String apiBlogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("api_key", apiKey);

		values.put("api_blogid", apiBlogID);

		boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;

		db.close();

		

		return (returnValue);

		

	}



	public int getLatestCommentID(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		int returnInt = 0;

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "lastCommentId"  }, "id=" + id, null, null, null, null);

		c.moveToFirst();

		if (c.getString(0) != null){

			returnInt = Integer.valueOf(c.getString(0));

		}

		c.close();

		db.close();

		return returnInt;

	}





	public boolean updateLatestCommentID(Context ctx, String id, Integer newCommentID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("lastCommentId", newCommentID);



		boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;

		db.close();

		return (returnValue);

		

	}





	public Vector<Integer> getNotificationAccounts(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = null;

		try {

			c = db.query(SETTINGS_TABLE, new String[] { "id" }, "runService=1", null, null, null, null);

		} catch (Exception e) {

			e.printStackTrace();

		}

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		Vector<Integer> returnVector = new Vector<Integer>();

		for (int i = 0; i < numRows; ++i) {

			int tempID = c.getInt(0);	

			returnVector.add(tempID);

			c.moveToNext();

		}

		

		c.close();

		db.close();

		return returnVector;

	}





	public String getAccountName(Context ctx, String accountID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		String accountName = "";

		Cursor c = db.query(SETTINGS_TABLE, new String[] { "blogName"  }, "id=" + accountID, null, null, null, null);

		c.moveToFirst();

		if (c.getString(0) != null){

			accountName = c.getString(0);

		}

		c.close();

		db.close();

		return accountName;

	}





	public void updateNotificationFlag(Context ctx, int id, boolean flag) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		int iFlag = 0;

		if (flag){

			iFlag = 1;

		}

		values.put("runService", iFlag);



		boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + String.valueOf(id), null) > 0;

		if(returnValue){

		}

		db.close();

		

	}

	

	public void updateNotificationSettings(Context ctx, String interval, boolean sound, boolean vibrate, boolean light, boolean tagline_flag, String tagline) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("interval", interval);

		values.put("sound", sound);

		values.put("vibrate", vibrate);

		values.put("light", light);

		values.put("tagline_flag", tagline_flag);

		values.put("tagline", tagline);



		boolean returnValue = db.update("eula", values, null, null) > 0;

		if (returnValue){};

		db.close();

		

	}

	

	public String getInterval(Context ctx) {

db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query("eula", new String[] { "interval" }, "id=0", null, null, null, null);

		int numRows = c.getCount();

		c.moveToFirst();

		String returnValue = "";

		if (numRows == 1){

			if (c.getString(0) != null){

			returnValue = c.getString(0);

			}

		}

		c.close();

		db.close();



		return returnValue;

		

	}

	

	public HashMap<String, Object> getNotificationOptions(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query("eula", new String[] { "id", "sound", "vibrate", "light", "tagline_flag", "tagline"}, "id=0", null, null, null, null);

		int sound, vibrate, light;

		String tagline;

		HashMap<String, Object> thisHash = new HashMap<String, Object>();

		int numRows = c.getCount();

		if (numRows >= 1){

		c.moveToFirst();

			

		sound = c.getInt(1);

		vibrate = c.getInt(2);

		light = c.getInt(3);

		tagline = c.getString(5);

		thisHash.put("sound", sound);

		thisHash.put("vibrate", vibrate);

		thisHash.put("light", light);

		thisHash.put("tagline_flag", c.getInt(4));

		if (tagline != null){

			thisHash.put("tagline", tagline);

		}

		else{

			thisHash.put("tagline", "");

		}

		

		

		}



		c.close();

		db.close();

		

		return thisHash;

	}

	

	//localDrafts

	public boolean saveLocalDraft(Context ctx, String blogID, String title, String content, String picturePaths, String tags, String categories, String status, Double latitude, Double longitude) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

			ContentValues values = new ContentValues();

			values.put("blogID", blogID);

			values.put("title", title);

			values.put("content", content);

			values.put("picturePaths", picturePaths);

			values.put("tags", tags);

			values.put("categories", categories);

			values.put("status", status);

			values.put("latitude", latitude);

			values.put("longitude", longitude);

			returnValue = db.insert(LOCALDRAFTS_TABLE, null, values) > 0;



		db.close();

		return (returnValue);

	}

	

	public boolean updateLocalDraft(Context ctx, String blogID, String postID, String title, String content, String picturePaths, String tags, String categories, String status, Double latitude, Double longitude) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

			ContentValues values = new ContentValues();

			values.put("blogID", blogID);

			values.put("title", title);

			values.put("content", content);

			values.put("picturePaths", picturePaths);

			values.put("tags", tags);

			values.put("categories", categories);

			values.put("status", status);

			values.put("latitude", latitude);

			values.put("longitude", longitude);

			returnValue = db.update(LOCALDRAFTS_TABLE, values, "id=" + postID, null) > 0;



		db.close();

		return (returnValue);

	}



	public Vector<HashMap<String, Object>> loadPosts(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] { "id", "title", "status", "uploaded"}, "blogID=" + blogID, null, null, null, "id desc");

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("id", c.getInt(0));

		returnHash.put("title", c.getString(1));

		returnHash.put("status", c.getString(2));

		returnHash.put("uploaded", c.getInt(3));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();



		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}

	

	public Vector<HashMap<String, Object>> loadPost(Context ctx, String postID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] { "title", "content", "picturePaths", "tags", "categories", "status", "latitude", "longitude"}, "id=" + postID, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("title", c.getString(0));

		returnHash.put("content", c.getString(1));

		returnHash.put("picturePaths", c.getString(2));

		returnHash.put("tags", c.getString(3));

		returnHash.put("categories", c.getString(4));

		returnHash.put("status", c.getString(5));

		returnHash.put("latitude", c.getDouble(6));

		returnHash.put("longitude", c.getDouble(7));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}



	public boolean deletePost(Context ctx, String postID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		boolean returnValue = false;



		int result = 0;

		result = db.delete(LOCALDRAFTS_TABLE, "id=" + postID, null);

		db.close();

		

		if (result == 1){

			returnValue = true;

		}

		

		return returnValue;

	}

	

	public boolean saveLocalPageDraft(Context ctx, String blogID, String title, String content, String picturePaths, String status) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

			ContentValues values = new ContentValues();

			values.put("blogID", blogID);

			values.put("title", title);

			values.put("content", content);

			values.put("picturePaths", picturePaths);

			values.put("status", status);

			returnValue = db.insert(LOCALPAGEDRAFTS_TABLE, null, values) > 0;



		db.close();

		return (returnValue);

	}

	

	public boolean updateLocalPageDraft(Context ctx, String blogID, String postID, String title, String content, String picturePaths, String status) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

			ContentValues values = new ContentValues();

			values.put("blogID", blogID);

			values.put("title", title);

			values.put("content", content);

			values.put("picturePaths", picturePaths);

			values.put("status", status);

			returnValue = db.update(LOCALPAGEDRAFTS_TABLE, values, "id=" + postID, null) > 0;



		db.close();

		return (returnValue);

	}

	

	public Vector<HashMap<String, Object>> loadPageDrafts(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] { "id", "title", "status", "uploaded"}, "blogID=" + blogID, null, null, null, "id desc");

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("id", c.getInt(0));

		returnHash.put("title", c.getString(1));

		returnHash.put("status", c.getString(2));

		returnHash.put("uploaded", c.getInt(3));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();



		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}

	

	public Vector<HashMap<String, Object>> loadPageDraft(Context ctx, String postID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] { "title", "content", "picturePaths", "status"}, "id=" + postID, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("title", c.getString(0));

		returnHash.put("content", c.getString(1));

		returnHash.put("picturePaths", c.getString(2));

		returnHash.put("status", c.getString(3));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}



	public boolean deletePageDraft(Context ctx, String postID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		boolean returnValue = false;



		int result = 0;

		result = db.delete(LOCALPAGEDRAFTS_TABLE, "id=" + postID, null);

		db.close();

		

		if (result == 1){

			returnValue = true;

		}

		

		return returnValue;

	}



	public int getLatestDraftID(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] {"id"}, "blogID=" + id, null, null, null, "id desc", "1");

		

		int latestID = -1;

		int numRows = c.getCount();

		if (numRows != 0){

			c.moveToFirst();

			latestID = c.getInt(0);

		}

		c.close();

		db.close();

		

		return latestID;

	}

	

	public int getLatestPageDraftID(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] {"id"}, "blogID=" + id, null, null, null, "id desc", "1");

		

		int latestID = -1;

		int numRows = c.getCount();

		if (numRows != 0){

			c.moveToFirst();

			latestID = c.getInt(0);

		}

		c.close();

		db.close();

		

		return latestID;

	}

	

	//postStore

	public boolean savePosts(Context ctx, Vector<?> postValues) {

		boolean returnValue = false;

		if (postValues.size() != 0)

		{

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		HashMap<?, ?> firstHash = (HashMap<?, ?>) postValues.get(0);

		String blogID = firstHash.get("blogID").toString();

		//delete existing values

		db.delete(POSTSTORE_TABLE, "blogID=" + blogID, null);



		for (int i = 0; i < postValues.size(); i++){

			ContentValues values = new ContentValues();

			HashMap<?, ?> thisHash = (HashMap<?, ?>) postValues.get(i);

			values.put("blogID", thisHash.get("blogID").toString());

			values.put("postID", thisHash.get("postID").toString());

			values.put("title", thisHash.get("title").toString());

			values.put("postDate", thisHash.get("postDate").toString());

			values.put("postDateFormatted", thisHash.get("postDateFormatted").toString());

			returnValue = db.insert(POSTSTORE_TABLE, null, values) > 0;

		}

		

		

		db.close();

		}

		return (returnValue);

	}



	public Vector<HashMap<String, String>> loadSavedPosts(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, String>> returnVector = new Vector<HashMap<String, String>>();

		Cursor c = db.query(POSTSTORE_TABLE, new String[] { "blogID", "postID", "title", "postDate", "postDateFormatted"}, "blogID=" + blogID, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, String> returnHash = new HashMap<String, String>();

		returnHash.put("blogID", c.getString(0));

		returnHash.put("postID", c.getString(1));

		returnHash.put("title", c.getString(2));

		returnHash.put("postDate", c.getString(3));

		returnHash.put("postDateFormatted", c.getString(4));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}



	public Vector<HashMap<String, String>> loadPages(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, String>> returnVector = new Vector<HashMap<String, String>>();

		Cursor c = db.query(PAGES_TABLE, new String[] { "blogID", "pageID", "title", "pageDate", "pageDateFormatted"}, "blogID=" + blogID, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		for (int i = 0; i < numRows; ++i) {

		if (c.getString(0) != null){

		HashMap<String, String> returnHash = new HashMap<String, String>();

		returnHash.put("blogID", c.getString(0));

		returnHash.put("pageID", c.getString(1));

		returnHash.put("title", c.getString(2));

		returnHash.put("pageDate", c.getString(3));

		returnHash.put("pageDateFormatted", c.getString(4));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}



	public boolean savePages(Context ctx, Vector<?> pageValues) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		HashMap<?, ?> firstHash = (HashMap<?, ?>) pageValues.get(0);

		String blogID = firstHash.get("blogID").toString();

		//delete existing values

		db.delete(PAGES_TABLE, "blogID=" + blogID, null);



		for (int i = 0; i < pageValues.size(); i++){

			ContentValues values = new ContentValues();

			HashMap<?, ?> thisHash = (HashMap<?, ?>) pageValues.get(i);

			values.put("blogID", thisHash.get("blogID").toString());

			values.put("pageID", thisHash.get("pageID").toString());

			values.put("parentID", thisHash.get("parentID").toString());

			values.put("title", thisHash.get("title").toString());

			values.put("pageDate", thisHash.get("pageDate").toString());

			values.put("pageDateFormatted", thisHash.get("pageDateFormatted").toString());

			returnValue = db.insert(PAGES_TABLE, null, values) > 0;

		}

		

		

		db.close();

		return (returnValue);

		

	}

	

	public Vector<HashMap<String, Object>> loadComments(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(COMMENTS_TABLE, new String[] { "blogID", "postID", "iCommentID", "author", "comment", "commentDate", "commentDateFormatted", "status", "url", "email", "postTitle"}, "blogID=" + blogID, null, null, null, null);

		

		int numRows = c.getCount();

		c.moveToFirst();

		

		HashMap<String, Object> numRecords = new HashMap<String, Object>();

		//add the number of stored records so the offset can be computed

		if (numRows > 0){

			numRecords.put("numRecords", numRows);

			returnVector.add(0, numRecords);

		}

		

		for (int i = 1; i < (numRows + 1); ++i) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("blogID", c.getString(0));

		returnHash.put("postID", c.getInt(1));

		returnHash.put("commentID", c.getInt(2));

		returnHash.put("author", c.getString(3));

		returnHash.put("comment", c.getString(4));

		returnHash.put("commentDate", c.getString(5));

		returnHash.put("commentDateFormatted", c.getString(6));

		returnHash.put("status", c.getString(7));

		returnHash.put("url", c.getString(8));

		returnHash.put("email", c.getString(9));

		returnHash.put("postTitle", c.getString(10));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}

	

	public Vector<HashMap<String, Object>> loadMoreComments(Context ctx, String blogID, int limit) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();

		Cursor c = db.query(COMMENTS_TABLE, new String[] { "blogID", "postID", "iCommentID", "author", "comment", "commentDate", "commentDateFormatted", "status", "url", "email", "postTitle"}, "blogID=" + blogID, null, null, null, "iCommentID ASC", String.valueOf(limit));

		int numRows = c.getCount();

		c.moveToFirst();

		

		//HashMap numRecords = new HashMap();

		//add the number of stored records so the offset can be computed

		/*if (numRows > 0){

			numRecords.put("numRecords", numRows);

			returnVector.add(0, numRecords);

		}*/

		for (int i = 0; i < numRows; i++) {

		if (c.getString(0) != null){

		HashMap<String, Object> returnHash = new HashMap<String, Object>();

		returnHash.put("blogID", c.getString(0));

		returnHash.put("postID", c.getInt(1));

		returnHash.put("commentID", c.getInt(2));

		returnHash.put("author", c.getString(3));

		returnHash.put("comment", c.getString(4));

		returnHash.put("commentDate", c.getString(5));

		returnHash.put("commentDateFormatted", c.getString(6));

		returnHash.put("status", c.getString(7));

		returnHash.put("url", c.getString(8));

		returnHash.put("email", c.getString(9));

		returnHash.put("postTitle", c.getString(10));

		returnVector.add(i, returnHash);

		}

		c.moveToNext();

		}

		c.close();

		db.close();

		

		if (numRows == 0){

			returnVector = null;

		}

		

		return returnVector;

	}



	public boolean saveComments(Context ctx, Vector<?> commentValues, boolean loadMore) {

		boolean returnValue = false;

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		HashMap<?, ?> firstHash = (HashMap<?, ?>) commentValues.get(0);

		String blogID = firstHash.get("blogID").toString();

		//delete existing values, if user hit refresh button

		if (!loadMore){

			db.delete(COMMENTS_TABLE, "blogID=" + blogID, null);

		}



		for (int i = 0; i < commentValues.size(); i++){

			ContentValues values = new ContentValues();

			HashMap<?, ?> thisHash = (HashMap<?, ?>) commentValues.get(i);

			values.put("blogID", thisHash.get("blogID").toString());

			values.put("postID", thisHash.get("postID").toString());

			values.put("iCommentID", thisHash.get("commentID").toString());

			values.put("author", thisHash.get("author").toString());

			values.put("comment", thisHash.get("comment").toString());

			values.put("commentDate", thisHash.get("commentDate").toString());

			values.put("commentDateFormatted", thisHash.get("commentDateFormatted").toString());

			values.put("status", thisHash.get("status").toString());

			values.put("url", thisHash.get("url").toString());

			values.put("email", thisHash.get("email").toString());

			values.put("postTitle", thisHash.get("postTitle").toString());

			returnValue = db.insert(COMMENTS_TABLE, null, values) > 0;

		}

		

		

		db.close();

		return (returnValue);

		

	}

	

	public void updateCommentStatus(Context ctx, String blogID, String id, String newStatus) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		ContentValues values = new ContentValues();

		values.put("status", newStatus);

		boolean returnValue = db.update(COMMENTS_TABLE, values, "blogID=" + blogID + " AND iCommentID=" + id, null) > 0;

		if (returnValue){};



	db.close();

		

	}



	public void clearPages(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		//delete existing values

		db.delete(PAGES_TABLE, "blogID=" + blogID, null);

		db.close();

	}



	public void clearPosts(Context ctx, String blogID) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		//delete existing values

		db.delete(POSTSTORE_TABLE, "blogID=" + blogID, null);

		db.close();

		

	}

	

	//eula table

	public boolean checkEULA(Context ctx){

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(EULA_TABLE, new String[] { "read" }, "id=0", null, null, null, null);

		int numRows = c.getCount();

		c.moveToFirst();

		boolean returnValue = false;

		if (numRows == 1){

			returnValue = (c.getInt(0) != 0);

		}

		c.close();

		db.close();

			

		return returnValue;

	}

	

	public void setEULA(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("id", 0);

		values.put("read", 1); //set that they've read the EULA

		boolean returnValue = db.insert(EULA_TABLE, null, values) > 0;

		if (returnValue){};

		db.close();



	}

	

	public void setStatsDate(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("statsdate", System.currentTimeMillis()); //set to current time



		boolean returnValue = db.update(EULA_TABLE, values, "id=0", null) > 0;

		if (returnValue){};

		

		db.close();

	}

	

	public long getStatsDate(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(EULA_TABLE, new String[] { "statsdate" }, "id=0", null, null, null, null);

		int numRows = c.getCount();

		c.moveToFirst();

		long returnValue = 0;

		if (numRows == 1){

			returnValue = c.getLong(0);

		}

		c.close();

		db.close();

		return returnValue;

	}

	

	//categories

	public boolean insertCategory(Context ctx, String id, int wp_id, String category_name) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("blog_id", id);

		values.put("wp_id", wp_id);

		values.put("category_name", category_name.toString());

		boolean returnValue = db.insert(CATEGORIES_TABLE, null, values) > 0;

		db.close();

		return (returnValue);

	}



	public Vector<String> loadCategories(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(CATEGORIES_TABLE, new String[] { "id", "wp_id", "category_name" }, "blog_id=" + id, null, null, null, null);

		int numRows = c.getCount();

		c.moveToFirst();

		Vector<String> returnVector = new Vector<String>();

		for (int i = 0; i < numRows; ++i) {

			String category_name = c.getString(2);

			if (category_name != null)

			{	

			returnVector.add(category_name);

			}

			c.moveToNext();

		}

		c.close();

		db.close();

		

		return returnVector;

	}

	

	public int getCategoryId(Context ctx, String id, String category){

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		

		Cursor c = db.query(CATEGORIES_TABLE, new String[] {"wp_id"}, "category_name=\"" + category + "\" AND blog_id=" + id, null, null, null, null);

		c.moveToFirst();

		int categoryID = 0;

		categoryID = c.getInt(0);

		db.close();

		return categoryID;

	}

	

	public void clearCategories(Context ctx, String id){

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		//clear out the table since we are refreshing the whole enchilada

		db.delete(CATEGORIES_TABLE, "blog_id=" + id, null);

		db.close();

	}

	

	//unique identifier queries

	public void updateUUID(Context ctx, String uuid) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("uuid", uuid);

		boolean returnValue = db.update("eula", values, null, null) > 0;

		if (returnValue){};

		db.close();

	}

	

	public String getUUID(Context ctx) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);		

		Cursor c = db.query("eula", new String[] { "uuid" }, "id=0", null, null, null, null);

		int numRows = c.getCount();

		c.moveToFirst();

		String returnValue = "";

		if (numRows == 1){

			if (c.getString(0) != null){

			returnValue = c.getString(0);

			}

		}

		c.close();

		db.close();



		return returnValue;

		

	}

	

	public boolean addQuickPressShortcut(Context ctx, String accountId, String name) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		ContentValues values = new ContentValues();

		values.put("accountId", accountId);

		values.put("name", name);

		boolean returnValue = db.insert(QUICKPRESS_SHORTCUTS_TABLE, null, values) > 0;

		db.close();

		return (returnValue);

	}

	

	public Vector<HashMap<String, Object>> getQuickPressShortcuts(Context ctx, String accountId) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		Cursor c = db.query(QUICKPRESS_SHORTCUTS_TABLE, new String[] { "id", "accountId", "name"}, "accountId = "+accountId, null, null, null, null);

		String id, name;

		int numRows = c.getCount();

		c.moveToFirst();

		Vector<HashMap<String, Object>> accounts = new Vector<HashMap<String, Object>>();

		for (int i = 0; i < numRows; i++) {

			

			id = c.getString(0);

			name = c.getString(2);

			if (id != null)

			{	

				HashMap<String, Object> thisHash = new HashMap<String, Object>();

				

				thisHash.put("id", id);

				thisHash.put("name", name);

				accounts.add(thisHash);

			}

			c.moveToNext();

		}

		c.close();

		db.close();

		

		return accounts;

	}

	

	public boolean deleteQuickPressShortcut(Context ctx, String id) {

		db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);

		int rowsAffected = db.delete(QUICKPRESS_SHORTCUTS_TABLE, "id=" + id, null);

		

		boolean returnValue = false;

		if (rowsAffected > 0){

			returnValue = true;

		}

	    

	    db.close();

		

		return (returnValue);

	}



}

package org.wordpress.android;

import java.text.StringCharacterIterator;
import java.util.HashMap;
import java.util.Vector;

import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class WordPressDB {

    private static final int DATABASE_VERSION = 9;
   
    private static final String CREATE_TABLE_SETTINGS = "create table if not exists accounts (id integer primary key autoincrement, "
            + "url text, blogName text, username text, password text, imagePlacement text, centerThumbnail boolean, fullSizeImage boolean, maxImageWidth text, maxImageWidthId integer, lastCommentId integer, runService boolean);";
    private static final String CREATE_TABLE_EULA = "create table if not exists eula (id integer primary key autoincrement, "
        + "read integer not null, interval text, statsdate integer);";
    private static final String SETTINGS_TABLE = "accounts";
    private static final String DATABASE_NAME = "wordpress";
   
    //localDrafts
    private static final String CREATE_TABLE_LOCALDRAFTS = "create table if not exists localdrafts (id integer primary key autoincrement, blogID text, uploaded boolean, title text,content text, picturePaths text, tags text, categories text, publish boolean);";
    private static final String CREATE_TABLE_LOCALPAGEDRAFTS = "create table if not exists localpagedrafts (id integer primary key autoincrement, blogID text, uploaded boolean, title text,content text, picturePaths text, publish boolean);";

    private static final String LOCALDRAFTS_TABLE = "localdrafts";
    private static final String LOCALPAGEDRAFTS_TABLE = "localpagedrafts";
   
    private static final String ADD_LATITUDE = "alter table localdrafts add latitude real";
    private static final String ADD_LONGITUDE = "alter table localdrafts add longitude real";
   
    private static final String ADD_STATUS = "alter table localdrafts add status text";
    private static final String ADD_PAGE_STATUS = "alter table localpagedrafts add status text";
   
    //postStore
    private static final String CREATE_TABLE_POSTSTORE = "create table if not exists poststore (blogID text, postID text, title text, postDate text, postDateFormatted text);";
    private static final String CREATE_TABLE_PAGES = "create table if not exists pages (blogID text, pageID text, parentID text, title text, pageDate text, pageDateFormatted text);";
    private static final String CREATE_TABLE_COMMENTS = "create table if not exists comments (blogID text, postID text, iCommentID integer, author text, comment text, commentDate text, commentDateFormatted text, status text, url text, email text, postTitle text);";
    private static final String POSTSTORE_TABLE = "poststore";
    private static final String PAGES_TABLE = "pages";
    private static final String COMMENTS_TABLE = "comments";
   
    //eula
    private static final String EULA_TABLE = "eula";
   
    //categories
    private static final String CREATE_TABLE_CATEGORIES = "create table if not exists cats (id integer primary key autoincrement, "
        + "blog_id text, wp_id integer, category_name text not null);";
    private static final String CATEGORIES_TABLE = "cats";
   
    //for capturing blogID, trac ticket #
    private static final String ADD_BLOGID = "alter table accounts add blogId integer;";
    private static final String UPDATE_BLOGID = "update accounts set blogId = 1;"; //set them all to 1 if updating
   
    //add notification options
    private static final String ADD_SOUND_OPTION = "alter table eula add sound boolean default false;";
    private static final String ADD_VIBRATE_OPTION = "alter table eula add vibrate boolean default false;";
    private static final String ADD_LIGHT_OPTION = "alter table eula add light boolean default false;";
    private static final String ADD_TAGLINE = "alter table eula add tagline text;";
    private static final String ADD_TAGLINE_FLAG = "alter table eula add tagline_flag boolean default false;";
   
    //for capturing blogID, trac ticket #
    private static final String ADD_LOCATION_FLAG = "alter table accounts add location boolean default false;";
   
    //fix commentID data type
    private static final String ADD_NEW_COMMENT_ID = "ALTER TABLE comments ADD iCommentID INTEGER;";
    private static final String COPY_COMMENT_IDS = "UPDATE comments SET iCommentID = commentID;";
   
    //add wordpress.com stats login info
    private static final String ADD_DOTCOM_USERNAME = "alter table accounts add dotcom_username text;";
    private static final String ADD_DOTCOM_PASSWORD = "alter table accounts add dotcom_password text;";
    private static final String ADD_API_KEY = "alter table accounts add api_key text;";
    private static final String ADD_API_BLOGID = "alter table accounts add api_blogid text;";
   
    //add wordpress.com flag and version column
    private static final String ADD_DOTCOM_FLAG = "alter table accounts add dotcomFlag boolean default false;";
    private static final String ADD_WP_VERSION = "alter table accounts add wpVersion text;";
   
    //add new unique identifier to no longer use device imei
    private static final String ADD_UNIQUE_ID = "alter table eula add uuid text;";
   
    //add new table for QuickPress homescreen shortcuts
    private static final String CREATE_TABLE_QUICKPRESS_SHORTCUTS = "create table if not exists quickpress_shortcuts (id integer primary key autoincrement, accountId text, name text);";
    private static final String QUICKPRESS_SHORTCUTS_TABLE = "quickpress_shortcuts";
   
    private SQLiteDatabase db;

    public WordPressDB(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        //db.execSQL("DROP TABLE IF EXISTS "+ SETTINGS_TABLE);
        db.execSQL(CREATE_TABLE_SETTINGS);
        //added eula to this class to fix trac #49
        db.execSQL(CREATE_TABLE_EULA);
        //int test = db.getVersion();

        db.execSQL(CREATE_TABLE_LOCALDRAFTS);
        db.execSQL(CREATE_TABLE_LOCALPAGEDRAFTS);
       
        db.execSQL(CREATE_TABLE_POSTSTORE);
        db.execSQL(CREATE_TABLE_PAGES);
        db.execSQL(CREATE_TABLE_COMMENTS);
       
        db.execSQL(CREATE_TABLE_CATEGORIES);
       
        db.execSQL(CREATE_TABLE_QUICKPRESS_SHORTCUTS);
       
        try {
            if (db.getVersion() < 1){ //user is new install
                db.execSQL(ADD_BLOGID);
                db.execSQL(UPDATE_BLOGID);
                db.execSQL(ADD_SOUND_OPTION);
                db.execSQL(ADD_VIBRATE_OPTION);
                db.execSQL(ADD_LIGHT_OPTION);
                db.execSQL(ADD_LOCATION_FLAG);
                db.execSQL(ADD_LATITUDE);
                db.execSQL(ADD_LONGITUDE);
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION); //set to latest revision
            }
            else if (db.getVersion() == 1){ //v1.0 or v1.0.1
                db.execSQL(ADD_BLOGID);
                db.execSQL(UPDATE_BLOGID);
                db.execSQL(ADD_SOUND_OPTION);
                db.execSQL(ADD_VIBRATE_OPTION);
                db.execSQL(ADD_LIGHT_OPTION);
                db.execSQL(ADD_LOCATION_FLAG);
                db.execSQL(ADD_LATITUDE);
                db.execSQL(ADD_LONGITUDE);
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION); //set to latest revision
            }
            else if (db.getVersion()  == 2){
                db.execSQL(ADD_SOUND_OPTION);
                db.execSQL(ADD_VIBRATE_OPTION);
                db.execSQL(ADD_LIGHT_OPTION);
                db.execSQL(ADD_LOCATION_FLAG);
                db.execSQL(ADD_LATITUDE);
                db.execSQL(ADD_LONGITUDE);
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 3){
                db.execSQL(ADD_LOCATION_FLAG);
                db.execSQL(ADD_LATITUDE);
                db.execSQL(ADD_LONGITUDE);
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 4){
                db.execSQL(ADD_LOCATION_FLAG);
                db.execSQL(ADD_LATITUDE);
                db.execSQL(ADD_LONGITUDE);
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 5){
                db.execSQL(ADD_TAGLINE);
                db.execSQL(ADD_TAGLINE_FLAG);
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 6){
                db.execSQL(ADD_NEW_COMMENT_ID);
                db.execSQL(COPY_COMMENT_IDS);
                db.execSQL(ADD_DOTCOM_USERNAME);
                db.execSQL(ADD_DOTCOM_PASSWORD);
                db.execSQL(ADD_API_KEY);
                db.execSQL(ADD_API_BLOGID);
                db.execSQL(ADD_DOTCOM_FLAG);
                db.execSQL(ADD_WP_VERSION);
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 7){
                db.execSQL(ADD_UNIQUE_ID);
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
            else if (db.getVersion() == 8){
                db.execSQL(ADD_STATUS);
                db.execSQL(ADD_PAGE_STATUS);
                db.setVersion(DATABASE_VERSION);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        db.close();
       
    }

   
    public boolean addAccount(Context ctx, String url, String blogName, String username, String password, String imagePlacement, boolean centerThumbnail, boolean fullSizeImage, String maxImageWidth, int maxImageWidthId, boolean runService, int blogId, boolean wpcom, String wpVersion) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("url", url);
        values.put("blogName", blogName);
        values.put("username", username);
        values.put("password", password);
        values.put("imagePlacement", imagePlacement);
        values.put("centerThumbnail", centerThumbnail);
        values.put("fullSizeImage", fullSizeImage);
        values.put("maxImageWidth", maxImageWidth);
        values.put("maxImageWidthId", maxImageWidthId);
        values.put("runService", runService);
        values.put("blogId", blogId);
        values.put("dotcomFlag", wpcom);
        values.put("wpVersion", wpVersion);
        boolean returnValue = db.insert(SETTINGS_TABLE, null, values) > 0;
        db.close();
        return (returnValue);
    }   
    public Vector<HashMap<String, Object>> getAccounts(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "id", "blogName", "username", "runService", "blogId", "url"}, null, null, null, null, null);
        String id;
        String blogName, username, url;
        int blogId;
        int runService;
        int numRows = c.getCount();
        c.moveToFirst();
        Vector<HashMap<String, Object>> accounts = new Vector<HashMap<String, Object>>();
        for (int i = 0; i < numRows; i++) {
           
            id = c.getString(0);
            blogName = c.getString(1);
            username = c.getString(2);
            runService = c.getInt(3);
            blogId = c.getInt(4);
            url = c.getString(5);
            if (id != null)
            {   
                HashMap<String, Object> thisHash = new HashMap<String, Object>();
               
                thisHash.put("id", id);
                thisHash.put("blogName", blogName);
                thisHash.put("username", username);
                thisHash.put("runService", runService);
                thisHash.put("blogId", blogId);
                thisHash.put("url", url);
                accounts.add(thisHash);
            }
            c.moveToNext();
        }
        c.close();
        db.close();
       
        return accounts;
    }
   
    public boolean checkMatch(Context ctx, String blogName, String blogURL, String username) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query(SETTINGS_TABLE, new String[] {"blogName", "url"}, "blogName='" + addSlashes(blogName) + "' AND url='" + addSlashes(blogURL) + "'" + " AND username='" + username + "'", null, null, null, null);
        int numRows = c.getCount();
        boolean result = false;
       
        if (numRows > 0){
            //this account is already saved, yo!
            result = true;
        }
       
        c.close();
        db.close();
       
        return result;
    }
   
    public static String addSlashes( String text ){       
        final StringBuffer sb                   = new StringBuffer( text.length() * 2 );
        final StringCharacterIterator iterator  = new StringCharacterIterator( text );
       
            char character = iterator.current();
       
        while( character != StringCharacterIterator.DONE ){
            if( character == '"' ) sb.append( "\\\"" );
            else if( character == '\'' ) sb.append( "\'\'" );
            else if( character == '\\' ) sb.append( "\\\\" );
            else if( character == '\n' ) sb.append( "\\n" );
            else if( character == '{'  ) sb.append( "\\{" );
            else if( character == '}'  ) sb.append( "\\}" );
            else sb.append( character );
           
            character = iterator.next();
        }
       
        return sb.toString();
    }

    public boolean saveSettings(Context ctx, String id, String url, String username, String password, String imagePlacement, boolean centerThumbnail, boolean fullSizeImage, String maxImageWidth, int maxImageWidthId, boolean location, boolean isWPCom, String originalUsername) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("url", url);
        values.put("username", username);
        values.put("password", password);
        values.put("imagePlacement", imagePlacement);
        values.put("centerThumbnail", centerThumbnail);
        values.put("fullSizeImage", fullSizeImage);
        values.put("maxImageWidth", maxImageWidth);
        values.put("maxImageWidthId", maxImageWidthId);
        values.put("location", location);
        boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;
        if (isWPCom){
            //update the login for other wordpress.com accounts
            ContentValues userPass = new ContentValues();
            userPass.put("username", username);
            userPass.put("password", password);
            returnValue = db.update(SETTINGS_TABLE, userPass, "username=\"" + originalUsername + "\" AND dotcomFlag=1" , null) > 0;
        }
        db.close();
        return (returnValue);
    }
   
    public boolean deleteAccount(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        int rowsAffected = db.delete(SETTINGS_TABLE, "id=" + id, null);
       
        boolean returnValue = false;
        if (rowsAffected > 0){
            returnValue = true;
        }
       
        // delete QuickPress homescreen shortcuts connected with this account
        Vector<HashMap<String, Object>> shortcuts = this.getQuickPressShortcuts(ctx, id);
        for(int i = 0; i < shortcuts.size(); i++) {
            HashMap<String, Object> shortcutHash = shortcuts.get(i);
           
            Intent shortcutIntent = new Intent();
            shortcutIntent.setClassName(editPost.class.getPackage().getName(), editPost.class.getName());
            shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            shortcutIntent.setAction(Intent.ACTION_VIEW);
            Intent broadcastShortcutIntent = new Intent();
            broadcastShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
            broadcastShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutHash.get("name").toString());
            broadcastShortcutIntent.putExtra("duplicate", false);
            broadcastShortcutIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
            ctx.sendBroadcast(broadcastShortcutIntent);
           
            deleteQuickPressShortcut(ctx, shortcutHash.get("id").toString());
        }
       
        db.close();
        return (returnValue);
    }

    public Vector<Object> loadSettings(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "url", "blogName", "username", "password", "imagePlacement", "centerThumbnail", "fullSizeImage", "maxImageWidth", "maxImageWidthId", "runService", "blogId", "location", "dotcomFlag"}, "id=" + id, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();

        Vector<Object> returnVector = new Vector<Object>();
        if (numRows > 0){
            if (c.getString(0) != null){
            returnVector.add(c.getString(0));
            returnVector.add(c.getString(1));
            returnVector.add(c.getString(2));
            returnVector.add(c.getString(3));
            returnVector.add(c.getString(4));
            returnVector.add(c.getInt(5));
            returnVector.add(c.getString(6));
            returnVector.add(c.getString(7));
            returnVector.add(c.getInt(8));
            returnVector.add(c.getInt(9));
            returnVector.add(c.getInt(10));
            returnVector.add(c.getInt(11));
            returnVector.add(c.getInt(12));
            }
            else
            {
                returnVector = null;
            }
        }
        c.close();
        db.close();
       
        return returnVector;
    }

    public Vector<String> loadStatsLogin(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "dotcom_username", "dotcom_password"}, "id=" + id, null, null, null, null);
       
        c.moveToFirst();

        Vector<String> returnVector = new Vector<String>();
        if (c.getString(0) != null){
        returnVector.add(c.getString(0));
        returnVector.add(c.getString(1));
        }
        else
        {
            returnVector = null;
        }
        c.close();
        db.close();
       
        return returnVector;
    }
   
    public boolean saveStatsLogin(Context ctx, String id, String statsUsername, String statsPassword) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("dotcom_username", statsUsername);
        values.put("dotcom_password", statsPassword);
        boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;
        db.close();
       
        return (returnValue);
       
    }
   
    public Vector<String> loadAPIData(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "api_key", "api_blogid"}, "id=" + id, null, null, null, null);

        c.moveToFirst();

        Vector<String> returnVector = new Vector<String>();
        if (c.getString(0) != null){
        returnVector.add(c.getString(0));
        returnVector.add(c.getString(1));
        }
        else
        {
            returnVector = null;
        }
        c.close();
        db.close();
       
        return returnVector;
    }
   
    public boolean saveAPIData(Context ctx, String id, String apiKey, String apiBlogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("api_key", apiKey);
        values.put("api_blogid", apiBlogID);
        boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;
        db.close();
       
        return (returnValue);
       
    }

    public int getLatestCommentID(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        int returnInt = 0;
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "lastCommentId"  }, "id=" + id, null, null, null, null);
        c.moveToFirst();
        if (c.getString(0) != null){
            returnInt = Integer.valueOf(c.getString(0));
        }
        c.close();
        db.close();
        return returnInt;
    }


    public boolean updateLatestCommentID(Context ctx, String id, Integer newCommentID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("lastCommentId", newCommentID);

        boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + id, null) > 0;
        db.close();
        return (returnValue);
       
    }


    public Vector<Integer> getNotificationAccounts(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = null;
        try {
            c = db.query(SETTINGS_TABLE, new String[] { "id" }, "runService=1", null, null, null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        Vector<Integer> returnVector = new Vector<Integer>();
        for (int i = 0; i < numRows; ++i) {
            int tempID = c.getInt(0);   
            returnVector.add(tempID);
            c.moveToNext();
        }
       
        c.close();
        db.close();
        return returnVector;
    }


    public String getAccountName(Context ctx, String accountID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        String accountName = "";
        Cursor c = db.query(SETTINGS_TABLE, new String[] { "blogName"  }, "id=" + accountID, null, null, null, null);
        c.moveToFirst();
        if (c.getString(0) != null){
            accountName = c.getString(0);
        }
        c.close();
        db.close();
        return accountName;
    }


    public void updateNotificationFlag(Context ctx, int id, boolean flag) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        int iFlag = 0;
        if (flag){
            iFlag = 1;
        }
        values.put("runService", iFlag);

        boolean returnValue = db.update(SETTINGS_TABLE, values, "id=" + String.valueOf(id), null) > 0;
        if(returnValue){
        }
        db.close();
       
    }
   
    public void updateNotificationSettings(Context ctx, String interval, boolean sound, boolean vibrate, boolean light, boolean tagline_flag, String tagline) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("interval", interval);
        values.put("sound", sound);
        values.put("vibrate", vibrate);
        values.put("light", light);
        values.put("tagline_flag", tagline_flag);
        values.put("tagline", tagline);

        boolean returnValue = db.update("eula", values, null, null) > 0;
        if (returnValue){};
        db.close();
       
    }
   
    public String getInterval(Context ctx) {
db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query("eula", new String[] { "interval" }, "id=0", null, null, null, null);
        int numRows = c.getCount();
        c.moveToFirst();
        String returnValue = "";
        if (numRows == 1){
            if (c.getString(0) != null){
            returnValue = c.getString(0);
            }
        }
        c.close();
        db.close();

        return returnValue;
       
    }
   
    public HashMap<String, Object> getNotificationOptions(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query("eula", new String[] { "id", "sound", "vibrate", "light", "tagline_flag", "tagline"}, "id=0", null, null, null, null);
        int sound, vibrate, light;
        String tagline;
        HashMap<String, Object> thisHash = new HashMap<String, Object>();
        int numRows = c.getCount();
        if (numRows >= 1){
        c.moveToFirst();
           
        sound = c.getInt(1);
        vibrate = c.getInt(2);
        light = c.getInt(3);
        tagline = c.getString(5);
        thisHash.put("sound", sound);
        thisHash.put("vibrate", vibrate);
        thisHash.put("light", light);
        thisHash.put("tagline_flag", c.getInt(4));
        if (tagline != null){
            thisHash.put("tagline", tagline);
        }
        else{
            thisHash.put("tagline", "");
        }
       
       
        }

        c.close();
        db.close();
       
        return thisHash;
    }
   
    //localDrafts
    public boolean saveLocalDraft(Context ctx, String blogID, String title, String content, String picturePaths, String tags, String categories, String status, Double latitude, Double longitude) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
            ContentValues values = new ContentValues();
            values.put("blogID", blogID);
            values.put("title", title);
            values.put("content", content);
            values.put("picturePaths", picturePaths);
            values.put("tags", tags);
            values.put("categories", categories);
            values.put("status", status);
            values.put("latitude", latitude);
            values.put("longitude", longitude);
            returnValue = db.insert(LOCALDRAFTS_TABLE, null, values) > 0;

        db.close();
        return (returnValue);
    }
   
    public boolean updateLocalDraft(Context ctx, String blogID, String postID, String title, String content, String picturePaths, String tags, String categories, String status, Double latitude, Double longitude) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
            ContentValues values = new ContentValues();
            values.put("blogID", blogID);
            values.put("title", title);
            values.put("content", content);
            values.put("picturePaths", picturePaths);
            values.put("tags", tags);
            values.put("categories", categories);
            values.put("status", status);
            values.put("latitude", latitude);
            values.put("longitude", longitude);
            returnValue = db.update(LOCALDRAFTS_TABLE, values, "id=" + postID, null) > 0;

        db.close();
        return (returnValue);
    }

    public Vector<HashMap<String, Object>> loadPosts(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] { "id", "title", "status", "uploaded"}, "blogID=" + blogID, null, null, null, "id desc");
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("id", c.getInt(0));
        returnHash.put("title", c.getString(1));
        returnHash.put("status", c.getString(2));
        returnHash.put("uploaded", c.getInt(3));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();

        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }
   
    public Vector<HashMap<String, Object>> loadPost(Context ctx, String postID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] { "title", "content", "picturePaths", "tags", "categories", "status", "latitude", "longitude"}, "id=" + postID, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("title", c.getString(0));
        returnHash.put("content", c.getString(1));
        returnHash.put("picturePaths", c.getString(2));
        returnHash.put("tags", c.getString(3));
        returnHash.put("categories", c.getString(4));
        returnHash.put("status", c.getString(5));
        returnHash.put("latitude", c.getDouble(6));
        returnHash.put("longitude", c.getDouble(7));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }

    public boolean deletePost(Context ctx, String postID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        boolean returnValue = false;

        int result = 0;
        result = db.delete(LOCALDRAFTS_TABLE, "id=" + postID, null);
        db.close();
       
        if (result == 1){
            returnValue = true;
        }
       
        return returnValue;
    }
   
    public boolean saveLocalPageDraft(Context ctx, String blogID, String title, String content, String picturePaths, String status) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
            ContentValues values = new ContentValues();
            values.put("blogID", blogID);
            values.put("title", title);
            values.put("content", content);
            values.put("picturePaths", picturePaths);
            values.put("status", status);
            returnValue = db.insert(LOCALPAGEDRAFTS_TABLE, null, values) > 0;

        db.close();
        return (returnValue);
    }
   
    public boolean updateLocalPageDraft(Context ctx, String blogID, String postID, String title, String content, String picturePaths, String status) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
            ContentValues values = new ContentValues();
            values.put("blogID", blogID);
            values.put("title", title);
            values.put("content", content);
            values.put("picturePaths", picturePaths);
            values.put("status", status);
            returnValue = db.update(LOCALPAGEDRAFTS_TABLE, values, "id=" + postID, null) > 0;

        db.close();
        return (returnValue);
    }
   
    public Vector<HashMap<String, Object>> loadPageDrafts(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] { "id", "title", "status", "uploaded"}, "blogID=" + blogID, null, null, null, "id desc");
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("id", c.getInt(0));
        returnHash.put("title", c.getString(1));
        returnHash.put("status", c.getString(2));
        returnHash.put("uploaded", c.getInt(3));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();

        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }
   
    public Vector<HashMap<String, Object>> loadPageDraft(Context ctx, String postID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] { "title", "content", "picturePaths", "status"}, "id=" + postID, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("title", c.getString(0));
        returnHash.put("content", c.getString(1));
        returnHash.put("picturePaths", c.getString(2));
        returnHash.put("status", c.getString(3));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }

    public boolean deletePageDraft(Context ctx, String postID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        boolean returnValue = false;

        int result = 0;
        result = db.delete(LOCALPAGEDRAFTS_TABLE, "id=" + postID, null);
        db.close();
       
        if (result == 1){
            returnValue = true;
        }
       
        return returnValue;
    }

    public int getLatestDraftID(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query(LOCALDRAFTS_TABLE, new String[] {"id"}, "blogID=" + id, null, null, null, "id desc", "1");
       
        int latestID = -1;
        int numRows = c.getCount();
        if (numRows != 0){
            c.moveToFirst();
            latestID = c.getInt(0);
        }
        c.close();
        db.close();
       
        return latestID;
    }
   
    public int getLatestPageDraftID(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query(LOCALPAGEDRAFTS_TABLE, new String[] {"id"}, "blogID=" + id, null, null, null, "id desc", "1");
       
        int latestID = -1;
        int numRows = c.getCount();
        if (numRows != 0){
            c.moveToFirst();
            latestID = c.getInt(0);
        }
        c.close();
        db.close();
       
        return latestID;
    }
   
    //postStore
    public boolean savePosts(Context ctx, Vector<?> postValues) {
        boolean returnValue = false;
        if (postValues.size() != 0)
        {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        HashMap<?, ?> firstHash = (HashMap<?, ?>) postValues.get(0);
        String blogID = firstHash.get("blogID").toString();
        //delete existing values
        db.delete(POSTSTORE_TABLE, "blogID=" + blogID, null);

        for (int i = 0; i < postValues.size(); i++){
            ContentValues values = new ContentValues();
            HashMap<?, ?> thisHash = (HashMap<?, ?>) postValues.get(i);
            values.put("blogID", thisHash.get("blogID").toString());
            values.put("postID", thisHash.get("postID").toString());
            values.put("title", thisHash.get("title").toString());
            values.put("postDate", thisHash.get("postDate").toString());
            values.put("postDateFormatted", thisHash.get("postDateFormatted").toString());
            returnValue = db.insert(POSTSTORE_TABLE, null, values) > 0;
        }
       
       
        db.close();
        }
        return (returnValue);
    }

    public Vector<HashMap<String, String>> loadSavedPosts(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, String>> returnVector = new Vector<HashMap<String, String>>();
        Cursor c = db.query(POSTSTORE_TABLE, new String[] { "blogID", "postID", "title", "postDate", "postDateFormatted"}, "blogID=" + blogID, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, String> returnHash = new HashMap<String, String>();
        returnHash.put("blogID", c.getString(0));
        returnHash.put("postID", c.getString(1));
        returnHash.put("title", c.getString(2));
        returnHash.put("postDate", c.getString(3));
        returnHash.put("postDateFormatted", c.getString(4));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }

    public Vector<HashMap<String, String>> loadPages(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, String>> returnVector = new Vector<HashMap<String, String>>();
        Cursor c = db.query(PAGES_TABLE, new String[] { "blogID", "pageID", "title", "pageDate", "pageDateFormatted"}, "blogID=" + blogID, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        for (int i = 0; i < numRows; ++i) {
        if (c.getString(0) != null){
        HashMap<String, String> returnHash = new HashMap<String, String>();
        returnHash.put("blogID", c.getString(0));
        returnHash.put("pageID", c.getString(1));
        returnHash.put("title", c.getString(2));
        returnHash.put("pageDate", c.getString(3));
        returnHash.put("pageDateFormatted", c.getString(4));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }

    public boolean savePages(Context ctx, Vector<?> pageValues) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        HashMap<?, ?> firstHash = (HashMap<?, ?>) pageValues.get(0);
        String blogID = firstHash.get("blogID").toString();
        //delete existing values
        db.delete(PAGES_TABLE, "blogID=" + blogID, null);

        for (int i = 0; i < pageValues.size(); i++){
            ContentValues values = new ContentValues();
            HashMap<?, ?> thisHash = (HashMap<?, ?>) pageValues.get(i);
            values.put("blogID", thisHash.get("blogID").toString());
            values.put("pageID", thisHash.get("pageID").toString());
            values.put("parentID", thisHash.get("parentID").toString());
            values.put("title", thisHash.get("title").toString());
            values.put("pageDate", thisHash.get("pageDate").toString());
            values.put("pageDateFormatted", thisHash.get("pageDateFormatted").toString());
            returnValue = db.insert(PAGES_TABLE, null, values) > 0;
        }
       
       
        db.close();
        return (returnValue);
       
    }
   
    public Vector<HashMap<String, Object>> loadComments(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(COMMENTS_TABLE, new String[] { "blogID", "postID", "iCommentID", "author", "comment", "commentDate", "commentDateFormatted", "status", "url", "email", "postTitle"}, "blogID=" + blogID, null, null, null, null);
       
        int numRows = c.getCount();
        c.moveToFirst();
       
        HashMap<String, Object> numRecords = new HashMap<String, Object>();
        //add the number of stored records so the offset can be computed
        if (numRows > 0){
            numRecords.put("numRecords", numRows);
            returnVector.add(0, numRecords);
        }
       
        for (int i = 1; i < (numRows + 1); ++i) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("blogID", c.getString(0));
        returnHash.put("postID", c.getInt(1));
        returnHash.put("commentID", c.getInt(2));
        returnHash.put("author", c.getString(3));
        returnHash.put("comment", c.getString(4));
        returnHash.put("commentDate", c.getString(5));
        returnHash.put("commentDateFormatted", c.getString(6));
        returnHash.put("status", c.getString(7));
        returnHash.put("url", c.getString(8));
        returnHash.put("email", c.getString(9));
        returnHash.put("postTitle", c.getString(10));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }
   
    public Vector<HashMap<String, Object>> loadMoreComments(Context ctx, String blogID, int limit) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Vector<HashMap<String, Object>> returnVector = new Vector<HashMap<String, Object>>();
        Cursor c = db.query(COMMENTS_TABLE, new String[] { "blogID", "postID", "iCommentID", "author", "comment", "commentDate", "commentDateFormatted", "status", "url", "email", "postTitle"}, "blogID=" + blogID, null, null, null, "iCommentID ASC", String.valueOf(limit));
        int numRows = c.getCount();
        c.moveToFirst();
       
        //HashMap numRecords = new HashMap();
        //add the number of stored records so the offset can be computed
        /*if (numRows > 0){
            numRecords.put("numRecords", numRows);
            returnVector.add(0, numRecords);
        }*/
        for (int i = 0; i < numRows; i++) {
        if (c.getString(0) != null){
        HashMap<String, Object> returnHash = new HashMap<String, Object>();
        returnHash.put("blogID", c.getString(0));
        returnHash.put("postID", c.getInt(1));
        returnHash.put("commentID", c.getInt(2));
        returnHash.put("author", c.getString(3));
        returnHash.put("comment", c.getString(4));
        returnHash.put("commentDate", c.getString(5));
        returnHash.put("commentDateFormatted", c.getString(6));
        returnHash.put("status", c.getString(7));
        returnHash.put("url", c.getString(8));
        returnHash.put("email", c.getString(9));
        returnHash.put("postTitle", c.getString(10));
        returnVector.add(i, returnHash);
        }
        c.moveToNext();
        }
        c.close();
        db.close();
       
        if (numRows == 0){
            returnVector = null;
        }
       
        return returnVector;
    }

    public boolean saveComments(Context ctx, Vector<?> commentValues, boolean loadMore) {
        boolean returnValue = false;
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        HashMap<?, ?> firstHash = (HashMap<?, ?>) commentValues.get(0);
        String blogID = firstHash.get("blogID").toString();
        //delete existing values, if user hit refresh button
        if (!loadMore){
            db.delete(COMMENTS_TABLE, "blogID=" + blogID, null);
        }

        for (int i = 0; i < commentValues.size(); i++){
            ContentValues values = new ContentValues();
            HashMap<?, ?> thisHash = (HashMap<?, ?>) commentValues.get(i);
            values.put("blogID", thisHash.get("blogID").toString());
            values.put("postID", thisHash.get("postID").toString());
            values.put("iCommentID", thisHash.get("commentID").toString());
            values.put("author", thisHash.get("author").toString());
            values.put("comment", thisHash.get("comment").toString());
            values.put("commentDate", thisHash.get("commentDate").toString());
            values.put("commentDateFormatted", thisHash.get("commentDateFormatted").toString());
            values.put("status", thisHash.get("status").toString());
            values.put("url", thisHash.get("url").toString());
            values.put("email", thisHash.get("email").toString());
            values.put("postTitle", thisHash.get("postTitle").toString());
            returnValue = db.insert(COMMENTS_TABLE, null, values) > 0;
        }
       
       
        db.close();
        return (returnValue);
       
    }
   
    public void updateCommentStatus(Context ctx, String blogID, String id, String newStatus) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        ContentValues values = new ContentValues();
        values.put("status", newStatus);
        boolean returnValue = db.update(COMMENTS_TABLE, values, "blogID=" + blogID + " AND iCommentID=" + id, null) > 0;
        if (returnValue){};

    db.close();
       
    }

    public void clearPages(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        //delete existing values
        db.delete(PAGES_TABLE, "blogID=" + blogID, null);
        db.close();
    }

    public void clearPosts(Context ctx, String blogID) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        //delete existing values
        db.delete(POSTSTORE_TABLE, "blogID=" + blogID, null);
        db.close();
       
    }
   
    //eula table
    public boolean checkEULA(Context ctx){
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(EULA_TABLE, new String[] { "read" }, "id=0", null, null, null, null);
        int numRows = c.getCount();
        c.moveToFirst();
        boolean returnValue = false;
        if (numRows == 1){
            returnValue = (c.getInt(0) != 0);
        }
        c.close();
        db.close();
           
        return returnValue;
    }
   
    public void setEULA(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("id", 0);
        values.put("read", 1); //set that they've read the EULA
        boolean returnValue = db.insert(EULA_TABLE, null, values) > 0;
        if (returnValue){};
        db.close();

    }
   
    public void setStatsDate(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("statsdate", System.currentTimeMillis()); //set to current time

        boolean returnValue = db.update(EULA_TABLE, values, "id=0", null) > 0;
        if (returnValue){};
       
        db.close();
    }
   
    public long getStatsDate(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(EULA_TABLE, new String[] { "statsdate" }, "id=0", null, null, null, null);
        int numRows = c.getCount();
        c.moveToFirst();
        long returnValue = 0;
        if (numRows == 1){
            returnValue = c.getLong(0);
        }
        c.close();
        db.close();
        return returnValue;
    }
   
    //categories
    public boolean insertCategory(Context ctx, String id, int wp_id, String category_name) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("blog_id", id);
        values.put("wp_id", wp_id);
        values.put("category_name", category_name.toString());
        boolean returnValue = db.insert(CATEGORIES_TABLE, null, values) > 0;
        db.close();
        return (returnValue);
    }

    public Vector<String> loadCategories(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(CATEGORIES_TABLE, new String[] { "id", "wp_id", "category_name" }, "blog_id=" + id, null, null, null, null);
        int numRows = c.getCount();
        c.moveToFirst();
        Vector<String> returnVector = new Vector<String>();
        for (int i = 0; i < numRows; ++i) {
            String category_name = c.getString(2);
            if (category_name != null)
            {   
            returnVector.add(category_name);
            }
            c.moveToNext();
        }
        c.close();
        db.close();
       
        return returnVector;
    }
   
    public int getCategoryId(Context ctx, String id, String category){
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
       
        Cursor c = db.query(CATEGORIES_TABLE, new String[] {"wp_id"}, "category_name=\"" + category + "\" AND blog_id=" + id, null, null, null, null);
        c.moveToFirst();
        int categoryID = 0;
        categoryID = c.getInt(0);
        db.close();
        return categoryID;
    }
   
    public void clearCategories(Context ctx, String id){
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        //clear out the table since we are refreshing the whole enchilada
        db.delete(CATEGORIES_TABLE, "blog_id=" + id, null);
        db.close();
    }
   
    //unique identifier queries
    public void updateUUID(Context ctx, String uuid) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("uuid", uuid);
        boolean returnValue = db.update("eula", values, null, null) > 0;
        if (returnValue){};
        db.close();
    }
   
    public String getUUID(Context ctx) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);       
        Cursor c = db.query("eula", new String[] { "uuid" }, "id=0", null, null, null, null);
        int numRows = c.getCount();
        c.moveToFirst();
        String returnValue = "";
        if (numRows == 1){
            if (c.getString(0) != null){
            returnValue = c.getString(0);
            }
        }
        c.close();
        db.close();

        return returnValue;
       
    }
   
    public boolean addQuickPressShortcut(Context ctx, String accountId, String name) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        ContentValues values = new ContentValues();
        values.put("accountId", accountId);
        values.put("name", name);
        boolean returnValue = db.insert(QUICKPRESS_SHORTCUTS_TABLE, null, values) > 0;
        db.close();
        return (returnValue);
    }
   
    public Vector<HashMap<String, Object>> getQuickPressShortcuts(Context ctx, String accountId) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        Cursor c = db.query(QUICKPRESS_SHORTCUTS_TABLE, new String[] { "id", "accountId", "name"}, "accountId = "+accountId, null, null, null, null);
        String id, name;
        int numRows = c.getCount();
        c.moveToFirst();
        Vector<HashMap<String, Object>> accounts = new Vector<HashMap<String, Object>>();
        for (int i = 0; i < numRows; i++) {
           
            id = c.getString(0);
            name = c.getString(2);
            if (id != null)
            {   
                HashMap<String, Object> thisHash = new HashMap<String, Object>();
               
                thisHash.put("id", id);
                thisHash.put("name", name);
                accounts.add(thisHash);
            }
            c.moveToNext();
        }
        c.close();
        db.close();
       
        return accounts;
    }
   
    public boolean deleteQuickPressShortcut(Context ctx, String id) {
        db = ctx.openOrCreateDatabase(DATABASE_NAME, 0, null);
        int rowsAffected = db.delete(QUICKPRESS_SHORTCUTS_TABLE, "id=" + id, null);
       
        boolean returnValue = false;
        if (rowsAffected > 0){
            returnValue = true;
        }
       
        db.close();
       
        return (returnValue);
    }

}

你可能感兴趣的:(android)