Problema em inserir campo data no SQL Server

6 respostas
D
Pessoal, gostaria de ver se alguém poderia me ajudar com o seguinte problema, tenho um cadastro em JSP no qual tenho 2 campos de inserção de data, os quais quando não são informados pelo usuário estão gravando no banco as datas como:
1900-01-01 00:00:00.000
, sendo que gostaria que quando não fosse informada a data gostaria de que fosse gravado a descrição NULL na mesma. Tentei fazer da seguinte maneira:
String datacontato      = request.getParameter("datacontato"); 

    String datacontato1 = new String("");
    if (datacontato.equalsIgnoreCase("")){
        datacontato1 = "null";
    }
    else{
        datacontato1 = datacontato;
    }
Mas ao tentar inserir o campo datacontato1 na tabela atravé do comando:
SQL2  = "Insert into movcontato(codgrupo, datacontato, meio, texto, aviso, textoaviso, dataaviso, dtinc) values ('"+codgrupo+"', '"+datacontato1+"', '"+meio+"', '"+texto+"', '"+aviso+"', '"+textoaviso+"', '"+dataaviso+"', '"+dataincl+"')";
                Statement stmt2 = conn2.createStatement();
                stmt2.executeUpdate(SQL2);
Me é retornada o seguinte erro:
Não foi possível conectar ao bancoSyntax error converting datetime from character string.
Agradeço se alguém puder me ajudar.

6 Respostas

G
"DouglasCar":
Pessoal, gostaria de ver se alguém poderia me ajudar com o seguinte problema, tenho um cadastro em JSP no qual tenho 2 campos de inserção de data, os quais quando não são informados pelo usuário estão gravando no banco as datas como:
1900-01-01 00:00:00.000
, sendo que gostaria que quando não fosse informada a data gostaria de que fosse gravado a descrição NULL na mesma. Tentei fazer da seguinte maneira:
String datacontato      = request.getParameter("datacontato"); 

    String datacontato1 = new String("");
    if (datacontato.equalsIgnoreCase("")){
        datacontato1 = "null";
    }
    else{
        datacontato1 = datacontato;
    }
Mas ao tentar inserir o campo datacontato1 na tabela atravé do comando:
SQL2  = "Insert into movcontato(codgrupo, datacontato, meio, texto, aviso, textoaviso, dataaviso, dtinc) values ('"+codgrupo+"', '"+datacontato1+"', '"+meio+"', '"+texto+"', '"+aviso+"', '"+textoaviso+"', '"+dataaviso+"', '"+dataincl+"')";
                Statement stmt2 = conn2.createStatement();
                stmt2.executeUpdate(SQL2);
Me é retornada o seguinte erro:
Não foi possível conectar ao bancoSyntax error converting datetime from character string.
Agradeço se alguém puder me ajudar.

WTF...
Qual DB você está usando ?

:wink:

J

Olá,

O melhor jeito para fazer isto é usando prepared statements:

SQL2  = "Insert into movcontato(codgrupo, datacontato, meio, texto, aviso, textoaviso, dataaviso, dtinc) values (?, ?, ?, ?, ?, ?, ?, ?)"; 
                PreparedStatement ps2 = conn2.createPreparedStatement(SQL2); 

ps2.setString(1, codgrupo);

if (datacontato1 != null)
    ps2.setDate(2, datacontato1);
else
    ps2.setNull(2, java.sql.Types.DATE);
ps2.setString(3, meio);
ps2.setString(4, texto);
ps2.setString(5, aviso);
ps2.setString(6, textoaviso);
ps2.setDate(7, dataaviso);
ps2.setDate(8, dataincl);

                ps2.execute();

Espero ter ajudado,
Abraços

R

Manda gravar em algum log q data que ele ta mandando pro banco, bem como a SQL que ele ta gerando…

R

Prepared statements realmente funciona, mas o seu problema ocorreu pq na sua variável SQL2 vc fez o seguinte:

... ('"+codgrupo+"', '"+datacontato1+"', '"+ ...

Vc está concatenando aspas simples antes do null, então vc acaba tentando escrever null em um campo datetime, por isso a msg de erro.

É só concatenar as aspas ou não de acordo com o preenchimento do campo ou não. Fica assim:

String datacontato      = request.getParameter("datacontato"); 

    String datacontato1 = new String(""); 
    if (datacontato.equalsIgnoreCase("")){ 
        datacontato1 = "null"; 
    } 
    else{ 
        datacontato1 = "'" + datacontato + "'"; 
    }

e o trecho seguinte, sem as aspas neste campo:

SQL2  = "Insert into movcontato(codgrupo, datacontato, meio, texto, aviso, textoaviso, dataaviso, dtinc) values ('"+codgrupo+"', "+datacontato1+", '"+meio+"', '"+texto+"', '"+aviso+"', '"+textoaviso+"', '"+dataaviso+"', '"+dataincl+"')"; 
                Statement stmt2 = conn2.createStatement(); 
                stmt2.executeUpdate(SQL2);

Espero ter ajudado.

D

Beleza pessoal, valeu pelas dicas. Utilizei a dica do rtognato e funcionou. Obrigado!

Agora estou tendo um outro probleminha que gostaria de ver se alguém poderia me dar uma dica. O problema é o seguinte, tenho um cadastro simples em JSP e em determinado campo eu seto se vai existir ou não um aviso. Da seguinte maneira:
<td align=left colspan=1>Aviso:</td>
                    <td align=left colspan=1><select name="aviso">
                        <option value="Sim">Sim</option>
                        <option value="Não">Não</option>                                                        
                        </select>
                    </td>                     
                    <td>Data Aviso:</td> 
                    <td><input type="text" name="dataaviso" id="sel3" size="10"><input type="reset" value=" ... "
                    onclick="return showCalendar('sel3', '%Y/%m/%d', '24', true);"></td>
                    
                </tr>                                    
                                               
                <tr>
                    <td>Texto do Aviso:</td>
                    <td><textarea name="textoaviso" cols="30" rows="6"></textarea></td>
                </tr>
                <tr>
                    <td align=left colspan=1></td>
                    <td align=left colspan=1><font size = 2>Obs: máximo 1000 caracteres</td> 
                </tr>
Gostaria de se setado "Sim" me fossem exibidos os campos Data Aviso e Texto Aviso e se setado "Não" os mesmos não fossem exibidos. Agradeço se alguém puder me dar uma dica de como fazer isto.
R

Dá pra resolver com JavaScript:

function somecampo(){
	var teste;
	
	teste = document.form1.aviso.value;
	
	if (teste == "Sim"){
		document.form1.textoaviso.style.visibility = 'visible';
		document.form1.dataaviso.style.visibility = 'visible';
	}
	else {
		document.form1.dataaviso.style.visibility = 'hidden';
		document.form1.textoaviso.style.visibility = 'hidden';
	}
}

Pra esconder o texto que acompanha os campos, o que provavelmente vc também vai querer fazer, coloque o texto dentro de uma tag <div> </div> e faça o seguinte:

Abraço.

Criado 12 de julho de 2005
Ultima resposta 13 de jul. de 2005
Respostas 6
Participantes 5