Valores nulls

14 respostas
fjucks
package modelo.persistencia;

import java.sql.*;
import java.util.*;
import modelo.Cliente;

public class ClienteDAO extends DAO {

    public void cadastrar(Cliente c) throws Exception {
        OpenDatabase();
        String SQL = "insert into tbl_cliente values(null,?,?,?,?)";
        pstmt = (com.mysql.jdbc.PreparedStatement) con.prepareStatement(SQL);
        pstmt.setString(1, c.getNome());
        pstmt.setString(2, c.getTelefone());
        pstmt.setString(3, c.getEmail());
        pstmt.setString(4, c.getSite());
        pstmt.execute();
        CloseDatabase();
    }

    public void delete(Cliente c) throws Exception {
        String sql = "delete tbl_cliente where cod_cliente=?;";
        con.prepareStatement(sql);
        pstmt.setInt(1, c.getCod_cliente());
        pstmt.execute(sql);
    }

    public List<Cliente> listaClientes() throws Exception {
        String sql = "select * from tbl_Cliente";
        rs = pstmt.executeQuery(sql);
        Cliente c = new Cliente();
        List<Cliente> listaClientes = new ArrayList<Cliente>();
        if (rs.next()) {
            c.setCod_cliente(rs.getInt("cod_cliente"));
            c.setNome(rs.getString("nome"));
            c.setTelefone(rs.getString("telefone"));
            c.setEmail(rs.getString("email"));
            c.setSite(rs.getString("site"));
            listaClientes.add(c);
        }
        return listaClientes;
    }

    public void update(Cliente c) throws Exception {
        String sql = "update tbl_cliente set nome=?,set telefone=?,set email=?,set site=? where cod_cliente=?";
        con.prepareStatement(sql);
        pstmt.executeUpdate();

    }
}
<%@page import="modelo.Cliente,modelo.persistencia.ClienteDAO" %>


<%
            try {
                String action = request.getParameter("action");
                if (action.equalsIgnoreCase("cadastrar")) {
                    Cliente c = new Cliente();
                    c.setNome(request.getParameter("nome"));
                    c.setTelefone(request.getParameter("telefone"));
                    c.setEmail(request.getParameter("email"));
                    c.setSite(request.getParameter("site"));
                    ClienteDAO cd = new ClienteDAO();
                    try {
                        cd.cadastrar(c);
                        out.println("Cadastrado com sucesso");
                    } catch (Exception e) {
                        out.print("Erro: " + e.getMessage());
                    }
                }

            } catch (NullPointerException nexp) {
                out.println("voce nao deveria estar vendo esse aviso");
            }

%>

e aqui esta o formulario que manda os dados para o objetoo

<form action="controle.jsp?action=cadastrar" method="post">
                    <label for="nome">Nome:</label><br/>
                    <input type="text" name="nome" value="" /><br/>
                    <label for="telefone">Telefone:</label><br/>
                    <input type="text" name="telefone" value="" /><br/>
                    <label for="email">Email:</label><br/>
                    <input type="text" name="email" value="" /><br/>
                    <label for="site">Site:</label><br/>
                    <input type="text" name="site" value="" /><br/>
                    <input type="submit" value="Cadastrar Cliente" />


                </form>

o ERRO aparece di que a coluna nome nao aceita valores null, e pelo que eu depurei do codigo o form nao esta mandando para o objeto, porem nao conseui detectar o erro, alguem sabe que erro pode estar acontecendooo?? pleasee!!!

14 Respostas

ViniGodoy

Que tal postar a mensagem de erro?

Outra coisa, retire aqui try…catch com a nullpointerexception ali. Ele não só não está ajudando, como vai te atrapalhar, caso a situação venha a ocorrer. Jamais coloque exceptions que comem o StackTrace.

wbdsjunior

qual a estrutura da tabela tbl_cliente?

que banco de dados você está usando?

String SQL = "insert into tbl_cliente values(null,?,?,?,?)";

por quê null no insert?

marcos1EM

Não entendi direito, o seu problema é mandar os dados para a página controle.jsp ou gravar null? Se é a primeira opção poste o cógido da página controle.jsp também, ou se estiver tentando gravar null, você nunca consiguirá se o banco estiver restringindo.

fjucks

O erro que da eh esse Erro: Column 'nome' cannot be null.. estou usando o mysql e aqui esta minha classe de controle.jsp

<%@page import="modelo.Cliente,modelo.persistencia.ClienteDAO" %>


<%
            try {
                String action = request.getParameter("action");
                if (action.equalsIgnoreCase("cadastrar")) {
                    Cliente c = new Cliente();
                    c.setNome(request.getParameter("nome"));
                    c.setTelefone(request.getParameter("telefone"));
                    c.setEmail(request.getParameter("email"));
                    c.setSite(request.getParameter("site"));
                    ClienteDAO cd = new ClienteDAO();
                    try {
                        cd.cadastrar(c);
                        out.println("Cadastrado com sucesso");
                    } catch (Exception e) {
                        out.print("Erro: " + e.getMessage());
                    }
                }

            } catch (NullPointerException nexp) {
                out.println("voce nao deveria estar vendo esse aviso");
            }

%>

ele nao manda os dados para a tabelaa

fjucks

OpenDatabase(); String SQL = "insert into tbl_cliente values(null,?,?,?,?)"; pstmt = (com.mysql.jdbc.PreparedStatement) con.prepareStatement(SQL); pstmt.setString(1, c.getNome()); pstmt.setString(2, c.getTelefone()); pstmt.setString(3, c.getEmail()); pstmt.setString(4, c.getSite()); pstmt.execute(); CloseDatabase();

quando eu depuro o codigo ele nao passa da linha pstmt.execute ja nao sei mais o que pode ser naoo

P

Prepared statement só aceita null assim

"insert into tbl_cliente values(?,?,?,?,?)";
...
pstmt.setString(5, null);
fjucks
Puka o jeito que você citou deu certo, porém qual a diferença de usar
OpenDatabase();
        String SQL = "insert into tbl_cliente values(null,?,?,?,?)";
        pstmt =  con.prepareStatement(SQL);
        pstmt.setString(1, c.getNome());
        pstmt.setString(2, c.getTelefone());
        pstmt.setString(3, c.getEmail());
        pstmt.setString(4, c.getSite());
    //    pstmt.setString(5, null);
        pstmt.execute();
        CloseDatabase();
esse jeito deu errado
OpenDatabase();
        String SQL = "insert into tbl_cliente values(?,?,?,?,?)";
        pstmt =  con.prepareStatement(SQL);
       
        pstmt.setString(1, c.getNome());
        pstmt.setString(2, c.getTelefone());
        pstmt.setString(3, c.getEmail());
        pstmt.setString(4, c.getSite());
        pstmt.setString(5, null);
        pstmt.execute();
        CloseDatabase();
esse jeito deu certo

pq pstmt.setString(5, null); se o id esta na coluna 0? eno exemplo que eu vi eles usavam null em vez de ? na string sql

marcos1EM
fjucks:
Puka o jeito que você citou deu certo, porém qual a diferença de usar
OpenDatabase();
        String SQL = "insert into tbl_cliente values(null,?,?,?,?)";
        pstmt =  con.prepareStatement(SQL);
        pstmt.setString(1, c.getNome());
        pstmt.setString(2, c.getTelefone());
        pstmt.setString(3, c.getEmail());
        pstmt.setString(4, c.getSite());
    //    pstmt.setString(5, null);
        pstmt.execute();
        CloseDatabase();
esse jeito deu errado
OpenDatabase();
        String SQL = "insert into tbl_cliente values(?,?,?,?,?)";
        pstmt =  con.prepareStatement(SQL);
       
        pstmt.setString(1, c.getNome());
        pstmt.setString(2, c.getTelefone());
        pstmt.setString(3, c.getEmail());
        pstmt.setString(4, c.getSite());
        pstmt.setString(5, null);
        pstmt.execute();
        CloseDatabase();
esse jeito deu certo

pq pstmt.setString(5, null); se o id esta na coluna 0? eno exemplo que eu vi eles usavam null em vez de ? na string sql

Oberserve que na segunda forma o campo nome não está mais recebendo null, por isso não dá erro.

Acredito que se você colocar pstmt.setString(1, null);, dará erro porque o campo nome continua recebendo vazio, assim como você fazia antes
A sua intenção era setar null em qual campo? No id? Pelo jeito o id da sua tabela é a coluna 5, certo? Lembrando que no PreparedStatement o indice começa de 1. Então agora você está sentando null é no id e como ele é autoincremento não dá erro. Imagino que seja isso.

fjucks

Galera meu programa continua dando errado, vou postar todos os codigo, ja nao sei mais qual eh o problemas... HELP!

package modelo.persistencia;


import java.util.*;
import modelo.Cliente;

public class ClienteDAO extends DAO {

    public void cadastrar(Cliente c) throws Exception {
       OpenDatabase();
       String SQL = "insert into tbl_cliente values(?,?,?,?,?)";
       pstmt =  con.prepareStatement(SQL);
       pstmt.setString(1, c.getNome());
       pstmt.setString(2, c.getTelefone());
       pstmt.setString(3, c.getEmail());
       pstmt.setString(4, c.getSite());
       pstmt.setString(5, null);
       pstmt.execute();
       CloseDatabase();
    }

    public void delete(Cliente c) throws Exception {
        String sql = "delete tbl_cliente where cod_cliente=?;";
        con.prepareStatement(sql);
        pstmt.setInt(1, c.getCod_cliente());
        pstmt.execute(sql);
    }

    public List<Cliente> listaClientes() throws Exception {
        String sql = "select * from tbl_Cliente";
        rs = pstmt.executeQuery(sql);
        Cliente c = new Cliente();
        List<Cliente> listaClientes = new ArrayList<Cliente>();
        if (rs.next()) {
            c.setCod_cliente(rs.getInt("cod_cliente"));
            c.setNome(rs.getString("nome"));
            c.setTelefone(rs.getString("telefone"));
            c.setEmail(rs.getString("email"));
            c.setSite(rs.getString("site"));
            listaClientes.add(c);
        }
        return listaClientes;
    }

    public void update(Cliente c) throws Exception {
        String sql = "update tbl_cliente set nome=?,set telefone=?,set email=?,set site=? where cod_cliente=?";
        con.prepareStatement(sql);
        pstmt.executeUpdate();

    }
}
<%@page import="modelo.Cliente,modelo.persistencia.ClienteDAO" %>


<%
            try {
                String action = request.getParameter("action");
                if (action.equalsIgnoreCase("cadastrar")) {
                    Cliente c = new Cliente();
                    c.setNome("nome");
                    c.setTelefone(request.getParameter("telefone"));
                    c.setEmail(request.getParameter("email"));
                    c.setSite(request.getParameter("site"));
                    ClienteDAO cd = new ClienteDAO();
                    try {
                        cd.cadastrar(c);
                        out.println("Cadastrado com sucesso");
                    } catch (Exception e) {
                        out.print("Erro: " + e.getMessage());
                    }
                }

            } catch (NullPointerException nexp) {
                out.println("voce nao deveria estar vendo esse aviso");
            }

%>
<form action="controle.jsp?action=cadastrar" method="post">
                    <label for="nome">Nome:</label><br/>
                    <input type="text" name="nome" value="" /><br/>
                    <label for="telefone">Telefone:</label><br/>
                    <input type="text" name="telefone" value="" /><br/>
                    <label for="email">Email:</label><br/>
                    <input type="text" name="email" value="" /><br/>
                    <label for="site">Site:</label><br/>
                    <input type="text" name="site" value="" /><br/>
                    <input type="submit" value="Cadastrar Cliente" />
                </form>
package modelo.persistencia;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 *
 * @author Acer
 */
public class DAO {

    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;

    public void OpenDatabase() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/crud_jsp";
        String user = "root";
        String password="aldo";
      /*  String url = "jdbc:postgresql://localhost:5432/info";
        String user = "postgres";
        String password = "postgres";*/
        con =  DriverManager.getConnection(url, user, password);
    }

    public void CloseDatabase() throws Exception {
        if (con != null) {
            con.close();
        }

    }
}

o erro que da eh Erro: Column 'cod_cliente' cannot be null, mas eu estou setando acerto não , conforme o explicado

minha tabela no banco mysql esta assim, nessa sequenciaa

*cod_cliente (chave primaria)
*nome
*telefone
*email
*site

fjucks

ALGUÉM??

drigo.angelo

Como assim continua dando errado?

O quê está dando errado?

Posta a mensagem de erro!

fjucks

aparece o seguinte erro Erro: Incorrect integer value: ‘nome’ for column ‘cod_cliente’ at row 1

fjucks
eu fiz o seguinte
public void cadastrar(Cliente c) throws Exception {
        OpenDatabase();
        String SQL = "insert into tbl_cliente values(?,?,?,?,?)";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, null);
        pstmt.setString(2, c.getNome());
        pstmt.setString(3, c.getTelefone());
        pstmt.setString(4, c.getEmail());
        pstmt.setString(5, c.getSite());

        pstmt.execute();
        CloseDatabase();
    }

na minha tabela o cod_cliente eh o chave primaria, porem continua dando o seguinte erroo: Erro: Column 'cod_cliente' cannot be null

fjucks

resolvi ja, coloquei no autoincrement no mysql front, no netbeans nao sei como faz p colocar, so sei q deu certox xPP mas valeu por ter lido o postt

Criado 27 de janeiro de 2011
Ultima resposta 28 de jan. de 2011
Respostas 14
Participantes 6