Dúvida em inserir campo data no SQL Server

5 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.

5 Respostas

R

Primeiro, é aconselhavel nesse caso vc usar o preparedstatement, na qual vc verificará se existe data ou não para gravar:

if(datacontato.equalsIgnoreCase(""))
   stmt.setNull(1,0);
else
    stmt.setString(1,datacontato);

mas se o caso tem que ser através da string sql preparada, vc deve fazer um convert na data

'insert into tabela values (convert(smalldatetime,' + datacontato + ' )...)'

belê??

J

Tenta fazer o seguinte:
Se for “” ou null não grave nada. Coloque apenas no sql esse campo como ALLOW NULL.

R

Olá,

qdo for usar o preparedstatment, e o campo for nulo, use:

Types.NULL da classe java.sql.Types

Até!

D
Beleza pessoal, valeu pelas dicas. Fiz da seguinte maneira e funcionou.
String datacontato1 = new String(""); 
    if (datacontato.equalsIgnoreCase("")){ 
        datacontato1 = "null"; 
    } 
    else{ 
        datacontato1 = "'" + datacontato + "'"; 
    }
SQL2  = "Insert into movcontato(codgrupo, datacontato, meio, texto, aviso, textoaviso, dataaviso, dtinc)
values ('"+codgrupo+"', "+datacontato1+", '"
+meio+"', '"+texto+"', '"+aviso+"', "+textoaviso1+", '"+dataaviso1+"', '"+dataincl+"')"; 
                Statement stmt2 = conn2.createStatement(); 
                stmt2.executeUpdate(SQL2);
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>
                    &lt;td align=left colspan=1&gt;<font size = 2>Obs: máximo 1000 caracteres&lt;/td&gt; 
                &lt;/tr&gt;
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.
A

nao sei se funcionaria, mas tenta assim:

txtDataAviso.setEnable(false);
txtTextoAviso.setEnable(false);

ou

txtDataAviso.setViseble(false);
txtTextoAviso.setViseble(false);

tenta e nos comunique se deu certo !

abs.

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