package com.litesuits.orm.db.assit;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.litesuits.orm.log.OrmLog;
/**
* 辅助查询
*
* @author MaTianyu
* @date 2013-6-15下午11:11:02
*/
public class Querier {
private static final String TAG = Querier.class.getSimpleName();
/**
* 因为每个查询都不一样,但又有相同的结构,这种形式维持代码的统一性,也可以个性化解析。
*/
public static <T> T doQuery(SQLiteDatabase db, SQLStatement st, CursorParser<T> parser) {
if (OrmLog.isPrint) {
OrmLog.d(TAG, "----> Query Start: " + st.toString());
}
Cursor cursor = db.rawQuery(st.sql, (String[]) st.bindArgs);
if (cursor != null) {
parser.process(db, cursor);
if (OrmLog.isPrint) {
OrmLog.d(TAG, "<---- Query End , cursor size : " + cursor.getCount());
}
} else {
if (OrmLog.isPrint) {
OrmLog.e(TAG, "<---- Query End : cursor is null");
}
}
return parser.returnResult();
}
/**
* A simple cursor parser
*
* @author MaTianyu
*/
public static abstract class CursorParser<T> {
private boolean parse = true;
public final void process(SQLiteDatabase db, Cursor cursor) {
try {
cursor.moveToFirst();
while (parse && !cursor.isAfterLast()) {
parseEachCursor(db, cursor);
cursor.moveToNext();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
}
public final void stopParse() {
parse = false;
}
public T returnResult() {
return null;
}
public abstract void parseEachCursor(SQLiteDatabase db, Cursor c) throws Exception;
}
}