[Android + SQLite] Foreign Key - Como criar a integridade relacional entre tabelas?

1 resposta
M

Pessoal, estou com muitas dúvidas sobre o SLite para Android (não é exatamente com a linguagem SQL).
Pelo que entendi, o SQLite não "aceita" chaves estrangeiras entre tabelas. Temos de fazer tudo isso "no braço".

-- Criando as tabelas categoria e produto;
CREATE TABLE categoria (
id_categoria INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
nome TEXT NOT NULL
);
CREATE TABLE produto (
id_produto INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
nome TEXT NOT NULL, 
quantidade TEXT NOT NULL, 
pontos INTEGER NOT NULL, 
id_categoria INTEGER NOT NULL, 
FOREIGN KEY(id_categoria) REFERENCES categoria(id_categoria)
);
-- Preenchendo com um registro apenas (para efeitos de teste);
INSERT INTO categoria VALUES (null, 'Frutas');
INSERT INTO produto VALUES (null, 'Abacate', '1 colher de sopa', 10, 1);
-- Resultado CATEGORIA;
id_categoria nome
----------   ----------
1            Frutas
-- Resultado PRODUTO;
id_produto  nome        quantidade        pontos      id_categoria
----------  ----------  ----------------  ----------  ------------
1           Abacate     1 colher de sopa  10          1

A tabela CATEGORIA foi criada primeiro. E quando executo a seguinte linha de comando:

SELECT nome FROM categoria WHERE categoria.id_categoria=produto.id_categoria;
Obtenho o erro abaixo:
Error: no such column: produto.id_categoria

Como corrijo isso? Tudo isso foi feito em linha de comando (prompt). Isso tem de ser corrigido por programação, apenas nas classes Java?
E essa é a minha pergunta: como criar a integridade relacional entre tabelas, nesse caso? Por linha de comando não funciona.

Obrigado a todos!

1 Resposta

igrsantos

Boa tarde,

Amigo ao invês de utilizar o “SELECT” dessa forma,

Utilize dessa forma,

Você apenas esqueceu de citar a tabela ‘produto’, para confrontar no “FROM”.

Caso exista a coluna ‘nome’ nas duas tabelas, você deve colocar o caminho também.

Criado 24 de junho de 2012
Ultima resposta 24 de mai. de 2013
Respostas 1
Participantes 2