Gravando Null em um campo Date

10 respostas
viniciusgundim

Sei que aqui não é lugar ideal para fazer essa pergunta mais lá vai…

Como faço para gravar um null em um campo date, pois tenho um formulario que o usuário vai entrar com dados, e tem campos data que não é obrigatorio preencher, quando tento dar um insert sem dados nos campos data, aparece o seguinte erro:

ERROR: invalid input syntax for type date: "null"

Estou usando o postgre como banco…

Desde já agradeço…

10 Respostas

Thiago_Siqueira

Não sei se entendi direito, mas na criação da tabela no banco, o campo da Data pode ser nulo?

renamed

Os SGBDs que usam permitem que coloque null como date, desde que o campo seja nullable.
Se não permitir que coloque nulo, ai é regra de negócio e você tem que seguir.
Mas, se for um projeto pessoal, eu uso DateTime.MinValue no C#, não sei como obter o menor valor possível da data no Java. Mas mesmo assim, só para projetos pessoais, não quebre regra de negócio a toa.

viniciusgundim

Thiago Siqueira, esqueci de colocar esse detalhe, no campo data do banco está para aceitar valores null, isso acontece só pq esta como date, vi algo sobre .AsString := null; mais não intedi direito como se usa…

Aguardo respostas

viniciusgundim

Até onde sei não consigo usar scripts em programação para desktop…

Mais alguma ideia???

viniciusgundim

Estava olhando um outra forma de da um insert só usando values (?,?,?,?), que pode dar certo!!!

Alguma ideia

Até…

Hebert_Coelho

viniciusgundim:
Thiago Siqueira, esqueci de colocar esse detalhe, no campo data do banco está para aceitar valores null, isso acontece só pq esta como date, vi algo sobre .AsString := null; mais não intedi direito como se usa…

Aguardo respostas

Descula pergunta mas… Já tentou “data = null;” e depois salvar?

ViniGodoy

1. Verifique se sua coluna do banco está mesmo aceitando valores nulos;
2. Use PreparedStatement e não Statement (o esqueminha com VALUES (?, ?, ?)). Você JAMAIS deve concatenar SQLs no braço usando o sinal de +.
3. Se ainda não der certo, poste seu código aqui. E não esqueça de coloca-lo envolta da tag [code] e [/code]

viniciusgundim

Chará, nunca usei o preparedstatement, poderia me dar uma dica, vou mandar minha classe conexão, e de uma olhada:

package cga;

import java.sql.*;
import javax.swing.*;
import java.sql.DriverManager;
public class conexao
{


 final private String driver = "org.postgresql.Driver";
 final private String url = "jdbc:postgresql://10.1.1.1:5432/cga";



 final private String usuario = "postgres";
  final private String senha = "senha";
 private Connection conexao;

  public Statement statement;
  public ResultSet resultset;

  public boolean conecta()
  {
  boolean result = true;

  try
  {

  Class.forName(driver);
  conexao = DriverManager.getConnection(url, usuario, senha);

conexao = DriverManager.getConnection(url, usuario, senha);
  System.out.println("CONECTOU");

  }

  catch(ClassNotFoundException Driver)
  {

  JOptionPane.showMessageDialog(null,"DRIVER NÃO LOCALIZADO: "+Driver);
  result = false;

  }

  catch(SQLException Fonte)
  {


  JOptionPane.showMessageDialog(null,"ERRO NA CONEXÃO COM A FONTE DE DADOS "+Fonte);
  result = false;


  }

  return result;

  }

  public void desconecta()
  {


      boolean result = true;

      try
      {

      conexao.close();

      System.out.println("BANCO DE DADOS ENCERRADO");


      }

      catch(SQLException erroSQL)
      {


      JOptionPane.showMessageDialog(null,"NÃO FOI POSSIVEL FECHAR BANCO DE DADOS"
              +erroSQL.getMessage());

      result = false;



      }

   }

        public void executeSQL(String sql)
        {

        try
        {

        statement = conexao.createStatement
        (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
        resultset = statement.executeQuery(sql);
        


        }

        catch(SQLException sqlex)
        {

        /*JOptionPane.showMessageDialog(null,"Nao foi possivel "+"" +
                "executar o comando sql,"+ sqlex+", o sql passado foi"+sql);

        */
        JOptionPane.showMessageDialog(null,"Não foi possível localizar dados.");


        }



        }











}

e como eu iria usar o insert?

Obrigado pela atenção.

P

eu faço assim:

private static final String SQL_SIMCARD_INSERE_PROCESSAMENTO = "INSERT INTO Processamento (CodigoFonteDados, DataProcessamento, QtdeRegistros, MatriculaCadastro, NomeArquivoEntrada)" // ,
			+ "VALUES((?::integer), ?, (?::integer), (?::varchar), (?::varchar))";
public boolean insereProcessamento(int fonte, int qtdeReg, String login,
			String nomeArq, Calendar horaAtual) {
		boolean insere = false;
		Connection conn = null;
		PreparedStatement pr = null;

		try {

			conn = ConnectionManager.obterConexao();
			pr = conn.prepareStatement(SQL_SIMCARD_INSERE_PROCESSAMENTO);
			pr.setInt(1, fonte);
			pr.setTimestamp(2,
					new java.sql.Timestamp(horaAtual.getTimeInMillis()));
			pr.setInt(3, qtdeReg);
			pr.setString(4, login);
			pr.setString(5, nomeArq);
			pr.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			ConnectionManager.fecharConexao(conn, null, pr);
		}

		return insere;
	}

os dados eu envio de outra classe.

jeffersonm

vinicius, vc já tentou gravar alguns dados na mão via script?

lembro que no mysql se eu nao me engano temos q usar ‘null’.

testa aí!

Criado 23 de julho de 2010
Ultima resposta 23 de jul. de 2010
Respostas 10
Participantes 7