package com.openims.model.chat;
import org.jivesoftware.smackx.packet.VCard;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.openims.utility.LogUtil;
public class VCardDataBase {
private static final String TAG = LogUtil.makeLogTag(VCardDataBase.class);
private static final String PRE = "Class VCardDataBase--";
private static final String DATABASE_NAME = "vcard.db";
private static final String TABLE_NAME = "vcard";
private static final int DATABASE_VERSION = 1;
public static final String ID = "_id";
public static final String ADMIN = "admin";
public static final String JID = "jid";
public static final String USER_NAME = "user_name";
public static final String NICK = "nick";
public static final String SEX = "sex";
public static final String BIRTHDAY = "birthday";
public static final String STATE = "state";
public static final String PROVINCE = "province";
public static final String CITY = "city";
public static final String OFFICE = "office";
public static final String MOB = "mob";
public static final String EMAIL = "email";
public static final String WEIBO = "weibo";
public static final String NOTE = "note";
public static final String AvaterUrl = "avaterUrl";
public static final String Avater = "avater";
public static final String FLAG = "FLAG";
private DatabaseHelper dbHelper;
private String mAdmin;
public VCardDataBase(Context context, String mAdmin){
this.mAdmin = mAdmin;
dbHelper = new DatabaseHelper(context,DATABASE_NAME);
}
public synchronized void close(){
if(dbHelper != null){
dbHelper.close();
}
}
public Cursor queryItems(int startId,int nNum,boolean bSmall){
SQLiteDatabase db = dbHelper.getReadableDatabase();
String where;
String orderBy;
String limit;
if(bSmall){
where = ID + "<=" + startId;
orderBy = ID + " DESC";
}else{
where = ID + ">=" + startId;
orderBy = ID + " ASC";
}
if(nNum == -1){
limit = null;
}else{
limit = String.valueOf(nNum);
}
if(startId == -1){
where = null;
}
return db.query(TABLE_NAME,null,where,null,null,null,
orderBy,limit);
}
public long insert(String jid){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(JID, jid);
values.put(ADMIN, mAdmin);
return db.insert(TABLE_NAME, null, values);
}
public long insert(String jid, VCard vcard){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(JID, jid);
values.put(ADMIN, mAdmin);
values.put(USER_NAME, vcard.getFirstName());
values.put(NICK, vcard.getNickName());
values.put(SEX, vcard.getNickName());
values.put(BIRTHDAY, "null");
values.put(STATE, vcard.getOrganization());
values.put(PROVINCE, "null");
values.put(CITY, "null");
values.put(OFFICE, vcard.getPhoneWork("CELL"));
values.put(MOB, vcard.getPhoneHome("CELL"));
values.put(EMAIL, vcard.getEmailWork());
values.put(WEIBO, vcard.getEmailHome());
values.put(NOTE, "null");
values.put(AvaterUrl, "null");
values.put(Avater, vcard.getAvatar());
long n = db.insert(TABLE_NAME, null, values);
db.close();
return n;
}
public int updateColumn(String jid, String columnName, int value){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(columnName, value);
return db.update(TABLE_NAME, values, ADMIN + "=\"" + mAdmin + "\" AND " + JID+"=\""+jid+"\"", null);
}
public int updateColumn(String jid, String columnName, String value){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(columnName, value);
return db.update(TABLE_NAME, values, ADMIN + "=\"" + mAdmin + "\" AND " + JID+"=\""+jid+"\"", null);
}
public void removeAll(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(TABLE_NAME, ADMIN + "=\"" + mAdmin + "\"", null);
}
public Cursor queryAll(){
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, ADMIN + "=\"" + mAdmin + "\"",
null,null,null,null);
return cursor;
}
public Cursor queryById(long id){
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, ID + "=" + id,
null,null,null,null);
return cursor;
}
public Cursor queryByJId(String jid){
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, JID + "=\"" + jid + "\"",
null,null,null,null);
return cursor;
}
public void dropTable(){
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}
/**
*
* @param always false add if not exists in SQL
* @return
* @throws Exception
*/
private String getCreateTableSQL(){
StringBuilder sql = new StringBuilder();
sql.append("CREATE TABLE ");
sql.append(TABLE_NAME+"("+
ID+" INTEGER PRIMARY KEY," +
ADMIN+" TEXT,"+
JID+" TEXT not null,"+
USER_NAME+" TEXT,"+
NICK+" TEXT,"+
SEX+" INTEGER,"+
BIRTHDAY+" TEXT,"+
STATE+" TEXT,"+
PROVINCE + " TEXT," +
CITY + " TEXT," +
OFFICE + " TEXT," +
MOB + " TEXT," +
EMAIL + " TEXT," +
WEIBO + " TEXT," +
NOTE + " TEXT," +
AvaterUrl + " TEXT," +
Avater + " BLOB," +
FLAG+" TEXT "+ ");" );
Log.i(TAG,PRE +"create table--" + sql);
return sql.toString();
}
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name) {
super(context, name, null, DATABASE_VERSION);
Log.i(TAG,PRE + "DatabaseHelper");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(getCreateTableSQL());
} catch (SQLException e) {
e.printStackTrace();
Log.e(TAG,TAG+"create table fail:");
} catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL(getCreateTableSQL());
} catch (SQLException e) {
Log.e(TAG,PRE + "upgrade table fail");
e.printStackTrace();
} catch (Exception e){
Log.e(TAG, PRE + e.getMessage());
e.printStackTrace();
}
}
}
}