如何在Android中的SQLite中插入foreignKey值?

时间:2017-04-02 11:53:17

标签: android sqlite

我有一个表tableGrupo(Groups),它有一个来自其他表tableMaquinas(Machines)的外键。当我在表tableGrupo(Groups)中插入数据时,Android Studio告诉我外键字段不能为空,因为它是外键。

为了接受插入并将其传递给正确的外键ID,我应该赋予什么值?

这是我的代码:

 //Table1
        db.execSQL("CREATE TABLE "+ tableGrupo +" ("+
                idGrupo +" INTEGER PRIMARY KEY AUTOINCREMENT, "+
                nomeGrupo +" TEXT)");

        //Table2
        db.execSQL("CREATE TABLE "+ tableMaquinas +" ("+
                idMaquina +" INTEGER PRIMARY KEY AUTOINCREMENT, "
                + nomeMaquina + " text not null, "
                + imagemMaquina + " BLOB, "
                + id_grupo + " integer, "
                + " FOREIGN KEY ("+id_grupo+") REFERENCES "+tableGrupo+"("+idGrupo+"))");


**This is the code where I make the insertion in the database**

 public void addMachine(String name, byte[] image) throws SQLiteException {
        ContentValues values = new  ContentValues();
        values.put(nomeMaquina,name);
        values.put(imagemMaquina,image);
        //here i have to put a value for the foreignkey
        this.getWritableDatabase().insert(tableMaquinas,null,values);
    }

2 个答案:

答案 0 :(得分:1)

您的表id_group将列tableGrupo定义为一个整数,其外键指向tableGrupo表中的主键列。因此,超出要求的是它必须指向ContentValues values = new ContentValues(); values.put(idGrupo, 1); this.getWritableDatabase().insert(tableGrupo, null, values); ContentValues values = new ContentValues(); values.put(nomeMaquina, name); values.put(imagemMaquina, image); values.put(id_grupo, 1); this.getWritableDatabase().insert(tableMaquinas, null, values); 表中实际存在的记录。

以下是适用于您当前架构的代码:

split -> filter -> re-join

请注意,我假设存在上述某些变量(大多数已经存在),但您可能需要稍微修改上述代码才能使其在您的特定方法中起作用。

答案 1 :(得分:0)

我知道这是一个老问题,但我认为我有一个合理的解决方法。可以保存以从insert方法返回值并将其保存在变量中。如果插入成功,则成功时将返回_id,失败时返回-1。以下是Documentation的参考。

ContentValues values = new  ContentValues();
values.put(idGrupo, 1);
long sucess = this.getWritableDatabase().insert(tableGrupo, null, values);
values.clear();

values.put(nomeMaquina, name);
values.put(imagemMaquina, image);
values.put(id_grupo, success);
this.getWritableDatabase().insert(tableMaquinas, null, values);