Criação de tabelas
Meus amigos, qual o melhor e mais prático jeito de criar tabelas?
Utilizando o código:
ou
E assim faria para outras tabelas que tivessem. Qual é o método mais adequado?
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***
Curtidas 0
Respostas
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.
NESSE CASO, eu acho a primeira mais adequda.
GOSTEI 0
Frederico Brigatte***
02/07/2013
Obrigado Joel, pelo retorno. Então poderia fazer simplesmente assim:
OutraTabela seria um exemplo para criar mais uma. O campo id pode por qualquer nome, não precisa ser _id, como tenho visto?
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
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
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
02/07/2013
isso melhora em perfomance, ou não tem nada haver?
GOSTEI 0
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***
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);";
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
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***
02/07/2013
Ok, vou fazer sem [] para testar. Obrigado pela ajuda. Resolvido
GOSTEI 0
Joel Rodrigues
02/07/2013
Valeu, amigo.
GOSTEI 0
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
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?
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***
02/07/2013
Sim, por favor.
GOSTEI 0
Frederico Brigatte***
02/07/2013
Joel, quando que StringBuilder é melhor que String?
GOSTEI 0
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
02/07/2013
Mas vamos lá.
Considere o seguinte código:
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.
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***
02/07/2013
Ok, mas nesse meu caso é melhor montar tudo numa única string como foi postado?
GOSTEI 0
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
Frederico Brigatte***
02/07/2013
Ok, resolvido.
GOSTEI 0
Joel Rodrigues
02/07/2013
Valeu. Topico resolvido então.
Abraço a todos.
Abraço a todos.
GOSTEI 0