私は他のテーブルtableMaquinas(マシン)からの外部キーを持つテーブルtableGrupo(グループ)を持っています。テーブルtableGrupo(Groups)にデータを挿入するとき、Android Studioは外部キーフィールドが外部キーであるためnullであってはならないことを伝えます。AndroidのSQLiteにforeignKeyの値を挿入するには?
挿入を許可して適切な外部キー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);
}
関係を持つデータベースのアイデアは、FOREIGN KEYが指すデータにアクセスできるということです。したがって、FOREIGN KEYが指すIDはすでに存在するはずです。そうでなければ、そのような種類のデータベースには意味をなさない。それが存在する場合、あなたの鍵はnullではありません。だから多少の誤解がある...あなたは有効な外字キーを持っている必要があります... – Opiatefuchs
しかし、アンドロイドスタジオは、私が何かを追加したときに外来キーの値がnullであると私に迷惑をかけることがあります。 – jose
あなたは決してid_grupoに値を指定しないので、sqliteはあなたのMaquinaをGrupoに関連付けます(ちなみに、すべてのテーブルで変数の命名を標準化することを強くお勧めします - id_grupoまたはidGrupo)。 Android Studioはエージェントではなく、物理的または仮想的なデバイス上で実行されるIDE(ambiente interativo de desenvolvimento)コードです(エミュレータはアンドロイドスタジオ固有のものではありません)、アンドロイドスタジオはアンドロイドスタジオAVD/Android Monitorウィンドウを使用して表示されているかもしれませんが、エラーが発生する場所です)。 –