Não tá usando hibernate, né?
Dependendo o banco de dados, caso vc passe como argumento a função “now()”, estará informando a data e hora atuais.
Sei que no oracle não funciona (a função tem outro nome)
Bom… Você pode usar um DateFormat da vida, se você está escrevendo os SQLs na mão, apenas com Strings…
Mas acho que se você usar um PreparedStatement, você só precisa usar um stmt.setDate(…) e pronto.
Segue o código do método da classe que manipula a inserção:
public void InsereResultado() {
String comando = "Update tblRegistro Set Resultado = ? AND Situacao = ? Where ProtocoloID = '"+ form.getProtocolo() +"'";
PreparedStatement p;
try {
p = this.cx.fazConexao().prepareStatement(comando);
p.setString(1, form.getResultado());
p.setString(2, "2");
p.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
Eu tinha feito uma trigger no banco, mas devido a outra que eu já criei, ele dispara automático e não quero isso!!
Eu quero atualizar também o campo dataFinal que é um datetime e está NULL no banco…
Você está alterando o código, certo?
Qual o banco de dados?
Você pode usar, como dito pelo eltonads, um dateformat ou qubrar na mão mesmo e inserir.
Se a data a ser inserida, na atualização, é a atual, coloca logo um now() e pronto.
SQL basiquinho - Update:
Quando você executa um update, como está ali na query, precisa passar:
1 - o nome da coluna que será atualizada;
2 - o novo valor da coluna;
3 - cláusula where, indicando qual índice deverá ser alterado, caso contrário, todos os registros serão;
Sua query diz que as colunas resultado e situação serão anteradas enquanto o protocoloid é o que foi selecionado. Deve existir um campo com o nome data, suponhamos que ele seja dataAtual:
//código para converter a data aqui
//mais código aqui se preciso
String comando = "Update tblRegistro Set Resultado = ?, Situacao = '2', dataAtual = ? Where ProtocoloID = ?";
try {
PreparedStatement stmt = cx.fazConexao().prepareStatement(comando);
stmt.setString(1, form.getResultado());
stmt.setString(2, sua_variavel_com_a_nova_data_aqui);
stmt.setInt(3, form.getProtocolo());
stmt.execute();
stmt.close();
JOptionPane.showMessageDialog(null, "Resultado inserido corretamente!");
} catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Resultado não inserido!\n\nConsulte o chamado e insira novamente.");
}
Eu criei o formatador, ele formata a data ATUAL corretamente do jeito que eu quero inserir.
O problema é:
Como eu insiro isso no banco?
Se eu coloco formatter.format(data) no meu update ele não vai.
Se eu coloco data2 = formatter.format(data); e insiro data2 no meu update ele não vai também
O formato está correto, Update tá tranquilo, o problema está em COMO inserir a data!!
A query é uma string, é isso que o banco vai receber como parâmetro. Independente do tipo de dados que você tem, o BD só vai saber do que se trata quando fizer a leitura do comando.
Acontece que se você passa a data formatada com o padrão brasileiro (dd/MM/yyyy) o BD não reconhece isto.
Se você instancia um objeto do tipo Date(), ele estará formatado da seguinte forma:
public static void main(String args[]){
Date d = new Date();
System.out.println(d);
}
cuja saída seria:
Mon Jan 31 15:24:27 BRST 2011
O BD não compreende do que se trata, simplesmente irá retornar erro.
Por isso a necessidade de formatar a data para um pattern mais “ajeitado”.
Concordo que datas devem ser inseridas como date e horas e afins com o formato adequado.
Eventualmente há a necessidade de persistir essa informação em um único campo ou, pior, o banco de dados já existe e o “bendito” sujeito que o desenvolveu implicou que seria assim.
Cara, mas e como eu insiro a data FORMATADA do jeito que coloquei lá?
Eu até entendo o que estão dizendo, mas não consigo encontrar uma forma de inserir formatado.
Ele insere com getTime(), insere sem getTime(), mas ele dá erro na inserção, update e afins por que não está no formato correto.