Inserir varios dados ao mesmo tempo SQLite

2,137 views
Skip to first unread message

linux.soares

unread,
Jan 5, 2012, 4:25:04 PM1/5/12
to Android Brasil - Dev
Amigos, BOA NOITE...

Estou tentando fazer um INSERT no SQLite até ai um unico INSERT então
tranqüilo,
como vou inserir vários itens ao mesmo tempo?
Em uma pesquisa pela internet achei a seguinte sintaxe:

INSERT INTO tabela (coluna) VALUES ("ITEM-1"), ("ITEM-2");

mas o SQLite da erro reclamando da ",".

Alguém sabe como resolver isso??

Estou usando o aplicativo SQLiteStudio para MAC OS X.

Abraços!

Alex Baule

unread,
Jan 5, 2012, 5:27:11 PM1/5/12
to androidb...@googlegroups.com
use place holder

Se vc vai inserir várias vezes o mesmo insert, mas com dados diferentes...

exemplo:

SQL='INSERT into table (nome, idade) VALUES ("?","?")';

depois vc faz um for nos dados e vai chamando o SQL dando execute passando os valores.

Gilmar Soares

unread,
Jan 5, 2012, 5:34:22 PM1/5/12
to androidb...@googlegroups.com
Alex, Boa noite.

Então, isso com Java sei fazer... 

A idéia é fazer no próprio SQL, pois o BD será fixo, não vai ter interação no APP com usuário... é só busca mesmo. 
Então essa inserção será feita na mão mesmo... só se o SQLite reconhece for... 

a idéia minha era fazer um único insert com todos os iténs entende?

Abraços e obrigado!
--
Gilmar Soares
Desenvolvedor Java - Analista TI
Cel.: (11) 8091-5395

Alex Baule

unread,
Jan 5, 2012, 8:18:38 PM1/5/12
to androidb...@googlegroups.com

Pode gerar uma string gigante entao, com inserts iguais separados por ponto e virgula... (claro, mudando os dados)

Mas acho o placeholder mais "limpo "

Gilmar Soares

unread,
Jan 5, 2012, 8:22:33 PM1/5/12
to androidb...@googlegroups.com
Opa Alex... 

Obrigado pela resposta, acabei de ver, são +- 1450 itens! rsrsrs...

Como funciona o placeholder? Já estava pensando em criar os inserts e rodar tudo junto! até salvei um arquivo.sql para isso! 

Diego Ampessan

unread,
Jan 5, 2012, 10:13:40 PM1/5/12
to androidb...@googlegroups.com
Eu faço da seguinte maneira a carga inicial dos dados, no onCreate do banco 

public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate()");

try {
InputStream is = context.getResources().getAssets()
.open("create_database.sql");

String[] statements = FileHelper.parseSqlFile(is);

for (String statement : statements) {
Log.d(TAG, statement);
db.execSQL(statement);
}

is.close();
} catch (Exception ex) {
Log.e(TAG, "Erro ao dar create na base de dados.", ex);
}

o create_database.sql é um arquivo que fica na pasta assets.
--
Att.
Diego Ampessan
Microsoft MTA

www.diegoampessan.com.br


Os computadores são incrivelmente rápidos, precisos e burros; Os homens são incrivelmente lentos, imprecisos e brilhantes; Juntos, seu poder ultrapassa os limites da imaginação  - "Albert Einstein "

Lucas Felix

unread,
Jan 6, 2012, 7:19:25 AM1/6/12
to Android Brasil - Dev
Gilmar, o SQLite parece que permite uma única instrução SQL por exec,
pelo menos foi o que me recomendaram...

Faz uma chamada SQL para cada insert...
Assim fica até mais fácil na hora da manutenção...

db.execSQL("INSERT INTO TABELA(coluna_1, coluna_2) VALUES (1, '1')");
db.execSQL("INSERT INTO TABELA(coluna_1, coluna_2) VALUES (2, '2')");

On 5 jan, 20:34, Gilmar Soares <linux.soa...@gmail.com> wrote:
> Alex, Boa noite.
>
> Então, isso com Java sei fazer...
>
> A idéia é fazer no próprio SQL, pois o BD será fixo, não vai ter interação
> no APP com usuário... é só busca mesmo.
> Então essa inserção será feita na mão mesmo... só se o SQLite reconhece
> for...
>
> a idéia minha era fazer um único insert com todos os iténs entende?
>
> Abraços e obrigado!
>
> Em 5 de janeiro de 2012 20:27, Alex Baule <alexwba...@gmail.com> escreveu:
>
>
>
>
>
>
>
>
>
> > use place holder
>
> > Se vc vai inserir várias vezes o mesmo insert, mas com dados diferentes...
>
> > exemplo:
>
> > SQL='INSERT into table (nome, idade) VALUES ("?","?")';
>
> > depois vc faz um for nos dados e vai chamando o SQL dando execute passando
> > os valores.
>

linux.soares

unread,
Jan 7, 2012, 10:41:01 AM1/7/12
to Android Brasil - Dev
Diego, Boa tarde.

Obrigado pela atenção...

Então essa sua forma de fazer acabei não tentando ainda, como vou
mudar a base de dados que por enquanto esta para teste, vou tentar do
seu jeito
para testar... só me diz, dentro desse arquivo create_database.sql
existe toda a query que inseri os dados???

Dessa forma:
INSERT INTO TABELA(coluna_1, coluna_2) VALUES (1, '1')
("INSERT INTO TABELA(coluna_1, coluna_2) VALUES (2, '2')");

Obrigado!


On 6 jan, 01:13, Diego Ampessan <ampess...@gmail.com> wrote:
> Eu faço da seguinte maneira a carga inicial dos dados, no onCreate do banco
>
> public void onCreate(SQLiteDatabase db) {
> Log.d(TAG, "onCreate()");
>
> try {
> InputStream is = context.getResources().getAssets()
>  .open("create_database.sql");
>
> String[] statements = FileHelper.parseSqlFile(is);
>
> for (String statement : statements) {
> Log.d(TAG, statement);
>  db.execSQL(statement);
>
> }
>
> is.close();
>  } catch (Exception ex) {
> Log.e(TAG, "Erro ao dar create na base de dados.", ex);
>  }
>
> o create_database.sql é um arquivo que fica na pasta assets.
>
> Em 5 de janeiro de 2012 23:22, Gilmar Soares <linux.soa...@gmail.com>escreveu:
>
>
>
>
>
> > Opa Alex...
>
> > Obrigado pela resposta, acabei de ver, são +- 1450 itens! rsrsrs...
>
> > Como funciona o placeholder? Já estava pensando em criar os inserts e
> > rodar tudo junto! até salvei um arquivo.sql para isso!
>
> > Em 5 de janeiro de 2012 23:18, Alex Baule <alexwba...@gmail.com> escreveu:
>
> > Pode gerar uma string gigante entao, com inserts iguais separados por
> >> ponto e virgula... (claro, mudando os dados)
>
> >> Mas acho o placeholder mais "limpo "
> >> Em 05/01/2012 20:34, "Gilmar Soares" <linux.soa...@gmail.com> escreveu:
>
> >> Alex, Boa noite.
>
> >>> Então, isso com Java sei fazer...
>
> >>> A idéia é fazer no próprio SQL, pois o BD será fixo, não vai ter
> >>> interação no APP com usuário... é só busca mesmo.
> >>> Então essa inserção será feita na mão mesmo... só se o SQLite reconhece
> >>> for...
>
> >>> a idéia minha era fazer um único insert com todos os iténs entende?
>
> >>> Abraços e obrigado!
>
> >>> Em 5 de janeiro de 2012 20:27, Alex Baule <alexwba...@gmail.com>escreveu:
>
> >>>> use place holder
>
> >>>> Se vc vai inserir várias vezes o mesmo insert, mas com dados
> >>>> diferentes...
>
> >>>> exemplo:
>
> >>>> SQL='INSERT into table (nome, idade) VALUES ("?","?")';
>
> >>>> depois vc faz um for nos dados e vai chamando o SQL dando execute
> >>>> passando os valores.
>
> os limites da imaginação  - "Albert Einstein "- Ocultar texto das mensagens anteriores -
>
> - Mostrar texto das mensagens anteriores -

linux.soares

unread,
Jan 7, 2012, 10:47:41 AM1/7/12
to Android Brasil - Dev
Fala Lucas rs... Boa tarde.

Então,

Essa forma de persistencia eu encontrei no livro é bem tranquilo.
O que não quero é que o APP consiga inserir dados, quero que ele
apenas pesquise...
Mas acabei criando coragem e fazendo os INSERT´s mesmo um a um... já
até estão prontos, agora
vou começar a ver como popular isso no Spinner...

Mas obrigado a todos pela ajuda!!!
E você posso tirar duvida no TRABALHO rs
Abraços!
> > Cel.: (11) 8091-5395- Ocultar texto das mensagens anteriores -

Diego Ampessan

unread,
Jan 7, 2012, 1:59:19 PM1/7/12
to androidb...@googlegroups.com
Sim, no arquivo cada linha representa um comando sql

create table
insert

e por ai vai

Lucas Felix

unread,
Jan 8, 2012, 7:45:21 AM1/8/12
to Android Brasil - Dev
Achei interessante a forma de carregar o arquivo por um .sql também...

Quanto a carregar os dados por Spinner, rolou essa semana esse
assunto:

http://groups.google.com/group/androidbrasil-dev/browse_thread/thread/242ebb993ecccbd5

Gilmar Soares

unread,
Jan 8, 2012, 8:15:07 AM1/8/12
to androidb...@googlegroups.com
Opa...
 
Valeu, estou aqui lendo...
Hoje trouxe o notebook, estou fazendo a aplicação :)
 
Vendo os LOGS de por que não estar populando...
 
Valeu!

Reply all
Reply to author
Forward
0 new messages