反射问题,将数据库映射到java android对象
这是一个通用问题。我想实现一种方法,能够选择我的android SQLite数据库中的所有iTen,遵守以下限制反射问题,将数据库映射到java android对象,java,android,sqlite,generics,Java,Android,Sqlite,Generics,这是一个通用问题。我想实现一种方法,能够选择我的android SQLite数据库中的所有iTen,遵守以下限制 应该是通用的 应易于使用 我在这里,让我尽我所能展示: public <T extends GenericnessFactory<T>> List<T> selectAll(T returningClass){ List<T> objects = new ArrayList<T>(); String n
- 应该是通用的李>
- 应易于使用李>
public <T extends GenericnessFactory<T>> List<T> selectAll(T returningClass){
List<T> objects = new ArrayList<T>();
String name = returningClass.getClass().getSimpleName();
Field[] fields = returningClass.getClass().getFields();
String[] columns = new String[fields.length];
for(int i = 0; i < fields.length; i++){
columns[i] = fields[i].getName();
}
SQLiteDatabase readable = getReadableDatabase();
Cursor c = readable.query(name, columns, null,null, null, null, null);
if(c.moveToFirst()){
T item = returningClass.generate();
}
c.close();
return objects;
}
任何解决方案都会让我感到高兴,但如果您能解释,我会很高兴理解您的解决方案。假设您的所有列都是VARCHAR类型,只需调用java.lang.Field.set()方法传递光标读取的列的值即可。如果您想读取其他类型,恐怕您必须编写一个丑陋的类型匹配级联来调用setFloat()setDouble()等。 检查目标字段是否为final、static、transient或private也是一个好主意
public <T extends GenericnessFactory<T>> List<T> selectAll(T returningClass){
List<T> objects = new ArrayList<T>();
String name = returningClass.getClass().getSimpleName();
Field[] fields = returningClass.getClass().getFields();
int fieldCount = fields.length;
String[] columns = new String[fieldCount];
HashMap<String,Field> fieldMap = new HashMap<String,Field>();
for (int i = 0; i < fieldCount; i++) {
Field fld = fields[i];
int mods = fld.getModifiers();
if (!Modifier.isFinal(mods) && ! Modifier.isTransient(mods) && !Modifier.isStatic(mods)) {
columns[i] = fld.getName();
fieldMap.put(columns[i], fld);
}
}
SQLiteDatabase readable = getReadableDatabase();
Cursor c = readable.query(name, columns, null,null, null, null, null);
if (c.moveToFirst()) {
T item = returningClass.generate();
for (int i = 0; i < fieldCount; i++) {
fieldMap.get(columns[i]).set(item, c.getString(i));
}
}
c.close();
return objects;
}
public List selectAll(T returningClass){
列表对象=新的ArrayList();
字符串名称=returningClass.getClass().getSimpleName();
Field[]fields=returningClass.getClass().getFields();
int fieldCount=fields.length;
String[]columns=新字符串[fieldCount];
HashMap fieldMap=新的HashMap();
对于(int i=0;i
我想看看西红柿库——它是一个java ORM,没有依赖性,非常小,速度非常快,使用非常方便
网址是
public <T extends GenericnessFactory<T>> List<T> selectAll(T returningClass){
List<T> objects = new ArrayList<T>();
String name = returningClass.getClass().getSimpleName();
Field[] fields = returningClass.getClass().getFields();
int fieldCount = fields.length;
String[] columns = new String[fieldCount];
HashMap<String,Field> fieldMap = new HashMap<String,Field>();
for (int i = 0; i < fieldCount; i++) {
Field fld = fields[i];
int mods = fld.getModifiers();
if (!Modifier.isFinal(mods) && ! Modifier.isTransient(mods) && !Modifier.isStatic(mods)) {
columns[i] = fld.getName();
fieldMap.put(columns[i], fld);
}
}
SQLiteDatabase readable = getReadableDatabase();
Cursor c = readable.query(name, columns, null,null, null, null, null);
if (c.moveToFirst()) {
T item = returningClass.generate();
for (int i = 0; i < fieldCount; i++) {
fieldMap.get(columns[i]).set(item, c.getString(i));
}
}
c.close();
return objects;
}