2012-04-10 54 views
0

我正在尝试使用ORMLite for android。Ormlite映射字段到一个简单的成员类

我有一个预置的SQLite数据库,我在Android设备上加载。我已经存储为LocationX,LocationY列位置信息:

CREATE TABLE graphicsinstances(Name STRING , LocationX FLOAT , LocationY FLOAT , SizeX FLOAT , SizeY FLOAT); 

美中不足的是,在运行时我想这是这个样子:

public class Vector2 
{ 
    public float X; 
    public float Y; 
} 
@DatabaseTable(tableName = "graphicsinstances") 
public class graphicsinstance 
{ 
    public GraphicalEntityInstance() 
    { 
     mName    = null; 
     mPosition   = Vector2.zero(); 
     mSize    = Vector2.zero(); 
    } 
    @DatabaseField(columnName = "Name", canBeNull = false) 
    public String mName; 

    //Olympic standard optimism 
    //@DatabaseField(columnName = "Location", canBeNull = false) 
    //public Vector2 mPosition; 

    // current (unsatisfactory) method: 
    @DatabaseField(canBeNull = false, useGetSet=true) 
    private float LocationX; 
    public float getLocationX() { return mPosition.X;} 
    public void setLocationX(float x) { mPosition.X = x;} 
    // repeat for Y, SizeX & SizeY! 
} 

有我错过了一些明显的还是我完全吠叫在错误的树上?任何人都可以提出一种替代/漂亮的方法?

+0

我不明白这个问题。你有问题吗?不会编译或运行?你得到什么错误? – Gray 2012-04-10 14:13:22

+0

对不起,我想将LocationX&LocationY列中的数据映射到mPosition实例的X&Y字段。我使用getset机制的解决方法起作用,但它引入了一个未使用的成员变量,看起来令人讨厌,让我觉得我会以完全错误的方式去做: -/ – user1323843 2012-04-10 14:30:51

回答

0

如果我明白了,您希望将表映射到具有子类的类中。在你的例子中,我想你想加载LocationXLocationY字段到mposition,我猜是Vector2

我觉得它是确定有getMPosition()setMPosition(mpos)方法是做LocationXLocationY字段之间的映射,但你不会是能够做到这一点的映射自动神奇与ORMLite。


从纯度角度来看,我总是推荐使用数据库圈称为“实体类”的数据。这个类精确地反映了你的数据库结构。它应该在表格中的字段和类之间具有一对一的对应关系。它可以有像hashCode(),equals()这样的方法,以及标准的getter/setter,但其他很少。

您可以创建一个包装对象,该对象在构造函数中使用GraphicsInstance对象,并执行Vector2映射并允许其他操作。当你准备好坚持它的时候,你需要回到GraphicsInstance的对象。

+0

是的,这绝对是一个更好的解决方案。我会尝试一下;) 谢谢你的迅速答复! – user1323843 2012-04-10 15:31:59