[SOLUCIONADO] Dando insert com JDBC puro usando Mysql
16 respostas
A
andredecotia
Olá pessoal, estou dando insert usando JDBC 4 puro no MySQL, preciso mandar uma instrução para o MySQL na hora de inserção, para
que ele possa pegar a data, veja como estou fazendo, está dando MysqlDataTruncationException pois o MySQL não está assimilando como
uma instrução SQL:
Datedate=newDate();SimpleDateFormatformatter=newSimpleDateFormat("MM-dd-yyyy");// ou MM/dd/yyyysysout(formatter.format(date))
Preciso usar MySQL...
drsmachado
Entendi direito ou você possui 3 colunas no banco de dados, uma dia, outra mês e outra ano?
Cara, isso vai contra todas as boas práticas.
Crie apenas um campo e trate a data no código, isso é uma boa prática. Permite que teu programa seja aproveitado futuramente e, até mesmo, facilita eventuais manutenções.
Mas, se você prefere fazer assim, sugiro dar uma olhada aqui http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html
narciso.benigno
Olá andredecotia, como está?
Por que não usa java? Fica portavel, simples e pode inserir tanto date como timestemp:
por exemplo:
Abraço!
A
andredecotia
Olá narciso, olá drsmachado, primeiramente agradeço ajuda de vocês…
Preciso que seja feito em MySQL pois é desta maneira irá manter a data do servidor, vai que a máquina do cliente esteja bichada (data mal configurada) pois estou fazendo uma aplicação/serviço pontual que irá rodar diretamente no computador cliente, tende? Já sei com é a sintaxe MySQL pra isso, é:
date_format(now(), ‘%d-%m-%Y’)
Conforme citado acima… Só que quando tento passar como instrução ao MySQL via JDBC que da caca… O MySQL não entende como instrução para
converter isso em data -> ex: 08-01-2011… E detalhe, é uma coluna que irá receber na tabela, ex: 08-01-2011…
Fui claro?
drigo.angelo
Faz assim, debuga o código e verifica qual a string sql que o preparedstatement está enviando para o banco, talvez está ocorrendo algum problema ao gerar essa string…
Você já rodou essa consulta fora da app (direto no banco)? Deu certo?
Se isso é estático, não tem porque não ir logo no SQL.
Pois é, dá MysqlTruncationException... Ele tenta fazer o seguinte:
INSERT INTO retorno_conversao
(data, isbnIdigital, empresa)
VALUE
(date_format(now(), '%d-%m-%Y'), [telefone removido] , 'EQUIPE INTERNA')
A
andredecotia
Só que ele tentar persistir date_format(now(), ‘%d-%m-%Y’) ao invés de trazir em data pra persistir…
A
ADEMILTON
Tente definir no campo da tabela uma constraint default com a função que vai retornar a data que precisa. Assim nem precisará de esquentar em mandar isso pela sql da tua aplicação.
Isso acontece porque via JDBC você substitui dinamicamente valores que são passados via parâmetros. O JDBC (até onde conheço) não faz substituição de pedaços da instrução SQL que é mandada pro banco. (desculpa se não soube explicar direito, a idéia é mais clara do que as palavras)
pmlm
E não é isso que tu queres? De que tipo é a coluna data?
A
andredecotia
A coluna é varchar… Mas não executa não transforma aquela instrução em data… Por isso dá pau…
pmlm
varchar com que tamanho? e de que tipo são as outras colunas?
Conforme eu pus, deveria funcionar correctamente.
A query está correcta:INSERT INTO retorno_conversao
(data, isbnIdigital, empresa)
VALUE
(date_format(now(), '%d-%m-%Y'), [telefone removido] , 'EQUIPE INTERNA')
drigo.angelo
#Comoassim ? :shock:
Campo para armazenar datas deve ser do tipo timestamp ou date :!:
A
andredecotia
pmlm:
varchar com que tamanho? e de que tipo são as outras colunas?
Conforme eu pus, deveria funcionar correctamente.
A query está correcta:INSERT INTO retorno_conversao
(data, isbnIdigital, empresa)
VALUE
(date_format(now(), '%d-%m-%Y'), [telefone removido] , 'EQUIPE INTERNA')
Galera, funcionou! Não me pergunte o que fiz! hehehe, aliás, não fiz nada e funcionou :shock: … hehehe… Erro tipo disco voador, ninguém vê, se você vê, quando tenta mostrar pra alguém some, e realmente sumiu! hehehe…
Valeu mesmo pela ajuda de cada um…
Abração,
pmlm
#Comoassim ? :shock:
Campo para armazenar datas deve ser do tipo timestamp ou date :!:
Exactamente, e bastaria o now(). Mas nem fui por ai porque me parece que neste momento o erro não é por causa dessa coluna.