Problemas com Datas no DAO

10 respostas
M

Boa Noite galera,

estou com um problema, eu tenho um dao onde eu cadastro datas no banco mysql, eu tenho um jsp onde eu tenho 4 datas, porem tera hora que eu só digitarei 1 data, ou 2 datas, as vezes as 4, mas tenho q ter o campo para cadastrar as 4 datas, quando eu digito somente uma data, da null point, pq eu tenho q digitar todas as datas, pq sera? para cadastrar a data no banco eu tenho q colocar:

stmt.setDate(1, new Date(dados.getServicos.getdata.gettimeimmillis… se estiver errado é pq digitei de cabeca.

entao alguem poderia me ajudar dando uma luz?

agradeço desde ja…

SDS

10 Respostas

drsmachado

NullPointerException sempre será lançada quando você invocar um método de um objeto que não foi instanciado.
Isso significa que, ao criar o java.sql.Date(long ms); e o valor for nulo, ele apresentará erro.

Falando em termos de lógica de programação, toda vez que uma variável pode variar entre null e algum valor, é coerente e interessante colocar uma estrutura condicional (if) para tratar e evitar erros.

Como você pode pegar de nenhuma às 4 datas, seria bom colocar os valores de cada campo em uma variável, verificar se é null e então tratar adequadamente…

Sem falar que, está usando DAO, mas pega o valor diretamente, misturando camadas de persistência e apresentação, não é?

luxu

se vc está sendo “obrigado” a digitar as datas quer dizer q no seu banco o campo está setado como not null, se for essa a dúvida está sanada!

M

luxu, obrigado pela resposta,
mas o erro nao é esse, nao esta setado como not null no banco, o erro que da e null point, no java…

M

drsmachado

irei tentar sua dica, pode sim dar certo, nao tinha pensado nisso, jaja posto se consegui ou nao.
abraco

M

cara, fiz mais ou menos oq eu entendi sobre as dicas. agora o erro é outro…
segue oq eu fiz e o erro:

stmt = connection.prepareStatement("insert into servicos values(null,?,?,?,?,?,?,?)");
			
			stmt.setString(1, dados.getServicos().getNome());
			stmt.setInt(2, dados.getFrentes().getId());
			
						
			if(dados.getServicos().getDataIclasse() != null) {
				stmt.setDate(3, new Date(dados.getServicos().getDataIclasse().getTimeInMillis()));
								
			} else if (dados.getServicos().getDataFclasse() != null) {
				stmt.setDate(4, new Date(dados.getServicos().getDataFclasse().getTimeInMillis()));
				
			} else if (dados.getServicos().getDataIpidf() != null) {
				stmt.setDate(5, new Date(dados.getServicos().getDataIpidf().getTimeInMillis()));

			} else if (dados.getServicos().getDataFpidf() != null) {
				stmt.setDate(6, new Date(dados.getServicos().getDataFpidf().getTimeInMillis()));
			}
						
			stmt.setString(7, "N/A");
			stmt.execute();
			stmt.clearParameters();

agora o erro

java.sql.SQLException: No value specified for parameter 3
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
	com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2560)
	com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2536)
	com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2462)
	com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1300)
	br.com.gop.DAO.ControleAcompanhamentosDAO.cadastraAcompanhamento(ControleAcompanhamentosDAO.java:78)
	br.com.gop.action.ControleAcompamentosAction.execute1(ControleAcompamentosAction.java:37)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
luxu

se as datas vierem NULAS qual a sua idéia? setar null, se for pra cada if terá q ter um else q vai passar nulo, saka?

M

po cara… tentei modificar pelo q entendi q vc falou mas continua o mesmo erro acima…
parameter 3… nao sei se fiz direito pq sou iniciante… segue a modificacao, o erro continua exatamente o mesmo.

if(dados.getServicos().getDataIclasse() == null) {
				dados.getServicos().setDataIclasse(null);
			} else {
				stmt.setDate(3, new Date(dados.getServicos().getDataIclasse().getTimeInMillis()));
	
			
			}  if (dados.getServicos().getDataFclasse() == null) {
				dados.getServicos().setDataFclasse(null);
			} else {
				stmt.setDate(4, new Date(dados.getServicos().getDataFclasse().getTimeInMillis()));
				
			} if (dados.getServicos().getDataIpidf() == null) {
				dados.getServicos().setDataIpidf(null);
			} else {
				stmt.setDate(5, new Date(dados.getServicos().getDataIpidf().getTimeInMillis()));

			}  if (dados.getServicos().getDataFpidf() == null) {
				dados.getServicos().setDataFpidf(null);
			} else {
				stmt.setDate(6, new Date(dados.getServicos().getDataFpidf().getTimeInMillis()));
			}
						
			stmt.setString(7, "N/A");
			stmt.execute();
			stmt.clearParameters();
M

Dêem um help ai galera…

R

Mouzer,

Tenta assim:

if(dados.getServicos().getDataIclasse() == null) {

stmt.setNull(3, java.sql.Types.DATE);

} else {

stmt.setDate(3, new Date(dados.getServicos().getDataIclasse().getTimeInMillis()));
}  if (dados.getServicos().getDataFclasse() == null) {  
            stmt.setNull(4, java.sql.Types.DATE);  
        } else {  
            stmt.setDate(4, new Date(dados.getServicos().getDataFclasse().getTimeInMillis()));  
              
        } if (dados.getServicos().getDataIpidf() == null) {  
            stmt.setNull(5, java.sql.Types.DATE); 
        } else {  
            stmt.setDate(5, new Date(dados.getServicos().getDataIpidf().getTimeInMillis()));  

        }  if (dados.getServicos().getDataFpidf() == null) {  
            stmt.setNull(6, java.sql.Types.DATE);  
        } else {  
            stmt.setDate(6, new Date(dados.getServicos().getDataFpidf().getTimeInMillis()));  
        }  
                      
        stmt.setString(7, "N/A");  
        stmt.execute();  
        stmt.clearParameters();
nel

Pessoal, procurem utilizar as tags code para formatar o código.
Acredito que a solução dada pelo remofourlanetto seja suficiente para sanar os eu problema.

mouzer, o erro indica que algum parâmetro (no caso o 3) não foi setado no PreparedStatement, por isso gera a exceção. É obrigatório que todos os parâmetros esteja setados antes de executar a query. Se não queres enviar um parâmetro nulo para a database ou usar ele na sua query, deves montar a query de acordo com o valores que recebe.

Abraços.

Criado 16 de setembro de 2011
Ultima resposta 4 de mar. de 2012
Respostas 10
Participantes 5