我有一个表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);
}
答案 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);