反思问题,将数据库映射到对象java-android

时间:2016-10-25 08:55:20

标签: java android sqlite generics

我在这里遇到这个通用问题。我想实现一个方法,能够在我的android SQLite数据库中选择所有的itens,尊重以下限制。

  • 应该是通用的;
  • 应该易于使用;

我在这里,让我尽可能地展示:

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;
}

我将类名称视为表名,将字段视为列,但现在我觉得它很棘手,因为一旦T是通用的,我怎样才能将光标绑定到泛型类型?

只是为了知识,请转到我的GenericnessFactory界面:

public interface GenericnessFactory<T> {

    public T generate();
}

任何解决方案都会让我感到高兴,但如果你能解释我会非常高兴能够理解你的解决方案。

2 个答案:

答案 0 :(得分:0)

假设您的所有列都是VARCHAR类型,只需调用java.lang.Field.set()方法传递游标读取的列的值。如果你想阅读其他一些类型,我担心你必须写一个丑陋的类型匹配级联来调用setFloat()setDouble()等。 检查目标字段是非最终的还是静态的还是暂时的还是私有的也是一个好主意。

i-result

答案 1 :(得分:0)

我会看看番茄库 - 它是一个没有依赖关系的java ORM,非常小巧,方便快捷且易于使用。

网址为https://rpbarbati.github.io/Tomato