package com.d3.d3xmpp.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.d3.d3xmpp.constant.Constants;
import com.d3.d3xmpp.model.ChatItem;
public class MsgDbHelper {
private static MsgDbHelper instance = null;
private SqlLiteHelper helper;
private SQLiteDatabase db; // �ҵ�����������Ϣ
private final int SHOW_MSG_COUNT = 15;
private final int MORE_MSG_COUNT = 10 ;
public MsgDbHelper(Context context) {
helper = new SqlLiteHelper(context);
db = helper.getWritableDatabase();
}
public void closeDb(){
db.close();
helper.close();
}
public static MsgDbHelper getInstance(Context context) {
if (instance == null) {
instance = new MsgDbHelper(context);
}
return instance;
}
private class SqlLiteHelper extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "chat";
public SqlLiteHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
/* (non-Javadoc)
*
public String chatName; //Ⱥ�ĵĻ���username��һ��
private String username; //�Է����dz�
private String head;
private String msg;
private String sendDate;
private int inOrOut; //0����in 1����out
private String whos;
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS " + DB_NAME
+ "( id INTEGER PRIMARY KEY AUTOINCREMENT,chatType INTEGER,chatName text,"+
"username text , head text ,msg text,sendDate text,inOrOut INTEGER," +
"whos text,i_filed INTEGER,t_field text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
dropTable(db);
onCreate(db);
}
private void dropTable(SQLiteDatabase db) {
String sql = "DROP TABLE IF EXISTS "+DB_NAME;
db.execSQL(sql);
}
}
public void saveChatMsg(ChatItem msg){
ContentValues values = new ContentValues();
values.put("chatType", msg.chatType);
values.put("chatName", msg.chatName);
values.put("username", msg.username);
values.put("head", msg.head);
values.put("msg", msg.msg);
values.put("sendDate",msg.sendDate);
values.put("inOrOut", msg.inOrOut);
values.put("whos", Constants.USER_NAME);
db.insert(helper.DB_NAME, "id", values);
}
/**
* ȡ��ǰ�Ự���ڵ������¼������count
* @param friendName
*/
public List<ChatItem> getChatMsg(String chatName){
List<ChatItem> chatItems = new ArrayList<ChatItem>();
ChatItem msg;
String sql = "select a.chatType,a.chatName,a.username,a.head,a.msg,a.sendDate,a.inOrOut " +
" from(select * from "+helper.DB_NAME +
" where chatName = ? and whos = ? order by id desc LIMIT " +SHOW_MSG_COUNT+")a order by a.id";
Cursor cursor = db.rawQuery(sql, new String[]{chatName,Constants.USER_NAME});
while(cursor.moveToNext()){
msg = new ChatItem(cursor.getInt(0),cursor.getString(1),cursor.getString(2), cursor.getString(3), cursor.getString(4)
, cursor.getString(5), cursor.getInt(6));
chatItems.add(msg);
msg = null;
}
cursor.close();
return chatItems;
}
/**
* ��ȡ������������¼,��ʾ��5��
* @param count
* @param friendName
*/
public List<ChatItem> getChatMsgMore(int startIndex,String chatName){
List<ChatItem> chatItems = new ArrayList<ChatItem>();
ChatItem msg;
String sql ="select a.chatType,a.chatName,a.username,a.head,a.msg,a.sendDate,a.inOrOut " +
" from(select * from "+helper.DB_NAME +
" where chatName = ? and whos = ? order by id desc LIMIT " +MORE_MSG_COUNT+" offset "+startIndex+")a order by a.id";
Cursor cursor = db.rawQuery(sql, new String[]{chatName,Constants.USER_NAME});
while(cursor.moveToNext()){
msg = new ChatItem(cursor.getInt(0),cursor.getString(1),cursor.getString(2), cursor.getString(3), cursor.getString(4)
, cursor.getString(5), cursor.getInt(6));
chatItems.add(msg);
msg = null;
}
cursor.close();
return chatItems;
}
/**
* ȡ���ҵĵ�������Ϣ����ʾ�ں��ѱ�
*/
@SuppressWarnings("unused")
public List<ChatItem> getLastMsg(){
List<ChatItem> chatItems = new ArrayList<ChatItem>();
ChatItem msg;
String sql ="select chatType,chatName,username,head,msg,sendDate,inOrOut from "+helper.DB_NAME +
" where whos = ? "+
" GROUP BY chatName "+
"order by id desc";
final Cursor cursor = db.rawQuery(sql, new String[]{Constants.USER_NAME});
while (cursor.moveToNext()) {
msg = new ChatItem(cursor.getInt(0),cursor.getString(1),cursor.getString(2), cursor.getString(3), cursor.getString(4)
, cursor.getString(5), cursor.getInt(6));
chatItems.add(msg);
msg = null;
}
cursor.close();
return chatItems;
}
/**
* ȡ���ҵĵ�������Ϣ��ģ������,��ʾ�ں��ѱ�
*/
@SuppressWarnings("unused")
public List<ChatItem> getLastMsg(String keywords){
List<ChatItem> chatItems = new ArrayList<ChatItem>();
ChatItem msg;
String sql ="select chatType,chatName,username,head,msg,sendDate,inOrOut from "+helper.DB_NAME +
" where username like ? and whos = ? "+
" GROUP BY chatName "+
" order by id desc";
final Cursor cursor = db.rawQuery(sql, new String[]{"%"+keywords+"%",Constants.USER_NAME});
while (cursor.moveToNext()) {
msg = new ChatItem(cursor.getInt(0),cursor.getString(1),cursor.getString(2), cursor.getString(3), cursor.getString(4)
, cursor.getString(5), cursor.getInt(6));
chatItems.add(msg);
msg = null;
}
cursor.close();
return chatItems;
}
public void delChatMsg(String msgId){
db.delete(helper.DB_NAME, "chatName=? and whos=?", new String[]{msgId,Constants.USER_NAME});
}
public void clear(){
db.delete(helper.DB_NAME, "id>?", new String[]{"0"});
}
}