package com.cundong.izhihu.db;
import java.util.ArrayList;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import com.cundong.izhihu.Constants;
import com.cundong.izhihu.entity.NewsListEntity;
import com.cundong.izhihu.entity.NewsListEntity.NewsEntity;
import com.cundong.izhihu.util.GsonUtils;
/**
* 类说明: 新闻列表数据表,数据库帮助类
*
* @date 2014-9-20
* @version 1.0
*/
public final class NewsDataSource extends BaseDataSource {
private SQLiteDatabase database;
private String[] allColumns = {
DatabaseHelper.NEWS_COLUMN_ID,
DatabaseHelper.NEWS_COLUMN_TYPE,
DatabaseHelper.NEWS_COLUMN_KEY,
DatabaseHelper.NEWS_COLUMN_CONTENT };
public NewsDataSource(DatabaseHelper dbHelper) {
database = dbHelper.getWritableDatabase();
}
private ArrayList<NewsEntity> insertDailyNewsList(int type, String key, String content) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.NEWS_COLUMN_TYPE, type);
values.put(DatabaseHelper.NEWS_COLUMN_KEY, key);
values.put(DatabaseHelper.NEWS_COLUMN_CONTENT, content);
long insertId = database.insert(DatabaseHelper.NEWS_TABLE_NAME, null, values);
Cursor cursor = database.query(DatabaseHelper.NEWS_TABLE_NAME, allColumns,
DatabaseHelper.NEWS_COLUMN_ID + " = " + insertId, null, null, null, null);
ArrayList<NewsEntity> newsList = cursorToNewsList(cursor);
cursor.close();
return newsList;
}
private void updateNewsList(int type, String key, String content) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.NEWS_COLUMN_TYPE, type);
values.put(DatabaseHelper.NEWS_COLUMN_KEY, key);
values.put(DatabaseHelper.NEWS_COLUMN_CONTENT, content);
database.update(DatabaseHelper.NEWS_TABLE_NAME, values, DatabaseHelper.NEWS_COLUMN_KEY
+ "='" + key + "'", null);
}
public void insertOrUpdateNewsList(int type, String key, String content) {
if (TextUtils.isEmpty(content))
return;
if (isContentExist(key)) {
updateNewsList(type, key, content);
} else {
insertDailyNewsList(type, key, content);
}
}
private boolean isContentExist(String key) {
boolean result = false;
Cursor cursor = database.query(DatabaseHelper.NEWS_TABLE_NAME, allColumns,
DatabaseHelper.NEWS_COLUMN_KEY + " = '" + key + "'", null, null, null, null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
String content = cursor.getString(cursor.getColumnIndex(DatabaseHelper.NEWS_COLUMN_CONTENT));
result = !TextUtils.isEmpty(content);
}
cursor.close();
return result;
}
public String getContent(String key) {
Cursor cursor = database.query(DatabaseHelper.NEWS_TABLE_NAME, allColumns,
DatabaseHelper.NEWS_COLUMN_KEY + " = '" + key + "'", null, null, null,
null);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
String content = cursor.getString(cursor.getColumnIndex(DatabaseHelper.NEWS_COLUMN_CONTENT));
cursor.close();
return content;
} else {
return null;
}
}
public ArrayList<NewsEntity> getNewsList(String key) {
Cursor cursor = database.query(DatabaseHelper.NEWS_TABLE_NAME, allColumns,
DatabaseHelper.NEWS_COLUMN_KEY + " = '" + key + "'", null, null, null,
null);
ArrayList<NewsEntity> newsList = cursorToNewsList(cursor);
cursor.close();
return newsList;
}
private ArrayList<NewsEntity> cursorToNewsList(Cursor cursor) {
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
String content = cursor.getString(cursor.getColumnIndex(DatabaseHelper.NEWS_COLUMN_CONTENT));
return GsonUtils.getNewsList(content);
} else {
return null;
}
}
/**
* 获取新闻表中,日期最新那天的数据
*
* @return
*/
public NewsListEntity getLatestNews() {
NewsListEntity newsListEntity = null;
String orderBy = DatabaseHelper.NEWS_COLUMN_KEY + " desc";
Cursor cursor = database.query(DatabaseHelper.NEWS_TABLE_NAME, allColumns, DatabaseHelper.NEWS_COLUMN_TYPE + "=" + Constants.NEWS_LIST, null, null, null, orderBy);
if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
String content = cursor.getString(cursor.getColumnIndex(DatabaseHelper.NEWS_COLUMN_CONTENT));
newsListEntity = (NewsListEntity) GsonUtils.getEntity(content, NewsListEntity.class);
}
cursor.close();
return newsListEntity;
}
}