package com.wyp.materialqqlite.qqclient.msglog;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class MessageLogger {
private SQLiteDatabase m_DB;
synchronized public boolean open(String strPath) {
try {
close();
m_DB = SQLiteDatabase.openOrCreateDatabase(strPath, null);
if (m_DB != null) {
// 创建好友消息表
m_DB.execSQL("CREATE TABLE IF NOT EXISTS [tb_BuddyMsg] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [uin] INTEGER, [nickname] TEXT, [time] INTEGER, [sendflag] INTEGER, [content] TEXT)");
// 创建群消息表
m_DB.execSQL("CREATE TABLE IF NOT EXISTS [tb_GroupMsg] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [groupnum] INTEGER, [uin] INTEGER, [nickname] TEXT, [time] INTEGER, [content] TEXT)");
// 创建临时会话(群成员)消息表
m_DB.execSQL("CREATE TABLE IF NOT EXISTS [tb_SessMsg] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [uin] INTEGER, [nickname] TEXT, [time] INTEGER, [sendflag] INTEGER, [content] TEXT)");
return true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
synchronized public void close() {
if (m_DB != null && m_DB.isOpen())
m_DB.close();
}
synchronized public boolean isOpen() {
return (m_DB != null && m_DB.isOpen());
}
// 写入一条好友消息记录
synchronized public boolean writeBuddyMsgLog(int nQQNum,
String strNickName, int nTime, boolean bSendFlag, String strContent) {
BuddyMsgLog msgLog = new BuddyMsgLog();
msgLog.m_nQQNum = nQQNum;
msgLog.m_strNickName = strNickName;
msgLog.m_nTime = nTime;
msgLog.m_bSendFlag = bSendFlag;
msgLog.m_strContent = strContent;
return writeBuddyMsgLog(msgLog);
}
// 写入一条群消息记录
synchronized public boolean writeGroupMsgLog(int nGroupNum,
int nQQNum, String strNickName, int nTime, String strContent) {
GroupMsgLog msgLog = new GroupMsgLog();
msgLog.m_nGroupNum = nGroupNum;
msgLog.m_nQQNum = nQQNum;
msgLog.m_strNickName = strNickName;
msgLog.m_nTime = nTime;
msgLog.m_strContent = strContent;
return writeGroupMsgLog(msgLog);
}
// 写入一条临时会话(群成员)消息记录
synchronized public boolean writeSessMsgLog(int nQQNum,
String strNickName, int nTime, boolean bSendFlag, String strContent) {
SessMsgLog msgLog = new SessMsgLog();
msgLog.m_nQQNum = nQQNum;
msgLog.m_strNickName = strNickName;
msgLog.m_nTime = nTime;
msgLog.m_bSendFlag = bSendFlag;
msgLog.m_strContent = strContent;
return writeSessMsgLog(msgLog);
}
// 写入一条好友消息记录
synchronized public boolean writeBuddyMsgLog(BuddyMsgLog msgLog) {
if (null == m_DB || !m_DB.isOpen())
return false;
ContentValues values = new ContentValues();
values.put("uin", msgLog.m_nQQNum);
values.put("nickname", msgLog.m_strNickName);
values.put("time", msgLog.m_nTime);
values.put("sendflag", msgLog.m_bSendFlag);
values.put("content", msgLog.m_strContent);
long lRowId = m_DB.insert("tb_BuddyMsg", null, values);
return (lRowId != -1) ? true : false;
}
// 写入一条群消息记录
synchronized public boolean writeGroupMsgLog(GroupMsgLog msgLog) {
if (null == m_DB || !m_DB.isOpen())
return false;
ContentValues values = new ContentValues();
values.put("groupnum", msgLog.m_nGroupNum);
values.put("uin", msgLog.m_nQQNum);
values.put("nickname", msgLog.m_strNickName);
values.put("time", msgLog.m_nTime);
values.put("content", msgLog.m_strContent);
long lRowId = m_DB.insert("tb_GroupMsg", null, values);
return (lRowId != -1) ? true : false;
}
// 写入一条临时会话(群成员)消息记录
synchronized public boolean writeSessMsgLog(SessMsgLog msgLog) {
if (null == m_DB || !m_DB.isOpen())
return false;
ContentValues values = new ContentValues();
values.put("uin", msgLog.m_nQQNum);
values.put("nickname", msgLog.m_strNickName);
values.put("time", msgLog.m_nTime);
values.put("sendflag", msgLog.m_bSendFlag);
values.put("content", msgLog.m_strContent);
long lRowId = m_DB.insert("tb_SessMsg", null, values);
return (lRowId != -1) ? true : false;
}
// 读出最后一条好友消息记录
synchronized public BuddyMsgLog readLastBuddyMsgLog(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return null;
String strSql = "SELECT * FROM [tb_BuddyMsg] WHERE [uin]=? ORDER BY [time] DESC LIMIT 0,1";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
BuddyMsgLog msgLog = new BuddyMsgLog();
while (cursor.moveToNext()) {
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_bSendFlag = (cursor.getInt(cursor.getColumnIndex("sendflag")) != 0 ? true : false);
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
}
cursor.close();
return msgLog;
}
// 读出最后一条群消息记录
synchronized public GroupMsgLog readLastGroupMsgLog(int nGroupNum) {
if (null == m_DB || !m_DB.isOpen())
return null;
String strSql = "SELECT * FROM [tb_GroupMsg] WHERE [groupnum]=? ORDER BY [time] DESC LIMIT 0,1";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nGroupNum)});
GroupMsgLog msgLog = new GroupMsgLog();
while (cursor.moveToNext()) {
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nGroupNum = cursor.getInt(cursor.getColumnIndex("groupnum"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
}
cursor.close();
return msgLog;
}
// 读出最后一条临时会话(群成员)消息记录
synchronized public SessMsgLog readLastSessMsgLog(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return null;
String strSql = "SELECT * FROM [tb_SessMsg] WHERE [uin]=? ORDER BY [time] DESC LIMIT 0,1";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
SessMsgLog msgLog = new SessMsgLog();
while (cursor.moveToNext()) {
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_bSendFlag = (cursor.getInt(cursor.getColumnIndex("sendflag")) != 0 ? true : false);
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
}
cursor.close();
return msgLog;
}
// 读出一条或多条好友消息记录
synchronized public int readBuddyMsgLog(int nQQNum,
int nOffset, int nRows, List<BuddyMsgLog> arrMsgLog) {
if (null == m_DB || !m_DB.isOpen() || null == arrMsgLog)
return 0;
// int nMsgCnt = readBuddyMsgLogCount(nQQNum, nOffset, nRows);
// if (nMsgCnt <= 0)
// return 0;
String strSql = "";
if (0 == nOffset && 0 == nRows)
strSql = "SELECT * FROM [tb_BuddyMsg] WHERE [uin]=? ORDER BY [time]";
else
strSql = "SELECT * FROM [tb_BuddyMsg] WHERE [uin]=? ORDER BY [time] LIMIT ?,?";
Cursor cursor = null;
if (0 == nOffset && 0 == nRows) {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
} else {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum),
String.valueOf(nOffset), String.valueOf(nRows)});
}
while (cursor.moveToNext()) {
BuddyMsgLog msgLog = new BuddyMsgLog();
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_bSendFlag = (cursor.getInt(cursor.getColumnIndex("sendflag")) != 0 ? true : false);
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
arrMsgLog.add(msgLog);
}
cursor.close();
return arrMsgLog.size();
}
// 读出一条或多条群消息记录
synchronized public int readGroupMsgLog(int nGroupNum,
int nOffset, int nRows, List<GroupMsgLog> arrMsgLog) {
if (null == m_DB || !m_DB.isOpen() || null == arrMsgLog)
return 0;
// int nMsgCnt = readGroupMsgLogCount(nGroupNum, nOffset, nRows);
// if (nMsgCnt <= 0)
// return 0;
String strSql = "";
if (0 == nOffset && 0 == nRows)
strSql = "SELECT * FROM [tb_GroupMsg] WHERE [groupnum]=? ORDER BY [time]";
else
strSql = "SELECT * FROM [tb_GroupMsg] WHERE [groupnum]=? ORDER BY [time] LIMIT ?,?";
Cursor cursor = null;
if (0 == nOffset && 0 == nRows) {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nGroupNum)});
} else {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nGroupNum),
String.valueOf(nOffset), String.valueOf(nRows)});
}
while (cursor.moveToNext()) {
GroupMsgLog msgLog = new GroupMsgLog();
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nGroupNum = cursor.getInt(cursor.getColumnIndex("groupnum"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
arrMsgLog.add(msgLog);
}
cursor.close();
return arrMsgLog.size();
}
// 读出一条或多条临时会话(群成员)消息记录
synchronized public int readSessMsgLog(int nQQNum,
int nOffset, int nRows, List<SessMsgLog> arrMsgLog) {
if (null == m_DB || !m_DB.isOpen() || null == arrMsgLog)
return 0;
// int nMsgCnt = readSessMsgLogCount(nQQNum, nOffset, nRows);
// if (nMsgCnt <= 0)
// return 0;
String strSql = "";
if (0 == nOffset && 0 == nRows)
strSql = "SELECT * FROM [tb_SessMsg] WHERE [uin]=? ORDER BY [time]";
else
strSql = "SELECT * FROM [tb_SessMsg] WHERE [uin]=? ORDER BY [time] LIMIT ?,?";
Cursor cursor = null;
if (0 == nOffset && 0 == nRows) {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
} else {
cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum),
String.valueOf(nOffset), String.valueOf(nRows)});
}
while (cursor.moveToNext()) {
SessMsgLog msgLog = new SessMsgLog();
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_bSendFlag = (cursor.getInt(cursor.getColumnIndex("sendflag")) != 0 ? true : false);
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
arrMsgLog.add(msgLog);
}
cursor.close();
return arrMsgLog.size();
}
// 获取好友消息记录数
synchronized public int getBuddyMsgLogCount(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM [tb_BuddyMsg] WHERE [uin]=?";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
// 获取群消息记录数
synchronized public int getGroupMsgLogCount(int nGroupNum) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM [tb_GroupMsg] WHERE [groupnum]=?";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nGroupNum)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
// 获取临时会话(群成员)消息记录数
synchronized public int getSessMsgLogCount(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM [tb_SessMsg] WHERE [uin]=?";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
// 删除所有好友消息记录
synchronized public boolean delAllBuddyMsgLog() {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_BuddyMsg", null, null);
return ((nRowCnt != 0) ? true : false);
}
// 删除所有群消息记录
synchronized public boolean delAllGroupMsgLog() {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_GroupMsg", null, null);
return ((nRowCnt != 0) ? true : false);
}
// 删除所有临时会话(群成员)消息记录
synchronized public boolean delAllSessMsgLog() {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_SessMsg", null, null);
return ((nRowCnt != 0) ? true : false);
}
// 删除指定好友的所有消息记录
synchronized public boolean delBuddyMsgLog(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_BuddyMsg",
"uin=?", new String[]{String.valueOf(nQQNum)});
return ((nRowCnt != 0) ? true : false);
}
// 删除指定群的所有消息记录
synchronized public boolean delGroupMsgLog(int nGroupNum) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_GroupMsg",
"groupnum=?", new String[]{String.valueOf(nGroupNum)});
return ((nRowCnt != 0) ? true : false);
}
// 删除指定临时会话(群成员)的所有消息记录
synchronized public boolean delSessMsgLog(int nQQNum) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_SessMsg",
"uin=?", new String[]{String.valueOf(nQQNum)});
return ((nRowCnt != 0) ? true : false);
}
// 删除指定ID的好友消息记录
synchronized public boolean delBuddyMsgLogByID(int nID) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_BuddyMsg",
"id=?", new String[]{String.valueOf(nID)});
return ((nRowCnt != 0) ? true : false);
}
// 删除指定ID的群消息记录
synchronized public boolean delGroupMsgLogByID(int nID) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_GroupMsg",
"id=?", new String[]{String.valueOf(nID)});
return ((nRowCnt != 0) ? true : false);
}
// 删除指定ID的临时会话(群成员)消息记录
synchronized public boolean delSessMsgLogByID(int nID) {
if (null == m_DB || !m_DB.isOpen())
return false;
int nRowCnt = m_DB.delete("tb_SessMsg",
"id=?", new String[]{String.valueOf(nID)});
return ((nRowCnt != 0) ? true : false);
}
synchronized public int readBuddyMsgLogCount(int nQQNum,
int nOffset, int nRows) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM (SELECT * FROM [tb_BuddyMsg] WHERE [uin]=? ORDER BY [time] LIMIT ?,?)";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum),
String.valueOf(nOffset), String.valueOf(nRows)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
synchronized public int readGroupMsgLogCount(int nGroupNum,
int nOffset, int nRows) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM (SELECT * FROM [tb_GroupMsg] WHERE [groupnum]=? ORDER BY [time] LIMIT ?,?)";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nGroupNum),
String.valueOf(nOffset), String.valueOf(nRows)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
synchronized public int readSessMsgLogCount(int nQQNum,
int nOffset, int nRows) {
if (null == m_DB || !m_DB.isOpen())
return 0;
int nCount = 0;
String strSql = "SELECT COUNT(*) FROM (SELECT * FROM [tb_SessMsg] WHERE [uin]=? ORDER BY [time] LIMIT ?,?)";
Cursor cursor = m_DB.rawQuery(strSql,
new String[]{String.valueOf(nQQNum),
String.valueOf(nOffset), String.valueOf(nRows)});
if (cursor.getCount() == 1) {
cursor.move(1);
nCount = cursor.getInt(0);
}
cursor.close();
return nCount;
}
synchronized public int readAllGroupLastMsg(List<GroupMsgLog> arrMsgLog) {
if (null == m_DB || !m_DB.isOpen() || null == arrMsgLog)
return 0;
String strSql = "SELECT * FROM [tb_GroupMsg] GROUP BY [groupnum] HAVING time=max(time)";
Cursor cursor = m_DB.rawQuery(strSql, null);
while (cursor.moveToNext()) {
GroupMsgLog msgLog = new GroupMsgLog();
msgLog.m_nID = cursor.getInt(cursor.getColumnIndex("id"));
msgLog.m_nGroupNum = cursor.getInt(cursor.getColumnIndex("groupnum"));
msgLog.m_nQQNum = cursor.getInt(cursor.getColumnIndex("uin"));
msgLog.m_strNickName = cursor.getString(cursor.getColumnIndex("nickname"));
msgLog.m_nTime = cursor.getInt(cursor.getColumnIndex("time"));
msgLog.m_strContent = cursor.getString(cursor.getColumnIndex("content"));
arrMsgLog.add(msgLog);
}
cursor.close();
return arrMsgLog.size();
}
}