package com.lgq.rssreader.dal;
import java.util.List;
import com.lgq.rssreader.core.Config;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBHelper {
private SQLiteDatabase db;
private DatabaseHelper dbHelper;
public final static byte[] _writeLock = new byte[0];
// ����ݿ�
public void OpenDB(Context context) {
dbHelper = new DatabaseHelper(context);
db = dbHelper.getWritableDatabase();
}
// �ر���ݿ�
public void Close() {
dbHelper.close();
if(db!=null){
db.close();
}
}
/**
* ����
*
* @param list
* @param table
* ����
*/
public void Insert(List<ContentValues> list, String tableName) {
synchronized (_writeLock) {
db.beginTransaction();
try {
db.delete(tableName, null, null);
for (int i = 0, len = list.size(); i < len; i++)
db.insert(tableName, null, list.get(i));
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
}
public DBHelper(Context context) {
this.dbHelper = new DatabaseHelper(context);
}
/**
* ���ڳ�ʼ����ݿ�
*
* @author Administrator
*
*/
public static class DatabaseHelper extends SQLiteOpenHelper {
// ������ݿ��ļ�
private static final String DB_NAME = Config.DB_FILE_NAME;
// ������ݿ�汾
private static final int DB_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
@Override
public void onCreate(SQLiteDatabase db) {
CreateBlogDb(db);
Log.i("DBHelper", "����Blogs��ɹ�");
CreateBlogView(db);
Log.i("DBHelper", "����vBlogs��ͼ�ɹ�");
CreateImageRecordDb(db);
Log.i("DBHelper", "����ImageRecords��ɹ�");
CreateSyncStateDb(db);
Log.i("DBHelper", "����SyncStates��ɹ�");
}
/**
* ����Blogs��
*
* @param db
*/
private void CreateBlogDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [Blogs] (");
sb.append("[BlogId] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[ChannelId] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[TagId] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[Title] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[Description] NTEXT NOT NULL DEFAULT (''), ");
sb.append("[Content] NTEXT DEFAULT (''), ");
sb.append("[Link] NVARCHAR(200), ");
sb.append("[PubDate] DATETIME, ");
sb.append("[SubsTitle] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[TimeStamp] INTEGER(16) NOT NULL DEFAULT (0), ");
sb.append("[IsRead] BOOLEAN DEFAULT (0), ");// �Ƿ��Ѷ�
sb.append("[IsStarred] BOOLEAN DEFAULT (0), ");// �Ƿ��ղ�
sb.append("[IsRecommend] BOOLEAN DEFAULT (0), ");// �Ƿ��Ƽ�
sb.append("[OriginId] NVARCHAR(200), ");
sb.append("[Continuation] NVARCHAR(200), ");
sb.append("[Avatar] NVARCHAR(50))");
db.execSQL(sb.toString());
}
/**
* ����Blogs��ͼ
*
* @param db
*/
private void CreateBlogView(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE VIEW vBlogs AS SELECT A.*,");
sb.append("(SELECT COUNT(*) FROM BLOGS WHERE TIMESTAMP>A.TIMESTAMP OR ");
sb.append(" (TIMESTAMP=A.TIMESTAMP AND PUBDATE>A.PUBDATE) OR ");
sb.append(" (TIMESTAMP=A.TIMESTAMP AND PUBDATE=A.PUBDATE AND ROWID > A.ROWID)");
sb.append(") AS ID ");
sb.append("FROM BLOGS A ORDER BY PUBDATE DESC, TIMESTAMP DESC, ROWID DESC");
db.execSQL(sb.toString());
}
/**
* ����ImageRecord��
*
* @param db
*/
private void CreateImageRecordDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [ImageRecords] (");
sb.append("[ImageRecordId] INTEGER PRIMARY KEY AUTOINCREMENT , ");
sb.append("[BlogId] NVARCHAR(50), ");
sb.append("[OriginUrl] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[StoredName] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[Extension] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[TimeStamp] DATETIME, ");
sb.append("[Size] Double )");
db.execSQL(sb.toString());
}
/**
* ����SyncState��
*
* @param db
*/
private void CreateSyncStateDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [SyncStates] (");
sb.append("[SyncStateId] INTEGER PRIMARY KEY AUTOINCREMENT , ");
sb.append("[BlogOriginId] NVARCHAR(50), ");
sb.append("[ChannelId] NVARCHAR(50), ");
sb.append("[Status] int NOT NULL, ");
sb.append("[TimeStamp] DATETIME, ");
sb.append("[Tag] NVARCHAR(100))");
db.execSQL(sb.toString());
}
/**
* ��������CommentList��
*
* @param db
*/
private void CreateCommentDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [CommentList] (");
sb.append("[CommentId] INTEGER NOT NULL DEFAULT (0), ");
sb.append("[PostUserUrl] NVARCHAR(200) NOT NULL DEFAULT (''), ");
sb.append("[PostUserName] NVARCHAR(50) NOT NULL DEFAULT (''), ");
sb.append("[Content] NTEXT NOT NULL DEFAULT (''), ");
sb.append("[ContentId] INTEGER NOT NULL DEFAULT (0), ");
sb.append("[CommentType] INTEGER DEFAULT (0), ");
sb.append("[AddTime] DATETIME);");
db.execSQL(sb.toString());
}
/**
* �������IJ���RssList��
*
* @param db
*/
private void CreateRssListDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [RssList] (");
sb.append("[RssId] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,");
sb.append("[Title] NVARCHAR(50) NOT NULL DEFAULT (''),");
sb.append("[Link] NVARCHAR(500) NOT NULL DEFAULT (''), ");
sb.append("[Description] NVARCHAR(500) DEFAULT (''),");
sb.append("[AddTime] DATETIME DEFAULT (date('now')), ");
sb.append("[OrderNum] INTEGER DEFAULT (0),");
sb.append("[RssNum] INTEGER DEFAULT (0),");
sb.append("[Guid] NVARCHAR(500),");
sb.append("[IsCnblogs] BOOLEAN DEFAULT (0),");
sb.append("[Image] NVARCHAR(200) DEFAULT (''),");
sb.append("[Updated] DATETIME DEFAULT (date('now')),");
sb.append("[Author] NVARCHAR(50) DEFAULT (''),");
sb.append("[CateId] INTEGER,");
sb.append("[CateName] NVARCHAR DEFAULT (''),");
sb.append("[IsActive] BOOLEAN DEFAULT (1));");
sb.append(");");
db.execSQL(sb.toString());
}
/**
* ������������RssItem��
*
* @param db
*/
private void CreateRssItemDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [RssItem] (");
sb.append("[Id] INTEGER PRIMARY KEY AUTOINCREMENT,");
sb.append("[Title] NVARCHAR(200) DEFAULT (''),");
sb.append("[Link] NVARCHAR(200) DEFAULT (''),");
sb.append("[Description] NTEXT DEFAULT (''),");
sb.append("[Category] NVARCHAR(50),");
sb.append("[Author] NVARCHAR(50) DEFAULT (''),");
sb.append("[AddDate] DATETIME,");
sb.append("[IsReaded] BOOLEAN DEFAULT (0),");
sb.append("[IsDigg] BOOLEAN DEFAULT (0));");
db.execSQL(sb.toString());
}
/**
* �����ղر�FavList
* @param db
*/
private void CreateFavListDb(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE [FavList] (");
sb.append("[FavId] INTEGER PRIMARY KEY AUTOINCREMENT,");
sb.append("[AddTime] DATETIME NOT NULL DEFAULT (date('now')), ");
sb.append("[ContentType] INTEGER NOT NULL DEFAULT (0),");
sb.append("[ContentId] INTEGER NOT NULL DEFAULT (0));");
db.execSQL(sb.toString());
}
/**
* ���°汾ʱ���±�
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
DropTable(db);
onCreate(db);
Log.e("User", "onUpgrade");
}
/**
* ɾ���
*
* @param db
*/
private void DropTable(SQLiteDatabase db) {
StringBuilder sb = new StringBuilder();
sb.append("DROP TABLE IF EXISTS " + Config.DB_BLOG_TABLE + ";");
sb.append("DROP TABLE IF EXISTS " + Config.DB_IMAGE_TABLE + ";");
sb.append("DROP TABLE IF EXISTS " + Config.DB_SYNCSTATE_TABLE + ";");
// sb.append("DROP TABLE IF EXISTS " + Config.DB_RSSLIST_TABLE + ";");
// sb.append("DROP TABLE IF EXISTS " + Config.DB_RSSITEM_TABLE + ";");
// sb.append("DROP TABLE IF EXISTS " + Config.DB_FAV_TABLE + ";");
db.execSQL(sb.toString());
}
/**
* �����ݱ?�����������ݣ�
* @param db
*/
public static void ClearData(Context context){
DatabaseHelper dbHelper = new DBHelper.DatabaseHelper(context);
SQLiteDatabase db=dbHelper.getWritableDatabase();
StringBuilder sb=new StringBuilder();
sb.append("DELETE FROM Blogs;");//��ղ��ͱ�
sb.append("DELETE FROM ImageRecords;");//��ղ��ͱ�
sb.append("DELETE FROM SyncStates;");//��ղ��ͱ�
//sb.append("DELETE FROM NewsList WHERE IsFull=0;");//������ű�
//sb.append("DELETE FROM CommentList;");//������۱�
//sb.append("DELETE FROM RssItem;");//��ն������±�
db.execSQL(sb.toString());
}
}
}