Converter java.util.Date para java.sql.Date [RESOLVIDO]

22 respostas
victorhdchagas

Olá a todos, preciso de ajuda …
Estou tentando inserir data no Firebird, mas identifiquei que o banco pede Date no Formato SQL…
criei um metodo que retornasse esse código:

public java.sql.Date converterSQLDateToUtilDate(java.util.Date data)throws Exception{

return new java.sql.Date(data.getTime());//Sendo que o construtor, pede LONG

}

Em algumas partes do codigo funciona, mas em outras da erro valendo recordar que é a mesma DATA =[

Alguem tem alguma sugestao ?

22 Respostas

mauricioadl

em qual situação o erro ocorre?

nao vejo problema nenhum no codigo.

victorhdchagas
org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to date.

at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:789)

at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:297)

at br.com.wtm.dao.WTM5DAO.add(WTM5DAO.java:120)

at br.com.wtm.web.FinalizarPedido.confirmarPedido(FinalizarPedido.java:60)

at br.com.wtm.web.FinalizarPedido.processRequest(FinalizarPedido.java:27)

at br.com.wtm.web.FinalizarPedido.doPost(FinalizarPedido.java:100)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Unknown Source)

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to date.
Rodrigo_Sasaki

além do fato do nome do seu conversor estar invertido, também não vejo erro nenhum.

só lembre de arrumar o nome pra não confundir outra pessoa que possa usar o método, ou até você mesmo.

EDIT: fiz um converter que recebe um java.util.Date e retorna um java.sql.Date igual o seu e funcionou

mauricioadl

nao conheco firebird, mas sera que ele nao tem distinção entre date e datetime?

victorhdchagas

Beleza, quanto ao conversor, digitei no inicio do forum invertido mesmo, mas no codigo ta DateToSqlDate(…)
O Metodo que uso pra converter é esse:

protected java.sql.Date convertDateToSqlDate(Date data) {
	if(data == null){
		return null;
	}else{
		return new java.sql.Date(data.getTime());
	}
}
E o que estou chamando esse metodo é esse:

stmt.setDate(i, super.convertDateToSqlDate(obj.getDATA()));

i++;

Valendo recordar que o obj.getDate() retorna um java.util.Date

Rodrigo_Sasaki

você tem uma stacktrace mais completa?

victorhdchagas

digaoneves:
além do fato do nome do seu conversor estar invertido, também não vejo erro nenhum.

só lembre de arrumar o nome pra não confundir outra pessoa que possa usar o método, ou até você mesmo.

EDIT: fiz um converter que recebe um java.util.Date e retorna um java.sql.Date igual o seu e funcionou

Pois é funciona sim, em outras partes do codigo funciona corretamente… verifiquei o valor que ta sendo passado atraves do metodo utilData.getTime() e o valor é:1333045062359
Porém, dessa vez ta retornando Nulo… :S

victorhdchagas

Acabei de fazer um teste aqui… coloquei no Watch e tive esse retorno, nao sei se ajuda
“new java.sql.Date(1333045062359)
The literal 1333045062359 of type int is out of range

victorhdchagas

Não só aparece essa StackTrace… =[

Rodrigo_Sasaki

victorhdchagas:
Acabei de fazer um teste aqui… coloquei no Watch e tive esse retorno, nao sei se ajuda
“new java.sql.Date(1333045062359)
The literal 1333045062359 of type int is out of range

realmente um int desse tamanho é impossível… o valor máximo que um numero inteiro pode receber é [telefone removido], se você fizer esse código abaixo vai ver.

System.out.println(Integer.MAX_VALUE);

mas o método getTime() do java.util.Date deveria retornar um Long, que suporta esse número…

victorhdchagas

digaoneves:
victorhdchagas:
Acabei de fazer um teste aqui… coloquei no Watch e tive esse retorno, nao sei se ajuda
“new java.sql.Date(1333045062359)
The literal 1333045062359 of type int is out of range

realmente um int desse tamanho é impossível… o valor máximo que um numero inteiro pode receber é [telefone removido], se você fizer esse código abaixo vai ver.

System.out.println(Integer.MAX_VALUE);

mas o método getTime() do java.util.Date deveria retornar um Long, que suporta esse número…

Acontece que o construtor do java.sql.Date pede um Long…

Rodrigo_Sasaki

sim… o que eu estou estranhando é ele falar “The literal 1333045062359 of type int is out of range” sendo que o método retorna um long…

sei que é meio forçação de barra hehehe… mas tenta dar um cast pra Long, também nunca mexi com Firebird, não sei o que poderia ser… desculpa, hehehe

victorhdchagas

digaoneves:
sim… o que eu estou estranhando é ele falar “The literal 1333045062359 of type int is out of range” sendo que o método retorna um long…

sei que é meio forçação de barra hehehe… mas tenta dar um cast pra Long, também nunca mexi com Firebird, não sei o que poderia ser… desculpa, hehehe

Fiz o Cast e o erro persiste:

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to date.

at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:789)

at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:297)
nel

victorhdchagas:
digaoneves:
sim… o que eu estou estranhando é ele falar “The literal 1333045062359 of type int is out of range” sendo que o método retorna um long…

sei que é meio forçação de barra hehehe… mas tenta dar um cast pra Long, também nunca mexi com Firebird, não sei o que poderia ser… desculpa, hehehe

Fiz o Cast e o erro persiste:

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to date.

at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:789)

at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:297)</blockquote>

O problema é que provavelmente o tipo de dado que o Firebird está armazenando em base é diferente do que está sendo recebido em classe.
Verifique isso, pode ser um Timestamp.

victorhdchagas

nel:
victorhdchagas:
digaoneves:
sim… o que eu estou estranhando é ele falar “The literal 1333045062359 of type int is out of range” sendo que o método retorna um long…

sei que é meio forçação de barra hehehe… mas tenta dar um cast pra Long, também nunca mexi com Firebird, não sei o que poderia ser… desculpa, hehehe

Fiz o Cast e o erro persiste:

org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to date.

at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:789)

at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:297)</blockquote>

O problema é que provavelmente o tipo de dado que o Firebird está armazenando em base é diferente do que está sendo recebido em classe.
Verifique isso, pode ser um Timestamp.


Entendi, nem li ainda sobre o timeStamp, mas meu ponto de vista é … se o método do Firebird pede long e eu passo Long, ele nao pode recusar… =S

victorhdchagas

E o Date é java.sql.Date… não é pra dar problemas :S

nel

É Long ou long? Um é wrapper e outro primitivo (vai saber que tipo de implementação tem esse firebird).
Depois, poste todo o seu código que realiza a comunicação com banco, onde está gerando esse erro, mas o método completo, não só a linha.

E se usar date, poste com o pacote que voce usa, java.util.Date ou java.sql.Date, para identificarmos.
Abraços.

victorhdchagas
nel:
victorhdchagas:
E o Date é java.sql.Date... não é pra dar problemas :S

É Long ou long? Um é wrapper e outro primitivo (vai saber que tipo de implementação tem esse firebird).
Depois, poste todo o seu código que realiza a comunicação com banco, onde está gerando esse erro, mas o método completo, não só a linha.

E se usar date, poste com o pacote que voce usa, java.util.Date ou java.sql.Date, para identificarmos.
Abraços.

Imports:
import java.sql.Time; import java.util.Date;
Super :
protected java.sql.Date convertDateToSqlDate(Date data) {

		if (data == null) {
			return null;
		} else {
			return new java.sql.Date(data.getTime());

		}
	}
Metodo de persistência =S
public void add(WTM5 obj) throws Exception {
		int i = 1;
		open();
		stmt = con
				.prepareStatement("insert into WTM5 (NUMERO,NOTA,CODCLI,NOME,FANTASIA,VENDEDOR,CFOP,CODIGO,UNIDADE,MERCADORIA,CODIGOCLIENTE,CADASTRO,ALTERACAO,PRECOABAIXOCUSTO,ESTOQUEINSUFICIENTE,ROTA,MAPA,SITUACAO,ECF,HORACADASTRO ,HORAALTERACAO ,HORAPRECOABAIXOCUSTO ,HORAESTOQUEINSUFICIENTE ,	FATOR ,QUANTIDADE ,PRECO ,TOTAL ,REGISTRO ,PRAZO ,DATA ,VENCIMENTO ,DATACADASTRO ,DATAALTERACAO ,DATAPRECOABAIXOCUSTO ,DATAESTOQUEINSUFICIENTE) values "
						+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  ?,  ?,  ?, ?,  ?, ?, ?,  ?,  ?, ?, ?, ?,  ?, ?,  ?, ?,  ?, ?,  ?, ?,  ?,  ?,  ?, ?,  ?) ");
		stmt.setString(i, obj.getNUMERO());
		i++;
		stmt.setString(i, obj.getNOTA());
		i++;
		stmt.setString(i, obj.getCODCLI());
		i++;
		stmt.setString(i, obj.getNOME());
		i++;
		stmt.setString(i, obj.getFANTASIA());
		i++;
		stmt.setString(i, obj.getVENDEDOR());
		i++;
		stmt.setString(i, obj.getCFOP());
		i++;
		stmt.setString(i, obj.getCODIGO());
		i++;
		stmt.setString(i, obj.getUNIDADE());
		i++;
		stmt.setString(i, obj.getMERCADORIA());
		i++;
		stmt.setString(i, obj.getCODIGOCLIENTE());
		i++;
		stmt.setString(i, obj.getCADASTRO());
		i++;
		stmt.setString(i, obj.getALTERACAO());
		i++;
		stmt.setString(i, obj.getPRECOABAIXOCUSTO());
		i++;
		stmt.setString(i, obj.getESTOQUEINSUFICIENTE());
		i++;
		stmt.setString(i, obj.getROTA());
		i++;
		stmt.setString(i, obj.getMAPA());
		i++;
		stmt.setString(i, obj.getSITUACAO());
		i++;
		stmt.setString(i, obj.getECF());
		i++;
		stmt.setTime(i, super.convertDateToTime(obj.getHORACADASTRO()));
		i++;
		stmt.setTime(i, super.convertDateToTime(obj.getHORAALTERACAO()));
		i++;
		stmt.setTime(i, super.convertDateToTime(obj.getHORAPRECOABAIXOCUSTO()));
		i++;
		stmt.setTime(i, super.convertDateToTime(obj
				.getHORAESTOQUEINSUFICIENTE()));
		i++;
		stmt.setDouble(i, obj.getFATOR());
		i++;
		stmt.setDouble(i, obj.getQUANTIDADE());
		i++;
		stmt.setDouble(i, obj.getPRECO());
		i++;
		stmt.setDouble(i, obj.getTOTAL());
		i++;
//		stmt.setDouble(i, obj.getPERCENTUAL());
//		i++;
//		stmt.setDouble(i, obj.getDESCONTO());
//		i++;
//		stmt.setDouble(i, obj.getDESCONTOVALOR());
//		i++;
//		stmt.setDouble(i, obj.getALIQUOTAICMS());
//		i++;
//		stmt.setDouble(i, obj.getVALORICMS());
//		i++;
//		stmt.setDouble(i, obj.getBASEISENTO());
//		i++;
//		stmt.setDouble(i, obj.getBASEOUTROS());
//		i++;
//		stmt.setDouble(i, obj.getVALORCONTABIL());
//		i++;
//		stmt.setDouble(i, obj.getALIQUOTAICMSCAD());
//		i++;
//		stmt.setDouble(i, obj.getALIQUOTAREDUZIDACAD());
//		i++;
//		stmt.setDouble(i, obj.getDESPESA());
//		i++;
//		stmt.setDouble(i, obj.getFRETE());
//		i++;
//		stmt.setDouble(i, obj.getSEGURO());
//		i++;
//		stmt.setDouble(i, obj.getBASEST());
//		i++;
//		stmt.setDouble(i, obj.getST());
//		i++;
//		stmt.setDouble(i, obj.getMVA());
//		i++;
//		stmt.setDouble(i, obj.getALIQUOTAST());
//		i++;
//		stmt.setDouble(i, obj.getCUSTOST());
//		i++;
//		stmt.setInt(i, obj.getREGISTRO());
//		i++;
		stmt.setInt(i, obj.getPRAZO());
		i++;
//		stmt.setInt(i, obj.getCODIGOUNIDADE());
//		i++;
//		stmt.setInt(i, obj.getEMPRESTIMO());
//		i++;
//		stmt.setInt(i, obj.getICMSMANUAL());
//		i++;
//		stmt.setInt(i, obj.getSTMANUAL());
//		i++;
//		stmt.setDate(i, super.convertDateToSqlDate(obj.getDATA()));
		stmt.setString(i, "03.30.2012");
		i++;
		stmt.setDate(i, super.convertDateToSqlDate(obj.getVENCIMENTO()));
		i++;
		stmt.setDate(i, super.convertDateToSqlDate(obj.getDATACADASTRO()));
		i++;
		stmt.setDate(i, super.convertDateToSqlDate(obj.getDATAALTERACAO()));
		i++;
		stmt.setDate(i, super.convertDateToSqlDate(obj
				.getDATAPRECOABAIXOCUSTO()));
		i++;
		stmt.setDate(i, super.convertDateToSqlDate(obj
				.getDATAESTOQUEINSUFICIENTE()));
		i++;
		stmt.execute();
close();
victorhdchagas

e sim, é wrapper… :s

victorhdchagas

Abaixo tem uma linha comentada, dizendo onde é o ERror.

public void add(WTM5 obj) throws Exception { int i = 1; open(); stmt = con .prepareStatement("insert into WTM5 (NUMERO,NOTA,CODCLI,NOME,FANTASIA,VENDEDOR,CFOP,CODIGO,UNIDADE,MERCADORIA,CODIGOCLIENTE,CADASTRO,ALTERACAO,PRECOABAIXOCUSTO,ESTOQUEINSUFICIENTE,ROTA,MAPA,SITUACAO,ECF,HORACADASTRO ,HORAALTERACAO ,HORAPRECOABAIXOCUSTO ,HORAESTOQUEINSUFICIENTE , FATOR ,QUANTIDADE ,PRECO ,TOTAL ,REGISTRO ,PRAZO ,DATA ,VENCIMENTO ,DATACADASTRO ,DATAALTERACAO ,DATAPRECOABAIXOCUSTO ,DATAESTOQUEINSUFICIENTE) values " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "); stmt.setString(i, obj.getNUMERO()); i++; stmt.setString(i, obj.getNOTA()); i++; stmt.setString(i, obj.getCODCLI()); i++; stmt.setString(i, obj.getNOME()); i++; stmt.setString(i, obj.getFANTASIA()); i++; stmt.setString(i, obj.getVENDEDOR()); i++; stmt.setString(i, obj.getCFOP()); i++; stmt.setString(i, obj.getCODIGO()); i++; stmt.setString(i, obj.getUNIDADE()); i++; stmt.setString(i, obj.getMERCADORIA()); i++; stmt.setString(i, obj.getCODIGOCLIENTE()); i++; stmt.setString(i, obj.getCADASTRO()); i++; stmt.setString(i, obj.getALTERACAO()); i++; stmt.setString(i, obj.getPRECOABAIXOCUSTO()); i++; stmt.setString(i, obj.getESTOQUEINSUFICIENTE()); i++; stmt.setString(i, obj.getROTA()); i++; stmt.setString(i, obj.getMAPA()); i++; stmt.setString(i, obj.getSITUACAO()); i++; stmt.setString(i, obj.getECF()); i++; stmt.setTime(i, super.convertDateToTime(obj.getHORACADASTRO())); i++; stmt.setTime(i, super.convertDateToTime(obj.getHORAALTERACAO())); i++; stmt.setTime(i, super.convertDateToTime(obj.getHORAPRECOABAIXOCUSTO())); i++; stmt.setTime(i, super.convertDateToTime(obj .getHORAESTOQUEINSUFICIENTE())); i++; stmt.setDouble(i, obj.getFATOR()); i++; stmt.setDouble(i, obj.getQUANTIDADE()); i++; stmt.setDouble(i, obj.getPRECO()); i++; stmt.setDouble(i, obj.getTOTAL()); i++; // stmt.setDouble(i, obj.getPERCENTUAL()); // i++; // stmt.setDouble(i, obj.getDESCONTO()); // i++; // stmt.setDouble(i, obj.getDESCONTOVALOR()); // i++; // stmt.setDouble(i, obj.getALIQUOTAICMS()); // i++; // stmt.setDouble(i, obj.getVALORICMS()); // i++; // stmt.setDouble(i, obj.getBASEISENTO()); // i++; // stmt.setDouble(i, obj.getBASEOUTROS()); // i++; // stmt.setDouble(i, obj.getVALORCONTABIL()); // i++; // stmt.setDouble(i, obj.getALIQUOTAICMSCAD()); // i++; // stmt.setDouble(i, obj.getALIQUOTAREDUZIDACAD()); // i++; // stmt.setDouble(i, obj.getDESPESA()); // i++; // stmt.setDouble(i, obj.getFRETE()); // i++; // stmt.setDouble(i, obj.getSEGURO()); // i++; // stmt.setDouble(i, obj.getBASEST()); // i++; // stmt.setDouble(i, obj.getST()); // i++; // stmt.setDouble(i, obj.getMVA()); // i++; // stmt.setDouble(i, obj.getALIQUOTAST()); // i++; // stmt.setDouble(i, obj.getCUSTOST()); // i++; // stmt.setInt(i, obj.getREGISTRO()); // i++; stmt.setInt(i, obj.getPRAZO()); i++; // stmt.setInt(i, obj.getCODIGOUNIDADE()); // i++; // stmt.setInt(i, obj.getEMPRESTIMO()); // i++; // stmt.setInt(i, obj.getICMSMANUAL()); // i++; // stmt.setInt(i, obj.getSTMANUAL()); // i++; stmt.setDate(i, super.convertDateToSqlDate(obj.getDATA())); // Essa // Linha é a // que da // Error! i++; stmt.setDate(i, super.convertDateToSqlDate(obj.getVENCIMENTO())); i++; stmt.setDate(i, super.convertDateToSqlDate(obj.getDATACADASTRO())); i++; stmt.setDate(i, super.convertDateToSqlDate(obj.getDATAALTERACAO())); i++; stmt.setDate(i, super.convertDateToSqlDate(obj .getDATAPRECOABAIXOCUSTO())); i++; stmt.setDate(i, super.convertDateToSqlDate(obj .getDATAESTOQUEINSUFICIENTE())); i++; stmt.execute(); close(); }

aechiara

talvez esse FAQ ajude:

http://www.firebirdfaq.org/faq314/

pelo que li, eu tentaria usar timestamp, se não desse, tentaria passar como String

victorhdchagas

Problema resolvido
Tenho até vergonha de falar… rs
O Campo DATA na query é o 30º campo, e estou inserindo o campo DATA no campo 29 (ou seja, inserindo data no Integer)
Foi mal povo, foi desatenção mesmo, agradeço a todos :wink:

Criado 29 de março de 2012
Ultima resposta 30 de mar. de 2012
Respostas 22
Participantes 5