Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Excluindo tabelo no onUpgrade

Olá, tudo bom? Uma dúvida surgiu aqui na hora de excluir a tabelo no onUpgrade.

Na aula, o sugerido foi:

String sql = "DROP TABLE IF EXISTS Aluno";

Gostaria de saber se não é necessário fechar o código SQLite com " ; " (ponto e vírgula) também, da seguinte maneira:

String sql = "DROP TABLE IF EXISTS Aluno;";

Obrigado!

4 respostas

Olá Manoel!

Dentro das aspas nós passamos o comando SQL usado para efetuar a consulta ao banco de dados. O SQLite usa os mesmos comandos do SQL padrão, onde não finalizamos as linhas com ";". Este é um padrão do Java e não do banco de dados, por isso só tem o ";" fora das aspas, ao finalizar a linha do comando Java.

Se ajudar, dá uma olhadinha nos cursos de SQL, mesmo que os básicos, para você ter base de consulta e facilitar o entendimento.

Tem também uma apostila aberta da Alura que pode te ajudar: http://blog.alura.com.br/liberada-a-apostila-gratuita-de-sql-do-alura/

Espero ter ajudado!

Olá Tais, obrigado pela resposta.

O que me deixou em dúvida foi que ao criar a tabela, o professor utilizou:

String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, nome TEXT NOT NULL, endereco TEXT, telefone TEXT, site TEXT, nota REAL);";

Fechando o " ; " para SQLite e fechando para Java. E para excluir a tabela o professor fez:

String sql = "DROP TABLE IF EXISTS Alunos";

Fechando " ; " apenas para Java, então pensei que ele tivesse esquecido.

No caso, para criar a tabela, precisa ou não precisa desse " ; "?

Vou assistir à aula de SQL também para tirar as dúvidas.

solução!

Oi Manoel!

Eu estive lendo a documentação do SQLite para te explicar melhor. \o/

Basicamente, no SQL o ponto e vírgula é usado para separar 2 instruções diferentes em sequencia, por exemplo fazer um drop table seguido de um create table.

ENTRETANTO, no execSQL do Android você só consegue passar uma instrução por vez. Ou seja, no exemplo anterior, você faria um execSQL para o drop table e outro execSQL para o create table.

Mas e ai? Usar ou não usar o ponto e vírgula?

A documentação diz que é uma boa prática você usar o ponto e vírgula para indicar para o Android que realmente só está sendo passada uma instrução por vez. Não é obrigatório usar, mas vez ou outra pode dar algum erro pois o compilador não encontrou o final da instrução - e com o ponto e virgula isso é evitado.

Sendo assim, ambas as opções:

"DROP TABLE IF EXISTS Alunos";

ou

"DROP TABLE IF EXISTS Alunos;";

estão corretas, mas a segunda opção está em conformidade com as boas práticas do Android.

Espero ter ajudado!! Qualquer dúvida, só falar!!

Bons estudos!

Tais, muito obrigado! Solucionou minha dúvida.