Como está o campo na tabela do banco de dados?
Como date? Datetime?
drsmachado
Dá o seguinte erro na linha:
p.setDate(3, new java.sql.Date(dataFinal.getTime()));
cannot instantiate Date(long) at java.sql.Date to ()
Datetime, retornando 2010-02-01 09:07:28:367
neste formato!
Sim, datetime é este formato.
Tentou da forma que eu postei antes?
Não entendi.
Você não insere formatado, a idéia de formatar é justamente para exibição, você não vai exibir seus dados no banco, ou vai ? :shock:
O banco apenas “guarda” a informação que foi no dia tal, as tal horas/minutos/segundos/etc o formato que as informações estão no banco não devem interferir em nada, até porque diferentes bancos formatam datas/dados de diferentes maneiras e quanto menos você (você = sua aplicação) se importa em como os dados estão representados no banco, mais flexível sua aplicação fica (só pra constar, flexibilidade é bom ).
Na hora que você for exibir a data que ela deve ser formatada
[]'s
Bom Dia Thiago, não sei até que ponto é viavel você utilizar a classe calendar para fazer isso…
Eu acredito que seja mais interessante… Bom fica a minha sugestão…
Abraço
Bom…
Se você tem um date por exemplo no banco e insere no banco um GETDATE() ele não aceita.
O formato retornado pelo GETDATE() é diferente.
No java retorna Tue Feb 01 09:12:33 GMT -03:00 2011
Se você tentar no banco:
insert into tblRegistro (dataFinal) values (Tue Feb 01 09:12:33 GMT -03:00 2011)
ou até mesmo …values (“Tue Feb 01 09:12:33 GMT -03:00 2011”)
Ele te retorna um erro de incompatibilidade de formatos.
Tendo tudo isso em vista, este é o motivo para o qual eu preciso da data SAINDO corretamente no Banco, para não precisar ficar criando triggers no Banco para inserir a data correta, entendeu?
Se eu mandar isso do Java para o Banco ele da erro no banco e não insere nada.
[quote=drigo.angelo]Não entendi.
Você não insere formatado, a idéia de formatar é justamente para exibição, você não vai exibir seus dados no banco, ou vai ? :shock:
O banco apenas “guarda” a informação que foi no dia tal, as tal horas/minutos/segundos/etc o formato que as informações estão no banco não devem interferir em nada, até porque diferentes bancos formatam datas/dados de diferentes maneiras e quanto menos você (você = sua aplicação) se importa em como os dados estão representados no banco, mais flexível sua aplicação fica (só pra constar, flexibilidade é bom ).
Na hora que você for exibir a data que ela deve ser formatada
[]'s[/quote]
Desculpe drigo.angelo, mas a data a ser inserida é informada pelo usuário ou o sistema pega a data atual.
Bem, sendo assim, como você “guarda” a data atual? Passando direto um new Date()?
Ou você força o usuário a digitar a data no formato ISO, apenas para não convertê-la?
O usuário vai informar a data no formato que ele reconhece como tal (no caso do Brasil, dd/MM/yyyy), não?
Se eu informar isso ao banco de dados, qualquer que seja ele, ele vai entender como erro (a não ser que estejamos passando para uma procedure que esteja apta a converter, aí é outro esquema… Aliás, poderíamos até passar símbolos quânticos que não haveria problemas).
Código bonitiho, sim, nos padrões, ótimo.
Mas o nosso amigo não consegue inserir o dado.
Se é string ou não, se é uma árvore binária ou rubro negra, tanto faz, resolve o problema?
Vamos fazer assim, diferente!!!
Como executo procedure pelo Java?
Criei a Procedure que faz isso, já tenho os parâmetros, como executo ela?
Ficou assim o código…mas não é asssim, creio eu!
public void InsereResultado() {
String coman_proc = "exec AtualizaDataFinal (?,?,?)";
PreparedStatement p;
try {
p = this.cx.fazConexao().prepareStatement(coman_proc);
p.setString(1, form.getResultado());
p.setString(2, "2");
p.setInt(3, form.getProtocolo());
p.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
Então acho que eu entendi o problema errado, como eu disse
Pra inserir uma data no banco, utilize o método set(int, java.sql.Date) do preparedStatement
Se você sabe o formato que o usuário digitou, pode converter a String pra um objeto do tipo java.util.Date utilizando o método parse do SimpleDateFormat, igual você fez acima
Se for sempre pegar a data atual (sempre no sentido de todas as vezes que passar em um trecho específico do código) é melhor criar um new java.util.Date, que pega a data atual do sistema
Isso funciona e é “bonitinho” dentro dos padrões, só pensei que ele queria que no banco de dados os dados ficassem representados de uma maneira específica e queria ajustar isso na aplicação, tipo “quero que no banco de dados, as datas fiquem no formato ‘DD/MM/YYYY-HH:MM:SS.MMMM’, daí eu crio um campo do tipo varchar(24) e formato a data na aplicação toda vez que for inserir uma data, insiro como uma String” isso eu acho errado
Desculpe o transtorno, foi pq eu entendi errado…
[]'s
Pra executar a procedure depende do SGBD, no caso do postgress você teria que mudar o coman_proc = “exec AtualizaDataFinal (?,?,?)”; pra coman_proc = “SELECT AtualizaDataFinal (?,?,?)”;
Você já está usando preparedStatement, então, a chamada, caso seja o banco de dados MySQL é
String coman_proc = "CALL AtualizaDataFinal (?,?,?)";
Cada BD vai ter um diferente…
SQL Server.
Eu coloquei de uma forma que encontrei aqui, mas não deu não!! =x
Tá dificil, hein…
Acho que pra fazer o software todo não apanhei tanto, quanto esta data!!
[quote=Thiago0803]pmlm, valeu cara…
Mas olha o que deu!!
Cannot find symbol.
method parse(java.util.Date)
location: class java.text.SimpleDateFormat
Da esse erro.
O código ficou assim, após eu mudar apenas algumas coisinhas para se adequar ao meu necessário:
[code]
public void InsereResultado() {
String comando = "Update tblRegistro Set Resultado = ?, Situacao = ?, dataFinal = ? Where ProtocoloID = ?";
PreparedStatement p;
String formato = “yyyy-MM-dd HH:mm:ss.SSS”; // Formato no FORM
SimpleDateFormat formatter = new SimpleDateFormat(formato);
Date dataFinal = formatter.parse(form.getDataFinal());
try {
p = this.cx.fazConexao().prepareStatement(comando);
p.setString(1, form.getResultado());
p.setString(2, "2");
p.setDate(3, new java.sql.Date(dataFinal.getTime()));
p.setInt(4, form.getProtocolo());
p.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
[/code][/quote]
form.getDataFinal() já é um date? Nesse caso, podes tirar as três linhas antes do try e mudar só a linha do setDate para:
p.setDate(3, new java.sql.Date(form.getDataFinal().getTime()));
Código ficou:
public void InsereResultado() {
//String coman_proc = "exec AtualizaDataFinal (?,?,?)";
String coman_proc = "CALL AtualizaDataFinal (?,?,?)";
PreparedStatement p;
try {
p = this.cx.fazConexao().prepareStatement(coman_proc);
p.setString(1, form.getResultado());
p.setString(2, "2");
p.setInt(3, form.getProtocolo());
p.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
Deu os seguinte erros:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ‘@P0’.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1373)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:371)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:322)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:133)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:304)
Desculpa cara, acabei esquecendo.
Você vai precisar do CallableStatement e não do preparedStatement.
Aqui tem um exemplo
http://www.java2s.com/Code/Java/Database-SQL-JDBC/CallStoredProcedureInMySql.htm
Eu uso
cs.registerOutParameter(1, java.sql.Types.INTEGER);
ou não?
Utilizo SQL Server e isso é de MySQL, não sei se é mesma sintaxe, é?
Aí vai um exemplo para SQLServer
http://www.javadb.com/connect-to-database-and-call-stored-procedure
E aqui:
http://onjava.com/pub/a/onjava/2003/08/13/stored_procedures.html?page=1
http://onjava.com/pub/a/onjava/2003/08/13/stored_procedures.html?page=2
Esquece!!
Não consigo, não está indo de jeito nenhum!!
Já tinha visto este site e tentei.
…valeu pela ajuda, mas depois de 1 semana tentando eu desisto!
uahuahau…
Depois de uma semana, desistir?
Se a questão é só formato da data, bem, joga como String mesmo e acabou.
Desistir desta etapa do programa
Vou fazer alguns outros ajustes que precisam ser feitos ainda e mais pra frente eu vejo este problema da data!!
=D