/**
* DB中IMUsers表操作类
* @author shuchen
*/
package com.mogujie.tt.db;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import com.mogujie.tt.entity.User;
import com.mogujie.tt.log.Logger;
public class UserModel {
private DBHelper helper;
private Logger logger = Logger.getLogger(UserModel.class);
@SuppressWarnings("unused")
private Context context = null;
/**
* @author shuchen
*/
public UserModel(Context context) {
this.context = context;
helper = DBHelper.getInstance(context);
// 因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName, 0,
// mFactory);
// 所以要确保context已初始化,我们可以把实例化DBManager的步骤放在Activity的onCreate里
}
/**
* add one user 新增一个用户
*
* @param user
*/
public void add(User user) {
if (null == user || null == user.getUserId()) {
return;
}
try {
this.add(user.getUserId(), user.getName(), user.getNickName(), user.getAvatarUrl(),
user.getTitle(), user.getPosition()
, user.getRoleStatus(), user.getSex(), user.getDepartId(), user.getJobNum(),
user.getTelphone(), user.getEmail(),
user.getCreated(), user.getUpdated());
} catch (SQLException e) {
logger.e(e.toString());
}
}
/**
* add list users 新增一坨用户
*
* @param users
*/
public void adds(List<User> users) {
try {
for (User user : users) {
this.add(user);
}
} catch (SQLException e) {
logger.e(e.toString());
}
}
/**
* update user's uname 更新用户的名字
*
* @param user
*/
public void updateUname(User user) {
if (null == user || null == user.getUserId()) {
return;
}
ContentValues cv = new ContentValues();
SQLiteDatabase dbMaster;
cv.put("uname", user.getName());
try {
dbMaster = helper.getWritableDatabase();
dbMaster.update(DBHelper.TABLE_USERS, cv, DBHelper.COLUMN_USER_NAME + " = ?",
new String[] {
user.getName()
});
} catch (SQLException e) {
logger.e(e.toString());
} finally {
// dbMaster.close();
}
}
/**
* update user's uname 更新用户的名字
*
* @param user
*/
private Integer force2update(User user) {
int msgId = 0;
if (null == user || null == user.getUserId()) {
return msgId;
}
Long timeNow = Long.valueOf(System.currentTimeMillis());
SQLiteDatabase dbMaster;
ContentValues cv = new ContentValues();
cv.put(DBHelper.COLUMN_USER_ID, user.getUserId());
cv.put(DBHelper.COLUMN_USER_NAME, user.getName());
cv.put(DBHelper.COLUMN_USER_NICKNAME, user.getNickName());
cv.put(DBHelper.COLUMN_USER_AVATAR, user.getAvatarUrl());
cv.put(DBHelper.COLUMN_UPDATED, timeNow);
try {
dbMaster = helper.getWritableDatabase();
msgId = dbMaster.update(DBHelper.TABLE_USERS, cv,
DBHelper.COLUMN_USER_ID + " = ? and "
+ DBHelper.COLUMN_USER_NAME + " = ? and "
+ DBHelper.COLUMN_USER_NICKNAME + " = ? and "
+ DBHelper.COLUMN_USER_AVATAR + " = ? and "
+ DBHelper.COLUMN_UPDATED + " = ? ",
new String[] {
user.getUserId(),
user.getName(),
user.getNickName(),
user.getAvatarUrl(),
String.valueOf(user.getUpdated())
});
} catch (SQLException e) {
logger.e(e.toString());
} finally {
// dbMaster.close();
}
return msgId;
}
/**
* update user's info 更新用户或添加用户
*
* @param user
*/
public Boolean update(User user) {
return this.update(user, false);
}
/**
* update user's info 更新用户或添加用户
*
* @param user
*/
public Boolean update(User user, Boolean forced) {
if (null == user || null == user.getUserId()) {
return false;
}
User oldUser = this.query(user.getUserId());
if (null == oldUser) {// 没有则添加
this.add(user);
return true;
}
int msgId;
if (forced) { // 如果强制更新则强制更新
msgId = this.force2update(user);
if (0 < msgId) {
return true;
}
return false;
}
if (oldUser.getName().equals(user.getName())
&& oldUser.getAvatarUrl().equals(user.getAvatarUrl())) {
return true; // 存在且相同直接返回
}
msgId = this.force2update(user); // 存在但不相同,则更新
if (0 < msgId) {
return true;
}
return false;
}
/**
* delete user 删除一个用户
*
* @param user
*/
public void delete(User user) {
if (null == user || null == user.getUserId()) {
return;
}
SQLiteDatabase dbMaster;
try {
dbMaster = helper.getWritableDatabase();
dbMaster.delete(DBHelper.TABLE_USERS, DBHelper.COLUMN_USER_ID + " == ?",
new String[] {
user.getUserId()
});
} catch (SQLException e) {
logger.e(e.toString());
} finally {
// dbMaster.close();
}
}
/**
* query all User, return list 查询所有用户
*
* @return List<User>
*/
public List<User> queryAll() {
ArrayList<User> users = new ArrayList<User>();
Cursor c = null;
SQLiteDatabase dbSlaver;
try {
dbSlaver = helper.getReadableDatabase();
c = dbSlaver.rawQuery(DBHelper.SELECT_ALL_USER_SQL, null);
User user = null;
while (c.moveToNext()) {
user = setUserInfo(c);
users.add(user);
}
} catch (SQLException e) {
logger.e(e.toString());
} finally {
if (null != c) {
c.close();
}
// dbSlaver.close();
}
return users;
}
/**
* query one User, return user 查询一个用户
*
* @param userId 用户ID
* @return User | null
*/
public User query(String userId) {
User user = null;
if (null == userId) {
return user;
}
SQLiteDatabase dbSlaver;
Cursor c = null;
try {
dbSlaver = helper.getReadableDatabase();
c = dbSlaver.rawQuery(DBHelper.SELECT_ALL_USER_SQL + " where "
+ DBHelper.COLUMN_USER_ID + " = '" + userId + "'", null);
while (c.moveToNext()) {
user = this.setUserInfo(c);
break;
}
} catch (SQLException e) {
logger.e(e.toString());
} finally {
if (null != c) {
c.close();
}
// dbSlaver.close();
}
return user;
}
/**
* add one user 新增一个用户
*
* @param userId 用户ID
* @param uname 用户名
* @param unick 用户昵称
* @param avatar 用户头像
* @param type 用户类型
* @param created 用户存储时间
* @param updated 用户更新时间
* @param user
*/
protected void add(String userId, String uname, String unick, String avatar, String title,
String position, int roleStatus, int sex, String departId, int jobNumber,
String telphone, String email, int created, int updated) {
int timeNow = (int) (Long.valueOf(System.currentTimeMillis()) / 1000);
created = (0 == created) ? timeNow : created;
updated = (0 == updated) ? timeNow : updated;
SQLiteDatabase dbMaster;
try {
dbMaster = helper.getWritableDatabase();
dbMaster.execSQL(DBHelper.INSERT_USER_SQL, new Object[] {
userId, uname, unick, avatar, title, position, roleStatus, sex, departId,
jobNumber, telphone, email, created, updated
});
} catch (SQLException e) {
logger.e(e.toString());
} finally {
// dbMaster.close();
}
}
private User setUserInfo(Cursor c) {
User ojUser = new User(); // 每次都新建一个对象
ojUser.setUserId(c.getString(c.getColumnIndex(DBHelper.COLUMN_USER_ID)));
ojUser.setName(c.getString(c.getColumnIndex(DBHelper.COLUMN_USER_NAME)));
ojUser.setNickName(c.getString(c.getColumnIndex(DBHelper.COLUMN_USER_NICKNAME)));
ojUser.setAvatarUrl(c.getString(c.getColumnIndex(DBHelper.COLUMN_USER_AVATAR)));
ojUser.setCreated(c.getInt(c.getColumnIndex(DBHelper.COLUMN_CREATED)));
ojUser.setUpdated(c.getInt(c.getColumnIndex(DBHelper.COLUMN_UPDATED)));
return ojUser;
}
}