我正在尝试使用ORMLite for android。
我有一个预先构建的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!
}
我是否错过了一些明显的事情,或者我是否完全咆哮了错误的树?任何人都可以建议一种替代/更漂亮的方法吗?
答案 0 :(得分:0)
如果我理解,您希望将表映射到具有子类的类。在您的示例中,我猜您要将LocationX
和LocationY
字段加载到mposition
,我猜是Vector2
?
我认为可以使用getMPosition()
和setMPosition(mpos)
方法在LocationX
和LocationY
字段之间进行映射,但是您无法用ORMLite自动神奇地进行映射。
从纯洁的角度来看,我总是建议使用数据库圈子称为“实体类”。此类完全镜像您的数据库结构。它应该与表中的字段和类之间具有一对一的对应关系。它可以包含hashCode()
,equals()
和标准的getter / setter等方法,但其他方法却很少。
您可以创建一个包装对象,在其构造函数中接受GraphicsInstance
对象,并执行Vector2
映射并允许其他操作。当您需要返回GraphicsInstance
对象时准备好继续它。