Não inserindo dados no mysql, pq?

13 respostas
Y

Gente

estou estudando jsp, servlets, e como prática estou tentando inserir dados no mysql, no entanto nao estou conseguindo, vou postar as classes:

package model;

public class Cadastro {

    private int codigo;
    private String nome;
    private String email;
    private String endereco;
    private String cpf;

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
}
package dao;


import java.util.List;
import model.Cadastro;


public interface CadastroDAO {
    
    public  void inserirCadastro(Cadastro cadastro);
    public List<Cadastro> listarTodos();
    
    
}
package dao;

import java.sql.Connection;

public class FabricaDeConexao {

    private java.sql.Connection con;

    public Connection fazConexao() {

        try {


            Class.forName("org.gjt.mm.mysql.Driver");
            System.out.println("conectando");
            con = java.sql.DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/lab", "root", "123");
            System.out.println("conectado");
        } catch (Exception e) {
            e.printStackTrace();
            throw new java.lang.RuntimeException("erro ao conectar");
        }
        return con;
    }

    public void fecharConexao() {
        try {
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new java.lang.RuntimeException("erro ao fechar conectar");
        }
    }
}
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import model.Cadastro;

public class JDBCCadastroDAO implements CadastroDAO {

    Connection con;

    public JDBCCadastroDAO(Connection con) {
        this.con = con;
    }

    public void inserirCadastro(Cadastro cadastro) {
        String comando = "INSERT INTO agenda (codigo,nome,email,endereco,cpf) values (?,?,?,?,?)";
        PreparedStatement p;
        try {

            p = this.con.prepareStatement(comando);
            p.setInt(1, cadastro.getCodigo());
            p.setString(2, cadastro.getNome());
            p.setString(3, cadastro.getEmail());
            p.setString(4, cadastro.getEndereco());
            p.setString(5, cadastro.getCpf());

            p.execute();

        } catch (SQLException e) {
            e.getMessage();


        }

      }

   }
}
@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
        
        String nome = request.getParameter("nome");
        String email = request.getParameter("email");
        String endereco = request.getParameter("endereco");
        String cpf = request.getParameter("cpf");
        
      
        Cadastro c = new Cadastro();
       
        c.setNome(nome);
        c.setEmail(email);
        c.setEndereco(endereco);
        c.setCpf(cpf);
        
        
        FabricaDeConexao fabrica = new FabricaDeConexao();
        Connection con = fabrica.fazConexao();
        
        JDBCCadastroDAO dao = new JDBCCadastroDAO(con);
        dao.inserirCadastro(c);
        
    }
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <%@page import="model.Cadastro" %>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Clientes</title>
    </head>
    <body>  
        <form method="post" action="InserirCadastro"> 
        nome:<input type=text name=nome size="20"><br>
        endereco:<input type=text name=endereco size="20"><br>
        email:<input type=text name=email size="20"><br>
        cpf:<input type=text name=cpf size="20"><br>
        <input type="submit" value="Tem que funfar" />
    </body>
</html>

Agradeço a ajuda,

13 Respostas

A

Boa tarde,

nessa parte do código:

} catch (SQLException e) {  
      e.getMessage();  
}

adicione e.printStackTrace();

} catch (SQLException e) {  
     e.printStackTrace(); 
     e.getMessage();  
}

e poste o erro aqui.

PS. O atributo código do cadastro, é auto incremento no banco ??? Não achei onde você está setando esse valor ??? sempre vai gravar 0 ??? isso não é a PK dá tabela ??? verifique isso também.

[]'s

heatcold

a transação está sendo commitada?

Y

Erro

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'nome' cannot be null
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	at com.mysql.jdbc.Util.getInstance(Util.java:384)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364)
	at dao.JDBCCadastroDAO.inserirCadastro(JDBCCadastroDAO.java:29)
	at action.InserirCadastro.doPost(InserirCadastro.java:78)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
MySQL


PS. O atributo código do cadastro, é auto incremento no banco ??? Não achei onde você está setando esse valor ??? sempre vai gravar 0 ??? isso não é a PK  tabela ??? verifique isso também. 



DROP TABLE IF EXISTS `lab`.`agenda`;
CREATE TABLE  `lab`.`agenda` (
 
 `codigo` int(10) unsigned NOT NULL auto_increment,
  
 `nome` varchar(45) NOT NULL,
 
 `email` varchar(45) NOT NULL,
 
 `endereco` varchar(45) NOT NULL,
 
 `cpf` varchar(45) NOT NULL,
 
 PRIMARY KEY  (`codigo`)
) ENGINE=InnoDB 
DEFAULT CHARSET=latin1;
A

Então, o nome está chegando null, e a coluna da tabela não aceita valores null.

Outra coisa, como o campo codigo é auto incremento, você não precisa passar, remova o campo do seu comando SQL.

Verifique se o atributo nome está sendo capturado corretamente da request.

[]'s

drsmachado

O stacktrace é bem claro, você está tentando salvar um objeto cujo atributo nome está sendo passado sem valor (nulo).

Y

ok, tirei o campo codigo do SQL. Mas, vc poderia postar codigo para um melhor entendimento?

Grato

williamdasflores

Cara, coloca uns breakpoint e roda em modo debugger.

p.setString(2, cadastro.getNome()); //coloca um breakpoint e ve se o nome na chegando aqui.
Y

após depurar a mensagem:

09/01/2012 15:15:51 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/ProjetoLabGEO] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
09/01/2012 15:15:52 org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/ProjetoLabGEO]
09/01/2012 15:15:52 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor ProjetoLabGEO.xml from C:\Users\CPD04\.netbeans\7.0\apache-tomcat-7.0.14.0_base\conf\Catalina\localhost
09/01/2012 15:15:52 org.apache.catalina.util.LifecycleBase start
INFO: The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ProjetoLabGEO]] after start() had already been called. The second call will be ignored.
conectando
conectado
williamdasflores

Mas o nome está chegando aqui?

p.setString(2, cadastro.getNome());

Caso, vc não saiba como debugar, procure no google como depurar na sua IDE que vc está usando
Se for eclipse http://hotwork.sourceforge.net/hotwork/manual/eclipse/eclipse-user-guide.html#Rodando_em_modo_Debug

Y

tudo bem, irei pesquisar e posto aqui.

alltairr

Meu amigo,

Não sei se isso resolverá seu problema mais seria um conselho. Procure usar aspas na tags do HTML Exemplo:

<body>    
        <form method="post" action="InserirCadastro">   
        nome:<input type=text name=nome size="20"><br>  
        endereco:<input type=text name=endereco size="20"><br>  
        email:<input type=text name=email size="20"><br>  
        cpf:<input type=text name=cpf size="20"><br>  
        <input type="submit" value="Tem que funfar" />  
    </body>

assim:

<body>    
        <form method="post" action="InserirCadastro">   
        nome:<input type="text" name="nome" size="20"><br>  
        endereco:<input type="text" name="endereco" size="20"><br>  
        email:<input type="text" name="email" size="20"><br>  
        cpf:<input type="text" name="cpf" size="20"><br>  
        <input type="submit" value="Tem que funfar" />  
    </body>

Acho que pode ser isso o seu problema pois quando usamos XHTML ele sempre da erro.

Y

Gente,

coloquei as aspas no html da jsp, como aconselhou o amigo alltairr, bom deu certo, agora esta inserindo dados no mysql. Agradeço a todos que responderam ao Post, obrigado de coração.

fiquem com Deus.

alltairr

Show de bola ychv, Não esquece de colocar como [RESOLVIDO]

Criado 9 de janeiro de 2012
Ultima resposta 10 de jan. de 2012
Respostas 13
Participantes 6