package com.my_movingbricks.dbinit.tool;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.my_movingbricks.dbinit.db.DbManager;
import com.my_movingbricks.dbinit.db.MySQLiteOpenHelper;
import com.my_movingbricks.dbinit.dbinterface.ChannelDaoInface;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* TP0826 操作数据库的封装类
* Created by 搬砖小能手 on 2017/4/6.
* E-mail:40492459@qq.com.
* Signature:当你的才华满足不了你的野心的时候,那么你应该静下心来学习.
* Alert:语言的巨人,行动的矮子!
*/
public class ChannelDao<T> implements ChannelDaoInface<T> {
private DbManager manager;
private SQLiteDatabase db;
public ChannelDao() {
//创建数据库
manager = DbManager.newInstances();
db = manager.getDataBase();
}
/**
* 向数据库插入数据
*
* @param tableName 数据库插入数据的数据表
* @param item 数据库插入的对象
*/
@Override
public boolean addCache(String tableName, T item) {
boolean flag = false;
long id = 0;
Class clazz = item.getClass();
Field[] fields = clazz.getDeclaredFields();//获取该类所有的属性
ContentValues value = new ContentValues();
for (Field field : fields) {
try {
field.setAccessible(true); //取消对age属性的修饰符的检查访问,以便为属性赋值
String content = (String) field.get(item);//获取该属性的内容
value.put(field.getName(), content);
field.setAccessible(false);//恢复对age属性的修饰符的检查访问
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
id = db.insert(tableName, null, value);
flag = (id != -1 ? true : false);
return flag;
}
/**
* 删除数据
*
* @param tableName 删除数据库的表名
* @param whereClause 删除的字段名
* @param whereArgs 删除的字段的值
*/
@Override
public boolean deleteCache(String tableName, String whereClause, String whereArgs) {
boolean flag = false;
int count = 0;
count =db.delete(tableName, whereClause + "=?", new String[]{whereArgs});
flag = (count > 0 ? true : false);
return flag;
}
/**
* 更改数据库内容
*
* @param tableName 更改数据的数据表
* @param columnName 更改的数据的字段名
* @param columnValue 更改的数据的字段值
* @param object 更改的数据
*/
@Override
public boolean updateCache(String tableName, String columnName, String columnValue, Object object) {
boolean flag = false;
int count = 0;
try {
Class clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();//获取该类所有的属性
ContentValues value = new ContentValues();
for (Field field : fields) {
field.setAccessible(true); //取消对age属性的修饰符的检查访问,以便为属性赋值
String content = (String) field.get(object);//获取该属性的内容
value.put(field.getName(), content);
field.setAccessible(false);//恢复对age属性的修饰符的检查访问
}
count=db.update(tableName, value, columnName + "=?", new String[]{columnValue});
flag = (count > 0 ? true : false);
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
return flag;
}
/**
*
* @param tableName 查询的数据库的名字
* @param entityType 查询的数据库所对应的module
* @param fieldName 查询的字段名
* @param value 查询的字段值
* @param <T> 泛型代表AttendInformation,Customer,Order,User,WorkDaily类
* @return 返回查询结果,结果为AttendInformation,Customer,Order,User,WorkDaily对象
*/
@Override
public <T> ArrayList<T> queryCache(String tableName, Class<T> entityType, String fieldName, String value) {
ArrayList<T> list = new ArrayList();
Cursor cursor = db.query(tableName, null, fieldName + " like ?", new String[]{value}, null, null, " id desc", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {//返回游标是否指向第最后一行的位置
try {
T t = entityType.newInstance();
for (int i = 0; i < cursor.getColumnCount(); i++) {
String columnName = cursor.getColumnName(i);// 获取数据记录第i条字段名的
String content = cursor.getString(i);//获得获取的数据记录第i条字段的内容
Field field = entityType.getDeclaredField(columnName);//获取该字段名的Field对象。
field.setAccessible(true);//取消对age属性的修饰符的检查访问,以便为属性赋值
field.set(t, content);
field.setAccessible(false);//恢复对age属性的修饰符的检查访问
}
list.add(t);
cursor.moveToNext();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
return list;
}
/**
* 删除表中的数据
*/
@Override
public void clearFeedTable() {
String sql = "DELETE FROM " + MySQLiteOpenHelper.CREATE_CUSTOMER + ";";
db.execSQL(sql);
revertSeq();
}
/**
* 以SQLHelper.TABLE_CHANNEL表作为条件,新建表sqlite_sequence,当name=表名的时候
* 更新seq=0;
*/
private void revertSeq() {
String sql = "update sqlite_sequence set seq=0 where name='"
+ MySQLiteOpenHelper.CREATE_CUSTOMER + "'";
db.execSQL(sql);
}
//关闭数据库
private void OnCliar(ContentValues value) {
value.clear();
}
}
dbinit(AndroidSqList)
需积分: 14 167 浏览量
2017-10-27
10:59:04
上传
评论
收藏 8KB RAR 举报
搬磚小能手
- 粉丝: 16
- 资源: 7