Insert em uma tabela?

13 respostas
D

Galera, estou deixando escapar alguma coisa, estou tentando fazer um insert em uma tabela, com o código abaixo:

String query = “INSERT INTO DDD_FATO1(VENDA_EM_VOLUME, DATA, ID_CLASSE,ID_PRODUTO,ID_BRICKS) VALUES(’“valor, data, codclasse, codproduto,cobrick”’)”;

se eu colocar assim, só com aspas simples no values, ele compila mas dá erro na hora de rodar, pois os campos dos values são variáveis e não nome de campo da tabela:

String query = “INSERT INTO DDD_FATO1(VENDA_EM_VOLUME, DATA, ID_CLASSE,ID_PRODUTO,ID_BRICKS) VALUES(‘valor, data, codclasse, codproduto,cobrick’)”;

Como eu poderia inserir na DDD_FATO1, já que estes caras ‘valor, data, codclasse, codproduto,cobrick’, são variáveis??

Um abraço.

13 Respostas

Rafael_Steil

Eh so ir separando. Por exemplo:

String sql = "INSERT INTO MyTable (campo1, campo2, campoX ) VALUES ('"+ variavel1 +"', '"+ variavel2 +"', '"+ variavelX +"')";

E assim por diante.

Rafael

F

Ola!

O erro eh que vc estah fazendo o insert de uma unica string com seguinte conteudo:

“valor, data, codclasse, codproduto,cobrick”

Quando na verdade vc deveria passar 5 valores diferentes! Se valor, data, codclasse, codproduto e cobrick forem variaveis, vc precisa montar a query da seguinte maneira:

String query = "INSERT INTO DDD_FATO1(VENDA_EM_VOLUME, DATA, ID_CLASSE,ID_PRODUTO,ID_BRICKS) VALUES(" + valor + "," + data + "," + codclasse + "," + codproduto + "," + cobrick + ")";

OBS: Se o campo na tabela for String e nao numerico, nao esqueça de adicionar aspas. Por exemplo, se DATA for do tipo string, vc deve usar:

…VALUES( ‘" + valor + "’," + …

ao inves de:

…VALUES( " + valor + “,” + …

Rafael_Steil

Se bem que eh mais aconselhavel usar PreparedStatement do que esse metodo jurassico :slight_smile:

Rafael

D

Valeu Rafa e FLC, funcionou na boa, mas Rafa, como seria este PreparedStatement, seria melhor usá-lo??? por que? poderia me dar um exemplo, ou onde posso achar sobre isso??

Um abraço.

F

O PreparedStatement serve para facilitar a construcao das operacoes sql

Ex:

// criando o prepered statement
PreparedStatement prepStmt = conn.prepareStatement("INSERT INTO MINHA_TABELA VALUES (?,?,?)");

// definindo os parametros da consulta... Cada "?" na string da consulta
// eh um parametro que vamos definir abaixo:

// definindo parametro 1
prepStmt.setInt(1, 1000);

// definindo parametro 2
prepStmt.setString(2, "nome");

// definindo parametro 3
prepStmt.setString(3, variavel); // sendo que variavel eh uma String

prepStmt.execute();
D

Valeu, muito obrigado!!

Leonardo

PreparedStatement também tende a ser mais rápido uma vez que o comando já está “parseado”, não ? Somente o que muda-se são os valores passados ao comando SQL.

C

Mano, segue um exemplo bem prático sobre o assunto:

PreparedStatement pst = null;

pst = con.prepareStatement(UPDATE);
pst.setString(1,saida);
pst.setString(2,res.getIdentificacao());

pst.executeUpdate();
pst.close();
pst = null;


private static final String UPDATE = "update equipamento "+
"set situacao='CONFIRMADO' "+
"where situacao='A CONFIRMAR' "+
"and num_saida = ?"+
"and tipo_ident = ?";

Qualquer dúvida...

Guilherme_Silveira

ao contrario do q muita gente pensa, o preparedstatement PODE ser mais rapido e dependendo do driver e bd vagabundo q c usa ele nao faz diferenca alguma… soh fica mais lento pq vc usa mil chamadas pra um objeto que podia ser criado com uma soh.
De qq maneira, nao creio que um ambiente de producao hoje em dia ainda use access neh? ehhehehe

O preparedstatement depende da implementacao do driver e do bd… por isso as vezes ele nao faz diferenca

Gui

C

Guilherme,
Já que vc tocou no assunto…vc recomendaria aplicações java utilizando Banco MySql ? No meu trabalho eu utilizo Oracle e acho muito bom de interagir com ele. Agora, estou precisando fazer uns trabalhos extras e gostaria de usar o MySQL. Alguma objeção ?

Rafael_Steil

o Mysql eh muito bom sim, porem tem que analizar bem o que voce precisa. Mysql nao tem relacionamentos fisicos, ou seja, voce tem que “emular” tudo com varios left joins, nao tem procedures etc… mas eh bastante rapido e eh opensource.

Rafael

Guilherme_Silveira

o rafael mencionou umas vantagens do mysql
com certeza por ser gratuito e open source eh positivo
ainda velocidade e tal eh mais ainda
nao eh o yahoo, mas outro portal gigante esta usando. claro q sao duzias e duzias interligadas, mas tudo bem

se vc pretende usar codigos sql extremamente complicados e que vao ficar mil vezes melhores com oracle, va em frente, se seu projeto eh pequeno ou ate mesmo caseiro: demorou pra dar mais ajuda aos open-source

gui

Leonardo

Claro que tudo depende da necessidade (e disponibilidade de recursos $$$):

  • o MySql não suporta stored procedures
  • o Oracle possui um grande diferencial para quem trabalha com Java que são as JavaStoredProcedures (código Java armazenado e pronto para rodar diretamente no BD)
Criado 30 de setembro de 2002
Ultima resposta 2 de out. de 2002
Respostas 13
Participantes 6