使用糖ORM与UUID或Joda-Time

时间:2014-10-15 15:39:08

标签: java android sqlite jodatime sugarorm

我正在创建一个移动应用程序,其用户定义如下:

public class UserObject extends SugarRecord<UserObject>
{
    public UUID Id;
    public String Name;
    public int DefaultSort;
    public String Username;
    public Date LastLogin;

    public UserObject()
    {

    }

    public UserObject(UUID id, String name, int defaultSort, String username, String password, Date lastLogin)
    {
        this.Id = id;
        this.Name = name;
        this.DefaultSort = defaultSort;
        this.Username = username;
        this.LastLogin = lastLogin;
    }
}

将从API检索这些用户 - 这些ID作为uniqueidentifier(或C#中的GUID)存储在数据库中。

当我在users表中输入新记录时,一切正常:

    DateTime dt = new DateTime();
    UUID newUID = UUID.randomUUID();
    UserObject newUser = new UserObject(newUID, "David", 1, "userOne", "password", dt.toDate());
    newUser.save();

但是,当我尝试将值检索回来时,我收到一个错误:

  

无法从Sqlite3数据库中读取类。请检查字段Id(java.util.UUID)

的类型

Sugar ORM(或SQLite)根本不支持UUID吗?如果我尝试使用Joda DateTime,替换“LastLogin”,那么表格根本就不会构建,所以它看起来好像可以创建字段,而不是检索/存储它们......

2 个答案:

答案 0 :(得分:0)

您不应该使用名称为Id的var。 Sugar记录使用Id来存储索引值。使用除Id

之外的任何内容
public class UserObject extends SugarRecord{
    public UUID uId;
    public String Name;
    public int DefaultSort;
    public String Username;
    public Date LastLogin;

    public UserObject()
    {

    }

    public UserObject(UUID uId, String name, int defaultSort, String username, String password, Date lastLogin)
    {
        this.uId= uId;
        this.Name = name;
        this.DefaultSort = defaultSort;
        this.Username = username;
        this.LastLogin = lastLogin;
    }
}
从v1.4

不再需要使用SugarRecord

答案 1 :(得分:0)

从数据库中检索数据时,Sugar ORM将无法再次构建日期对象。如果你看看你的数据库,它可能存储字符串(就像我一样,我正在使用JODA)。

在我的情况下,我通过使用字符串而不是数据对象克服了这个问题。从数据库中检索数据后,您将不得不解析它们,但我相信这是您唯一的选择,因为SQLite only support a few data types