package com.anthony.library.data.dao;
import com.anthony.library.BaseApplication;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.j256.ormlite.stmt.QueryBuilder;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.List;
public class BaseDao<T> {
protected Class<T> clazz;
protected Dao<T, Integer> daoOpe;
/**
* get dao class through {@link BaseApplication}
*
* @param sqliteOpenHelper using this to get instance of DatabaseHelper
*/
public BaseDao(OrmLiteSqliteOpenHelper sqliteOpenHelper) {
Class clazz = getClass();
while (clazz != Object.class) {
Type t = clazz.getGenericSuperclass();
if (t instanceof ParameterizedType) {
Type[] args = ((ParameterizedType) t).getActualTypeArguments();
if (args[0] instanceof Class) {
this.clazz = (Class<T>) args[0];
break;
}
}
clazz = clazz.getSuperclass();
}
try {
if (sqliteOpenHelper == null) {
throw new RuntimeException("No DbHelper Found!");
}
daoOpe = sqliteOpenHelper.getDao(this.clazz);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void add(T t) {
try {
daoOpe.create(t);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(T t) {
try {
daoOpe.delete(t);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update(T t) {
try {
daoOpe.update(t);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<T> all() {
try {
return daoOpe.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public List<T> queryByColumn(String columnName, Object columnValue) {
try {
QueryBuilder builder = daoOpe.queryBuilder();
builder.where().eq(columnName, columnValue);
return builder.query();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public List<T> queryByColumn(String columnName1, Object columnValue1,
String columnName2, Object columnValue2) {
try {
QueryBuilder builder = daoOpe.queryBuilder();
builder.where().eq(columnName1, columnValue1).and().eq(columnName2, columnValue2);
return builder.query();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public void deleteByColumn(String columnName1, Object columnValue1,
String columnName2, Object columnValue2) {
try {
DeleteBuilder builder = daoOpe.deleteBuilder();
builder.where().eq(columnName1, columnValue1).and().eq(columnName2, columnValue2);
builder.delete();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteByColumn(String columnName, Object columnValue) {
try {
DeleteBuilder builder = daoOpe.deleteBuilder();
builder.where().eq(columnName, columnValue);
builder.delete();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void clearAll() {
try {
daoOpe.deleteBuilder().delete();
} catch (SQLException e) {
e.printStackTrace();
}
}
public long count() {
try {
return daoOpe.countOf();
} catch (SQLException e) {
e.printStackTrace();
return 0;
}
}
public void createOrUpdate(T t) {
try {
daoOpe.createOrUpdate(t);
} catch (SQLException e) {
e.printStackTrace();
}
}
}