Receber data do MySQL

4 respostas
F

Seguinte galera to com um probleminha aqui quando faço o resultSet no banco a data da o erro abaixo ja tentei de várias maneiras receber o que vem da data e não ta dando certo.

Exception in thread "main" java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
	at com.mysql.jdbc.ResultSet.getDateFromString(ResultSet.java:2048)
	at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5732)
	at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5544)
	at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5584)
	at br.com.struts.dao.CRUDar.listar(CRUDar.java:67)
	at br.com.struts.actions.ar.Teste.main(Teste.java:17)
public List listar() throws SQLException{		
		String sql = "Select * From controlear_ar";
		PreparedStatement ps = getConexao().prepareStatement(sql);
		ResultSet rs = ps.executeQuery(sql);
		List<AR> ars = new ArrayList<AR>();		
		while(rs.next()){
			
			AR ar = new AR();			
			ar.setCodigo(rs.getInt("ar_co_ar"));
			ar.setData(rs.getDate("ar_dt_entrega"));
			ar.setEnviadas(rs.getInt("ar_qt_entrega"));
			ar.setRecebidas(rs.getInt("ar_qt_recebimento"));
			ar.setCliente(rs.getInt("fk_cli_co_cliente"));
			ars.add(ar);
		}
		rs.close();
		ps.close();			
		return ars;
	}

4 Respostas

tecdanilo

Dá uma olhada na documentação do mysql, tem função para formatar a data. Outra coisa, tenta executar a consulta
no console do mysql e vê se o campo de data não contém dados nulos.

Espero ter ajudado.

guilhermetonetto
date_format(CAMPO_DATA, '%d/%m/%Y') as CAMPO_DATA

[]'s

F

A tabela como o campo data tem a data com zeros mas nulo não tem não.

Y

Pois é… o MySQL está aceitando datas zeradas no seu banco.

Ou seja, para datas inválidas, está sendo usado ‘0000-00-00’. O que está ocorrendo: quando a API JDBC do MySQL tenta recuperar esse valor e instanciar uma java.sql.Date, ocorre o erro pois zeros não representam uma data válida. O que está havendo não é um erro técnico.

Solução:

// use isso na sua instrução para pegar a data:
SELECT IF(NomeDoCampoData = '0000-00-00', NULL, NomeDoCampoData) AS NomeDoCampoData FROM tbl;

E no código você vai precisar verificar se é nulo:

java.sql.Date date = null;

if (rs.getObject("NomeDoCampoData") != null)
  { date = rs.getDate("NomeDoCampoData"); }
Criado 17 de janeiro de 2008
Ultima resposta 17 de jan. de 2008
Respostas 4
Participantes 4