Duas ou mais tabelas no SQLIte

2,424 views
Skip to first unread message

Domacoski

unread,
Jan 15, 2013, 6:18:20 AM1/15/13
to androidb...@googlegroups.com
Bom dia Senhores, 
Estou criando uma aplicação que está utilizando o SQLite....
 para criação do banco utilizo a seguinte query:
  CREATE TABLE Aluno ( id INTEGER PRIMARY KEY AUTOINCREMENT, 
                                       nome VARCHAR(30), matricula VARCHAR(30), sobrenome VARCHAR(30), 
                                       email VARCHAR(30), phone VARCHAR(30), responsavel VARCHAR(30) , photo BLOB ); 
CREATE TABLE Professor ( id INTEGER PRIMARY KEY AUTOINCREMENT,  nome VARCHAR(30), mail VARCHAR(30), 
                                            login VARCHAR(10), senha VARCHAR(10), retorno VARCHAR(3), faltas VARCHAR(3) ); 
 
Quando se executa o método onCreate não ocorre erro algum, mas quando tento acessar a segunda table ocorre o seguinte erro:
01-15 09:02:21.975: I/SqliteDatabaseCpp(20723): sqlite returned: error code = 1, msg = no such table: Professor, db=/data/data/br.com.teacher/databases/teacher_base

Se inverto a ordem dos insert's,  o erro ocorre para a table do Aluno....
Alguém já teve este tipo de problema?
Desde já agradeço.....

Maicon Strey

unread,
Jan 15, 2013, 7:01:43 AM1/15/13
to androidb...@googlegroups.com
Eu costumo criar uma função para criar cada tabela e no onCreate do DBHelper eu chamo todas as funções em sequência.

Posso estar enganado mas o SqLite tem algumas limitações em executar mais de uma query na mesma chamada.


Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
------------------
Linux user: #525086


2013/1/15 Domacoski <tl.dom...@gmail.com>

--
 
 

Thiago Luiz Domacoski

unread,
Jan 15, 2013, 7:21:18 AM1/15/13
to androidb...@googlegroups.com
Maicon! 
Muito obrigado! 
fiz os inserts separados.... 
segue o como ficou meu metodo oncreate

@Override

public void onCreate(final SQLiteDatabase db) {

StringBuilder create = new StringBuilder(" ");

create.append(" CREATE TABLE ");

create.append(Aluno.class.getSimpleName());

create.append(" ( id INTEGER PRIMARY KEY AUTOINCREMENT,");

create.append(" nome VARCHAR(30),");

create.append(" matricula VARCHAR(30),");

create.append(" sobrenome VARCHAR(30),");

create.append(" email VARCHAR(30),");

create.append(" phone VARCHAR(30),");

create.append(" responsavel VARCHAR(30)");

create.append(" , photo BLOB");

create.append(" );");

db.execSQL(create.toString());

create = new StringBuilder(" ");

create.append(" CREATE TABLE ");

create.append(Professor.class.getSimpleName());

create.append(" ( id INTEGER PRIMARY KEY AUTOINCREMENT,  nome VARCHAR(30),");

create.append(" mail VARCHAR(30),");

create.append(" login VARCHAR(10),");

create.append(" senha VARCHAR(10),");

create.append(" retorno VARCHAR(3),");

create.append(" faltas VARCHAR(3)");

create.append(" ); ");

db.execSQL(create.toString());

}


Gostei da sua sugestão em criar nas classes responsáveis os insert's e chamar tudo junto...

Muito obrigado mesmo...


thalita souza

unread,
Sep 29, 2014, 4:51:50 PM9/29/14
to androidb...@googlegroups.com
Nossa faz 4h que estou tentando resolver esse erro.. muito obrigada funcionou certinho essa dica...

Alex Baule

unread,
Sep 30, 2014, 11:05:30 AM9/30/14
to androidb...@googlegroups.com
Thiago, vc pode criar a String direto apendando ela com o sinal de +, fica mais legivel.

Exemplo:

String SQL = "CREATE TABLE teste ( _id autoincrement, " +
                     "nome varchar , " + 
                     "idade int);"

e depois pode dar o :

db.execSQL(SQL); 

Só uma dica, pq fica mais legivel e acredito q mais facil de dar manutencao depois.



--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Thiago Luiz Domacoski

unread,
Oct 1, 2014, 9:10:10 AM10/1/14
to androidb...@googlegroups.com

Então Alex.... Ouvi uma lenda urbana q concatenar strings com + consome mais memória....

You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/sz3YPNjj7is/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Marcelo Alves

unread,
Oct 1, 2014, 9:12:20 AM10/1/14
to androidb...@googlegroups.com
A concatenação de strings nesse caso ocorre em tempo de compilação, já que é constante.
Ajuda se você fizer final String sql = "..." + "…" + "…" pra reforçar esse comportamento.


Thiago Luiz Domacoski

unread,
Oct 1, 2014, 9:17:11 AM10/1/14
to androidb...@googlegroups.com
Entendi Marcelo! 
Esta boa prática vale também para parâmetros! 
Sempre que possível declaro como final. 


Thiago Luiz Domacoski 
 
                       
    + 55 41 9953 9074


2014-10-01 10:12 GMT-03:00 Marcelo Alves <marcel...@gmail.com>:
A concatenação de strings nesse caso ocorre em tempo de compilação, já que é constante.
Ajuda se você fizer final String sql = "..." + "…" + "…" pra reforçar esse comportamento.


Johhen Silva

unread,
Dec 4, 2015, 1:47:22 AM12/4/15
to Android Brasil - Dev
Cara pra mim ainda ñ tá funcionando, segue meu onCreate:

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql = "create table " + TABLE_USER + "(" +
"id_user integer primary key autoincrement," +
"nome varchar(50) not null," +
"user_name varchar(20) not null," +
"password varchar(50)," +
"email varchar(50));";
String sql2 = "create table " + TABLE_PASS + "(" +
"id_pass integer primary key autoincrement," +
"user integer not null," +
"local varchar(50) not null," +
"valor varchar(50) not null," + 
"foreign key(user) references " + TABLE_USER + "(id_user) );";
db.execSQL(sql);
db.execSQL(sql2);

Johhen Silva

unread,
Dec 4, 2015, 1:47:25 AM12/4/15
to Android Brasil - Dev
Cara pra mim ainda ñ tá funcionando, segue meu onCreate:

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql = "create table " + TABLE_USER + "(" +
"id_user integer primary key autoincrement," +
"nome varchar(50) not null," +
"user_name varchar(20) not null," +
"password varchar(50)," +
"email varchar(50));";
String sql2 = "create table " + TABLE_PASS + "(" +
"id_pass integer primary key autoincrement," +
"user integer not null," +
"local varchar(50) not null," +
"valor varchar(50) not null," + 
"foreign key(user) references " + TABLE_USER + "(id_user) );";
db.execSQL(sql);
db.execSQL(sql2);

}

Em terça-feira, 15 de janeiro de 2013 10:01:43 UTC-2, Mstrey escreveu:

Marcelo Henrique

unread,
Dec 4, 2015, 5:15:06 AM12/4/15
to androidb...@googlegroups.com
Pode parecer meio noob mas eu faria uma classe pra cada tabela. 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
                                              - Marcelo Henrique -

  "Se não puder se destacar pelo talento, vença pelo esforço." (Dave Weinbaum).
              "Mate o pecado antes que ele o mate." ( Richard Baxter ).
Reply all
Reply to author
Forward
0 new messages