package com.qmusic.dal;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.provider.BaseColumns;
public abstract class BaseTable implements BaseColumns {
static final String TAG = BaseTable.class.getSimpleName();
private HashMap<String, Class<?>> fields;
public BaseTable() {
fields = new HashMap<String, Class<?>>();
fields.put(_ID, Integer.class);
initField(fields);
}
public Collection<String> getKeys() {
return fields.keySet();
}
public HashMap<String, Class<?>> getFields() {
return fields;
}
protected abstract String getTableName();
protected abstract void initField(HashMap<String, Class<?>> fields);
protected void createTable(SQLiteDatabase db) {
String tableName = getTableName();
HashMap<String, Class<?>> fields = getFields();
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE ").append(tableName).append(" (");
Set<String> keys = fields.keySet();
boolean isFirst = true;
for (String key : keys) {
if (isFirst) {
isFirst = false;
} else {
sb.append(",");
}
sb.append(" [").append(key).append("] ");
Class<?> type = fields.get(key);
if (Integer.class.equals(type) || int.class.equals(type) || Long.class.equals(type)
|| long.class.equals(type)) {
sb.append(" INTEGER ");
if (key.equals(_ID)) {
sb.append(" PRIMARY KEY AUTOINCREMENT ");
}
} else if (String.class.equals(type)) {
sb.append(" TEXT ");
} else if (Float.class.equals(type) || float.class.equals(type) || Double.class.equals(type)
|| double.class.equals(type)) {
sb.append(" REAL ");
} else if (Boolean.class.equals(type) || boolean.class.equals(type)) {
sb.append(" NUMERIC ");
} else {// BLOB
sb.append(" BLOB ");
}
}
sb.append(") ;");
db.execSQL(sb.toString());
}
protected void createIndex(SQLiteDatabase db, String[] cloumns) {
if (cloumns != null && cloumns.length > 0) {
StringBuilder sb = new StringBuilder();
final String FORMAT = " CREATE INDEX INDEX_%s_%d on %s ([%s]); ";
final String tableName = getTableName();
for (int i = 0; i < cloumns.length; i++) {
sb.append(String.format(FORMAT, tableName, i, tableName, cloumns[i]));
}
db.execSQL(sb.toString());
}
}
public Cursor query(String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
String orderBy) {
Cursor cursor = null;
try {
cursor = BDatabaseHelper.getDatabase().query(getTableName(), columns, selection, selectionArgs, groupBy,
having, orderBy);
} catch (Exception ex) {
ex.printStackTrace();
}
return cursor;
}
public Cursor query(String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) {
Cursor cursor = null;
try {
cursor = BDatabaseHelper.getDatabase().query(getTableName(), columns, selection, selectionArgs, groupBy,
having, orderBy, limit);
} catch (Exception ex) {
ex.printStackTrace();
}
return cursor;
}
public long insert(ContentValues values) {
long result = 0;
try {
result = BDatabaseHelper.getDatabase().insert(getTableName(), null, values);
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
public int update(ContentValues values, String whereClause, String[] whereArgs) {
int result = 0;
try {
result = BDatabaseHelper.getDatabase().update(getTableName(), values, whereClause, whereArgs);
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
public int delete(String whereClause, String[] whereArgs) {
int result = 0;
try {
result = BDatabaseHelper.getDatabase().delete(getTableName(), whereClause, whereArgs);
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
public void clear() {
try {
BDatabaseHelper.getDatabase().delete(getTableName(), null, null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}