ORMlite如何添加Collection <collection <double>&gt;?

时间:2016-11-07 10:25:18

标签: android android-sqlite ormlite android-database

我有以下课程:

@DatabaseTable
public class BodyWeight implements Serializable {

    @DatabaseField(generatedId = true, useGetSet = true, columnName = "id")
    private Long id;

    @DatabaseField
    private String name;

    @DatabaseField
    private double goal;

    @DatabaseField
    private String primaryunit;

    @DatabaseField
    private String secondaryunit;

    @DatabaseField
    private int secondarysize;

    @DatabaseField
    private Collection<Collection<Double>> data;

如何向数据库添加双精度基元列表?这个过程是什么?我应该为双打列表列表创建更多类吗?

2 个答案:

答案 0 :(得分:1)

一种可能的方法是将Collection<Collection<Double>> data保留在您的类中,并使用自定义persister将其作为JSON字符串存储在数据库中。喜欢这个

@DatabaseField(persisterClass = MyCustomPersister.class)
Collection<Collection<Double>> data;

MyCustomPersister应该实现com.j256.ormlite.field.DataPersister或其中一个可用的实现。基本上只有两种方法:

@Override
public Object resultToSqlArg();
@Override
public Object sqlArgToJava();

答案 1 :(得分:0)

  

如何向数据库添加双精度基元列表?这个过程是什么?

这非常复杂。一种方法是使类型可序列化。

@DatabaseField(dataType = DataType.SERIALIZABLE)
private Collection<Collection<Double>> data;

与@ unnamed_b的答案一样,它将把它作为一个序列化的字节块存储到位。如果你有大量的双打,这将不会起作用。

如果要将其作为对象存储在另一个表中,则必须定义这些对象。类似的东西:

@DatabaseField(generatedId = true)
private long id;
@ForeignCollectionField
private Collection<DoubleCollection> data;

ORMLite只处理直接集合,因此我们需要定义子集合:

@DatabaseTable
public class DoubleCollection {
    @DatabaseField(generatedId = true)
    private long id;
    @ForeignCollectionField
    private Collection<DoubleWrapper> data;
}

如果你需要存储一组双打,那么你需要定义一个包装来保存一个id和你的双值。

@DatabaseTable
public class DoubleWrapper {
    @DatabaseField(generatedId = true)
    private long id;
    @DatabaseField
    private double value;
}