Criação de tabelas

Android

02/07/2013

Meus amigos, qual o melhor e mais prático jeito de criar tabelas?

Utilizando o código:

private static String sql = "CREATE TABLE [clientes] (  [id] INTEGER PRIMARY KEY AUTOINCREMENT, [nome] [VARCHAR(30)],   [email] [VARCHAR(40)],   [endereco] [VARCHAR(50)],   [numero] [VARCHAR(10)]);";  
db.execSQL(sql);  


ou

@Override  
public void onCreate(SQLiteDatabase db) {  
    SQLiteDatabase db = new DB(ctx).getWritableDatabase(); // esse código viria de uma classe DAO, correto?  
  
    StringBuilder sqlClientes = new StringBuilder();  
    sqlClientes.append("CREATE TABLE [clientes] (");  
    sqlClientes.append("[idCliente] INTEGER PRIMARY KEY AUTOINCREMENT, ");  
    sqlClientes.append("nome varchar(30), ");  
    sqlClientes.append("email varchar(40), ");  
    sqlClientes.append("endereco varchar(50), ");  
    sqlClientes.append("numero varchar(10));");  
    db.execSQL(sqlClientes.toString());  
}  


E assim faria para outras tabelas que tivessem. Qual é o método mais adequado?
Frederico Brigatte***

Frederico Brigatte***

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

02/07/2013

Como na primeira forma você criou uma string só, eu acho ela mais adequada, pois é só um objeto string definido uma única vez. Na segunda, além de usar um StringBuilder, você chama o método para adicionar as strings várias vezes, além do ToString, etc.

NESSE CASO, eu acho a primeira mais adequda.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Obrigado Joel, pelo retorno. Então poderia fazer simplesmente assim:

private static String sqlClientes = "CREATE TABLE [clientes] (  [id] INTEGER PRIMARY KEY AUTOINCREMENT, [nome] [VARCHAR(30)],   [email] [VARCHAR(40)],   [endereco] [VARCHAR(50)],   [numero] [VARCHAR(10)]);";  

private static String sqlOutraTabela = "CREATE TABLE [outratabela] (  [id] INTEGER PRIMARY KEY AUTOINCREMENT, [nome] [VARCHAR(30)],   [email] [VARCHAR(40)],   [endereco] [VARCHAR(50)],   [numero] [VARCHAR(10)]);";  

db.execSQL(sqlClientes);
db.execSQL(sqlOutraTabela);


OutraTabela seria um exemplo para criar mais uma. O campo id pode por qualquer nome, não precisa ser _id, como tenho visto?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Perfeitamente, pode criar quantas strings precisar. E com relação ao nome dos campos, como já vimos, pode ser qualquer um.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

OBSERVAÇÃO: O nome dos campos pode ser qualquer um, mas claro que você deve usar nomes significativos e seguir as regras de nomenclatura.
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

02/07/2013

isso melhora em perfomance, ou não tem nada haver?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Mais uma dúvida, os campos precisam estar entre []? Pode fazer simplesmente assim:

private static final String DATABASE_CREATE_CLIENTES = "create table clientes ("id_Cliente integer primary key autoincrement, nome text, data text, telefone text, celular text, email text);";
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

mais uma dúvida, os campos precisam estar entre []? pode fazer simplesmente assim:


private static final string database_create_clientes = "create table clientes ("id_cliente integer primary key autoincrement, nome text, data text, telefone text, celular text, email text);";


Está errado, o correto seria:

private static final string database_create_clientes = "create table clientes (id_cliente integer primary key autoincrement, nome text, data text, telefone text, celular text, email text);";
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Olha, com relação a isso vou lhe pedir para testar, pois não tenho certeza. Geralmente os [] não são necessários.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Ok, vou fazer sem [] para testar. Obrigado pela ajuda. Resolvido
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Valeu, amigo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Joel, uma duvida. Como perguntou o colega, tem diferença de um jeito para outro na performance do código?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Ótima pergunta, acabei não respondendo.
Vamos lá a uma comparação dos códigos:

No primeiro formato você cria e já dá um valor a uma única string e a usa no método para executar a instrução.

No segundo formato você cria um StringBuilder (classe mais complexa), chama o método para inserir strings várias vezes e por fim ainda chama o ToString(). Já percebemos que o primeiro é bem mais simples, logo, executado com mais facilidade.

Dificilmente essa diferença será notada, mas em aplicações grande, ao longo do tempo isso pode se tornar fundamental.

Existe, porém, uma situação em que StringBuilder é melhor que String. Desejam saber?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Sim, por favor.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Joel, quando que StringBuilder é melhor que String?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Joel, quando que StringBuilder é melhor que String?

Cara, só por curiosidade, você nasceu de 7 meses? Apressado pra caramba, hein?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Mas vamos lá.

Considere o seguinte código:
String descricao;
descricao = "Joel";
descricao += "Rodrigues";
descricao += " - ";
descricao += "Autor DevMedia";
descricao += " - MCP";
descricao += " - MSP";


Repare que eu concatenei a string várias vezes.
A cada vez que nós concatenamos a string, um novo objeto é criado em memória e o anterior é descartado, mas não excluído da memória, ou seja, fica lá ocupando espaço até o Garbage Colector removê-lo.

Nesse caso é mais interessante usar o StringBuilder, ir inserindo os novos trechos de texto e ao fim chamado o método ToString, pois um único objeto é criado e atualizado sempre que uma nova parte da string é inserida.

De forma resumida, é isso.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Ok, mas nesse meu caso é melhor montar tudo numa única string como foi postado?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Joel, quando que StringBuilder é melhor que String?

Cara, só por curiosidade, você nasceu de 7 meses? Apressado pra caramba, hein?
Essa foi exatamente a resposta do tópico. Sim.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

02/07/2013

Ok, resolvido.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

02/07/2013

Valeu. Topico resolvido então.
Abraço a todos.
GOSTEI 0
POSTAR