[dúvida] Inserir dados com campos nulos

4 respostas
D

Olá a todos.

Estou com problemas para inserir campos nulos.

Se eu deixar um campo vazio e clicar em cadastrar, mostra a excessão:

java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES('c', 'ad', 'Masc', 'fasdf', 6563, 65436, [color=red]''[/color], '6', '643'' at line 1

O parenteses de cor vermelha é onde deveria ter setado o campo nulo.

Como inserir se o campo dos tipos int e string, se eles não foram preenchidos?

Caso alguém precise ver o código, está aqui:

<% 
String sNome = request.getParameter("nome");
String sSobrenome = request.getParameter("sobrenome");
String sSexo = request.getParameter("sexo");
String sEndereco = request.getParameter("endereco");

int sTelefone;
try {
    sTelefone = Integer.parseInt(request.getParameter("telefone"));
    } catch (NumberFormatException nfex) { 
      out.println("Tipo de dados inválido para telefone: " + nfex.toString());
       return;
    }

int sCPF ;
try {
    sCPF = Integer.parseInt(request.getParameter("CPF"));
    } catch (NumberFormatException nfex) {
      out.println("Tipo de dados inválido para CPF: " + nfex.toString());
       return;
    }

String sCNPJ = request.getParameter("CNPJ");

String sLogin = request.getParameter("login");
String sSenha = request.getParameter("senha");
%>

<%
Connection con = null;
 Statement stmt = null;
  
  try {
      Class.forName("org.gjt.mm.mysql.Driver");
      
      String url="jdbc:mysql://localhost:3306/rest_web";
      String user="root";
      String pass="2017";
      
     con = DriverManager.getConnection(url, user, pass);
     stmt = con.createStatement();
      
      stmt.executeUpdate("INSERT INTO administrador (nome, sobrenome, sexo, "+
              "endereco, telefone, cpf, cnpj, login, senha VALUES('" +sNome+ "', '" +
                 sSobrenome+"', '" +sSexo+ "', '" +sEndereco+ "', " +sTelefone+ ", " +
                 sCPF+ ", '" +sCNPJ+ "', '" +sLogin+ "', '" +sSenha+ "'");
       
      %>
<script language="javascript">alert("Cliente cadastrado com sucesso!")</script>
<%   
           response.sendRedirect("cadastro_clientes.jsp");
                   
              } catch (ClassNotFoundException cnfex) {
                  out.println("Driver não encontrado<br>Erro: " +cnfex.toString());
                  } catch (SQLException sqlex) {
                      out.println("Erro ao cadastrar cliente:<br>" +sqlex.toString());
                      }
 %>

Obrigado.

4 Respostas

wbdsjunior

tente:

String sCNPJ = request.getParameter("CNPJ") == null : "null" ? request.getParameter("CNPJ");

ou

" ...," + (sCNPJ == null : "null" ? sCNPJ) + ", "
Pablo_Eteg

Mas retire as aspas do insert e as coloque na variavel,

1. String sCNPJ = request.getParameter("CNPJ") == null : "null" ? ("'" + request.getParameter("CNPJ") +"'");
cdorner

Use PreparedStatement

e faça o binding entre os valores dos valores como a seguir

stmt.setString(indice, valor);

D

cdorner:
Use PreparedStatement

e faça o binding entre os valores dos valores como a seguir

stmt.setString(indice, valor);

Não entendi o que disse.
Depois lerei a respeito sobre binding.

@ Pablo_Eteg
@ wbdsjunior

Não entendi direito como usar o exemplo que vocês passaram.

O que estou procurando é uma maneira de setar os campos tanto como inteiros, float, etc, quando string.
Daí se algum não for obrigatório(independente de ser inteiro ou string) eu gostaria de adicionar ao banco com sucesso.

Obrigado pela ajuda.

Criado 26 de setembro de 2008
Ultima resposta 1 de out. de 2008
Respostas 4
Participantes 4