加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite DB

发布时间:2020-12-12 20:10:07 所属栏目:百科 来源:网络整理
导读:package sqliteDB;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DbHelper extends SQLiteO
package sqliteDB;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper {

	private static final String DATABASE_NAME = "ChatSysDemo.db";
	private static final int DATABASE_VERSION = 1;

	public DbHelper(Context context) {
		super(context,DATABASE_NAME,null,DATABASE_VERSION);
		// TODO Auto-generated constructor stub
	}

	// 数据库第一次被创建时onCreate会被调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		//历史消息记录表
		db.execSQL("CREATE TABLE IF NOT EXISTS message_record"
				+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT,sender TEXT,receiver TEXT,msg TEXT,time TEXT)");
		//会话表
		db.execSQL("CREATE TABLE IF NOT EXISTS session_record"   //type标示是否为好友
				+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT,userId INTEGER UNIQUE,userName TEXT,lastMsg TEXT,type INTEGER)");
		//好友列表
		db.execSQL("CREATE TABLE IF NOT EXISTS friends_list"
				+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT,headImageUrl)"); 
	}

	// 如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
	@Override
	public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
		db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
	}
}

package sqliteDB;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import commontool.friendslistPro;

import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Session;

import android.R.integer;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DBManager {
	private DbHelper helper;
	private SQLiteDatabase db;

	public DBManager(Context context) {
		helper = new DbHelper(context);
		// 因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName,// mFactory);
		// 所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里
		//最好不要在主线程调用
		db = helper.getWritableDatabase(); // 调用helper类的oncreate方法
	}
////////////////////////Add///////////////////
	/**
	 * 添加消息记录
	 * @param List<MessageClass> messages
	 */
	public void addMessageRecord(List<ChatContentMessage> messages) {
		db.beginTransaction(); // 开始事务
		try {
			for (ChatContentMessage message : messages) {
				db.execSQL(
						"INSERT INTO message_record VALUES(null,?,?)",new Object[] { message.sender,message.receiver,message.msg,message.time });
			}
			db.setTransactionSuccessful(); // 设置事务成功完成
		} finally {
			db.endTransaction(); // 结束事务
		}
	}
	
	public void updateFriendsList(List<Friends> friends) {
		db.beginTransaction(); // 开始事务
		try {
			db.delete("friends_list",null);
			for (Friends friend : friends) {
				db.execSQL(
						"INSERT INTO friends_list VALUES(null,new Object[] { String.valueOf(friend.userId),friend.userName,friend.headImageUrl });
			}
			db.setTransactionSuccessful(); // 设置事务成功完成
		} finally {
			db.endTransaction(); // 结束事务
		}
	}
	
	public void addFriends(Friends friend) {
		db.beginTransaction(); // 开始事务
		try {
				db.execSQL(
						"INSERT INTO friends_list VALUES(null,friend.headImageUrl });
				db.setTransactionSuccessful(); // 设置事务成功完成
		} finally {
			db.endTransaction(); // 结束事务
		}
	}
	
	public void addSessionRecord(List<Session> sessions) {
		db.beginTransaction(); // 开始事务
		try {
			db.delete("session_record",null);//更新太麻烦,直接先删掉所有的会话记录
			for (Session session : sessions) {
				db.execSQL(
						"INSERT INTO session_record VALUES(null,new Object[] { session.userId,session.userName,session.lastMessage,session.type });
			}
			db.setTransactionSuccessful(); // 设置事务成功完成
		} finally {
			db.endTransaction(); // 结束事务
		}
	}

	
	/**
	 * 获取hostUserName与guestuserName的聊天消息
	 * @return List<Person>
	 */
	public ArrayList<ChatContentMessage> queryMessagesRecord(String hostUserName,String guestuserName) {
		ArrayList<ChatContentMessage> messages = new ArrayList<ChatContentMessage>();
		Cursor c = queryTheMessageCursor(hostUserName,guestuserName);
		while (c.moveToNext()) {
			ChatContentMessage message = new ChatContentMessage();
			message.sender = c.getString(c.getColumnIndex("sender"));
			message.receiver = c.getString(c.getColumnIndex("receiver"));
			message.msg = c.getString(c.getColumnIndex("msg"));
			message.time = c.getString(c.getColumnIndex("time"));
			messages.add(message);
		}
		c.close();
		return messages;
	}
	/**
	 * 
	 * @param hostUserName
	 * @param guestuserName
	 * @return
	 */
	public HashMap<String,ArrayList<ChatContentMessage>> queryAllHistoryMessagesRecord(String hostUserName,ArrayList<Friends> friendList) {
		HashMap<String,ArrayList<ChatContentMessage>> historyMessaHashMap = new HashMap<String,ArrayList<ChatContentMessage>>();
		Iterator<Friends> iterator=friendList.iterator();
		String guestuserName;
		while (iterator.hasNext()) {
			Friends friend = iterator.next();
			guestuserName=friend.userName;
			ArrayList<ChatContentMessage> messageList=queryMessagesRecord(hostUserName,guestuserName);
			historyMessaHashMap.put(guestuserName,messageList);
		}
		return historyMessaHashMap;
	}
	//根据type查不同的会话记录(好友,非好友)
	public ArrayList<Friends> queryAllFriends() {
		ArrayList<Friends> friends = new ArrayList<Friends>();
		Cursor c = queryFriendsCursor();
		while (c.moveToNext()) {
			Friends friend = new Friends();
			friend.userId = c.getInt(c.getColumnIndex("userId"));
			friend.userName = c.getString(c.getColumnIndex("userName"));
			friend.headImageUrl = c.getString(c.getColumnIndex("headImageUrl"));
			friends.add(friend);
		}
		c.close();
		return friends;
	}

	public ArrayList<Session> queryAllSession(String userName,int type) {
		ArrayList<Session> sessions = new ArrayList<Session>();
		Cursor c = queryTheSessionCursor(userName,type);
		while (c.moveToNext()) {
			Session session = new Session();
			session.userId = c.getInt(c.getColumnIndex("userId"));
			session.userName = c.getString(c.getColumnIndex("userName"));
			session.lastMessage = c.getString(c.getColumnIndex("lastMessage"));
			session.type = c.getInt(c.getColumnIndex("type"));
			sessions.add(session);
		}
		c.close();
		return sessions;
	}
	
	/**
	 * 获得Cursor数据集
	 * @return Cursor
	 */
	public Cursor queryTheMessageCursor(String sender,String receiver) {
		// 查询某两人的聊天记录
		Cursor c = db
				.rawQuery(
						"SELECT * FROM message_record where (sender = ? and receiver = ?) or (sender = ? and receiver = ?)",new String[] { sender,receiver,sender });
		return c;
	}
	
	//获取与某人的会话
	public Cursor queryTheSessionCursor(String sender,int type) {
		// 查询会话记录
		Cursor c = db
				.rawQuery(
						"SELECT * FROM session_record where type = ?",new String[] { String.valueOf(type)});
		return c;
	}
	
	//获取与某人的会话
	public Cursor queryFriendsCursor() {
		// 查询会话记录
		Cursor c = db.rawQuery(
	         "SELECT * FROM friends_list",null);
		return c;
	}
		
	
	
  public int deleteMessageRecordWithSb(String userName)
   {
	   return db.delete("message_record","sender = ? || receiver = ?",new String[]{userName,userName});
   }
 
   public int deleteAllMessageRecord()
   {
	   return db.delete("message_record",null);
   }
   public int deleteAllSessionRecord()
   {
	   return db.delete("session_record",null);
   }
   public int deleteAllFriends()
   {
	   return db.delete("friends_list",null);
   }
   
	/**
	 *关闭数据库
	 */
	public void closeDB() {
		db.close();
	}
	
	/**
	 * update person's age
	 * 
	 * @param person
	 */
	// public void updateAge(Person person) {
	// ContentValues cv = new ContentValues();
	// cv.put("age",person.age);
	// db.update("person",cv,"name = ?",new String[]{person.name});
	// }

	/**
	 * delete old person
	 * 
	 * @param person
	 */
	// public void deleteOldMessage(Person person) {
	// db.delete("person","age >= ?",new
	// String[]{String.valueOf(person.age)});
	// }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读