0

我正在试验 Android 的 ORMLite。

我有一个预构建的 SQLite 数据库,我正在加载到 android 设备上。我已将位置信息存储为 LocationX、LocationY 列:

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

Catch 是,在运行时我希望它看起来像:

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

我错过了一些明显的东西还是我完全找错了树?任何人都可以建议一种替代/更漂亮的方法吗?

4

1 回答 1

0

如果我理解,您想将表映射到具有子类的类中。在您的示例中,我猜您想将LocationXandLocationY字段加载到mposition我猜是Vector2?

我认为有一个getMPosition()andsetMPosition(mpos)方法来执行LocationXandLocationY字段之间的映射是可以的,但是您将无法使用 ORMLite 自动神奇地执行该映射。


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

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

于 2012-04-10T14:52:20.743 回答