package com.vikrant; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import java.util.Date; import com.vikrant.RssParser.Item; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class TxnDbAdapter { private static final String TAG = "TxnDbAdapter"; public static final String KEY_ROWID = "_id"; public static final String KEY_TITLE = "title"; public static final String KEY_LINK = "link"; public static final String KEY_DESCRIPTION = "description"; public static final String KEY_PUBDATE = "pubDate"; public static final String[] HOT_COLUMNS = new String[] { KEY_TITLE, KEY_LINK, KEY_DESCRIPTION, KEY_PUBDATE}; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private static final String HOT_TABLE = "TopHeadlines"; private static final String DATABASE_NAME = "headlines"; private static final int DATABASE_VERSION = 9; private static final String HOT_TABLE_CREATE = "create table TopHeadlines ( _id integer primary key autoincrement, title text null, link text null, " + "description text null, pubDate text null)"; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try{ db.execSQL(HOT_TABLE_CREATE); }catch(SQLException e){ e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + " which destroys all old data"); db.execSQL("DROP TABLE IF EXISTS " + HOT_TABLE); onCreate(db); } } private final Context mContext; public TxnDbAdapter(Context context){ this.mContext = context; } public boolean open() throws SQLException { try { mDbHelper = new DatabaseHelper(mContext); mDb = mDbHelper.getWritableDatabase(); } catch(Exception e) { e.printStackTrace(); } return true; } public void close() { mDbHelper.close(); } public final static DateFormat DB_DATE_FORMATTER = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS"); public long insertHeadline(Item item) { long i=0; ContentValues initialValues = new ContentValues(); initialValues.put(KEY_TITLE, item.title); initialValues.put(KEY_LINK, item.link); initialValues.put(KEY_DESCRIPTION, item.description); initialValues.put(KEY_PUBDATE, item.pubDate); try { i= mDb.insert(HOT_TABLE, null, initialValues); } catch(Exception e) { e.printStackTrace(); } return i; } public Cursor fetchAllHeadlines() { try { Cursor mCursor = mDb.query(HOT_TABLE, new String[]{ KEY_ROWID, KEY_TITLE, KEY_LINK, KEY_DESCRIPTION,KEY_PUBDATE}, null, null, null, null,KEY_ROWID + " DESC"); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } catch(Exception e) { e.getMessage().toString(); } return null; } public Cursor fetchHeadline(Integer id){ Cursor mCursor = mDb.query(HOT_TABLE, new String[]{ KEY_ROWID+"="+id,KEY_TITLE, KEY_LINK, KEY_DESCRIPTION, KEY_PUBDATE } , null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } public void addTransactions(List<Item> items) { try { mDb.beginTransaction(); for (Item item : items) { insertHeadline(item); } limitRows(HOT_TABLE, 50); mDb.setTransactionSuccessful(); } finally { mDb.endTransaction(); } } public int limitRows(String tablename, int limit) { Cursor cursor = mDb.rawQuery("SELECT " + KEY_TITLE + " FROM " + tablename + " ORDER BY " + KEY_TITLE + " DESC LIMIT 1 OFFSET ?", new String[] { limit - 1 + "" }); int deleted = 0; if (cursor != null && cursor.moveToFirst()) { long limitId = cursor.getLong(0); deleted = mDb.delete(tablename, KEY_LINK + "<" + limitId, null); } cursor.close(); return deleted; } public void clearData() { deleteAllHeadlines(); } public boolean deleteAllHeadlines() { return mDb.delete(HOT_TABLE, null, null) > 0; } public String getDateTime() { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); Date date = new Date(); return dateFormat.format(date); } public boolean dropTable() { mDb.execSQL("DROP TABLE IF EXISTS " + HOT_TABLE); return true; } public boolean createTable() { mDb.execSQL(HOT_TABLE_CREATE); return true; } }