在SQLiteDatabase </object>中存储具有List <object>和字符串的Object

时间:2015-04-09 16:05:05

标签: java android sqlite

首先,对于这个非常奇怪的问题标题感到抱歉,我无法找到一个更好的方法来表达它!

所以我有一个如下的Object,它有一个String用于练习的名称(在List中保存重复),以及List of Set Objects,每个set都有一个权重(double)和一些reps( INT)。

public class Card implements Serializable {
public String name;
List<Set> sets;

public Card(String name) {
    this.name = name;
    sets = new ArrayList<>();
}

public String getName() {
    return name;
}

public List<Set> getSet() {
    return sets;
}

public void addSet(Set s) {
    sets.add(s);
}

public String toString(){
    return "Name: " + name + ", Set: " + sets.toString();
}}

现在我想将它存储在数据库中。我将如何实现这一目标,因为我知道我不能将List存储在数据库中,除非我给它自己的表,但是列表的每个成员都有一个名字,这是String名称,这个名字会出现多次在数据库中,所以它不是唯一的这一组集(抱歉的措辞!!:P) 希望你们其中一个人能够破译我措辞不好的问题和解释并给我一个答案:) 需要更多信息,只需发表评论!

编辑:我已经全部怀疑但是我现在有一个新问题,我的外键不像我的主键那样自动增量,我的表格代码如下

public static final String CREATE_CARD_TABLE = "CREATE TABLE "
        + CARD_TABLE + "(" + CARD_ID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CARD_NAME
        + " TEXT )";

//card foreign key, this will be where the card information is stored.
public static final String CREATE_CARDINFO_TABLE = "CREATE TABLE "
        + CARD_INFO_TABLE + "(" + CARD_ID2
        + " INTEGER, " + CARD_NAME2
        + " TEXT, " + CARD_WEIGHT
        + " REAL, " + CARD_REPS
        + " INTEGER, "
        + " FOREIGN KEY " + "("+ CARD_ID2 +")"+ " REFERENCES " + CARD_TABLE + "("+CARD_ID+"));";

然后我按如下方式向他们插入数据,我哪里错了?

    public void insertEntry(String name, double weight, int reps) {
    open();
    database.beginTransaction();
    if(flag == 0) {
        ContentValues newValues = new ContentValues();
        // Assign values for each row.
        newValues.put(DataBaseHelper.CARD_NAME, name);

        // Insert the row into your table
        database.insert(DataBaseHelper.CARD_TABLE, null, newValues);
        flag = 1;
    }

    ContentValues newValues = new ContentValues();
    // Assign values for each row.
    newValues.put(DataBaseHelper.CARD_NAME2, name);
    newValues.put(DataBaseHelper.CARD_WEIGHT, weight);
    newValues.put(DataBaseHelper.CARD_REPS, reps);

    // Insert the row into your table
    database.insert(DataBaseHelper.CARD_INFO_TABLE, null, newValues);
    database.setTransactionSuccessful();
    database.endTransaction();
    close(); 
}

1 个答案:

答案 0 :(得分:2)

就像你必须手动插入一样,

两个与公共标识符相关的数据库表(Pk&#39; s和Fk&#39; s),以便您以后可以获取信息。

用字符串和标识符填充第一个表(或者它可以是自动数字),检索该表的max(标识符)/保存刚刚放在DB上的自定义标识符,使用该标识符插入数据在第二个表格中,您将放置第一个表格的ID。

将对象视为表格。如果你有一个具有对象Y的对象X,那么你正在看一个1-N关系。