Jdbc - erro ao tentar inserir na 2º tabela. {Resolvido}

7 respostas
jorgeneto

Olá amigos. Vou tentar ser o mais explicado possível.
Tenho 2 classes de entidades , classe Pessoa e classe Endereco. E 2 classes de persistencia , classe Dao e classe PessoaDao. Vou postar aqui apenas o código da classe PessoaDao:

package persistence;

import entity.Endereco;
import entity.Pessoa;

public class PessoaDao extends Dao{

	public void create(Pessoa p,Endereco e) throws Exception{
		open();
		stmt = con.prepareStatement("insert into pessoa values(null,?,?)");
		stmt.setString(1,p.getNome());
		stmt.setString(2,p.getSexo());
		stmt.execute();
		stmt.close();
		
		stmt = con.prepareStatement("select max(idpessoa) as maior from pessoa");
		stmt.executeQuery();
		rs.next();
		int resp =rs.getInt("maior");
		rs.close();
		stmt.close();
		
		stmt = con.prepareStatement("insert into endereco values(null,?,?,?,?)");
		stmt.setString(1,e.getBairro());
		stmt.setString(2,e.getCidade());
		stmt.setString(3,e.getEstado());
		stmt.setInt(4, resp);
		stmt.execute();
		stmt.close();
		close();
		
	}
}

O problema é que eu não consigo inserir na tabela endereco, insere apenas em pessoa. E o erro que dá é null. Abaixo o código do .jsp que executa a saida.

<%@ page import="entity.*" %>
<%@ page import="persistence.*" %>
<%@ page import="java.*" %>

<%

Pessoa p = new Pessoa(null,
					 request.getParameter("nome"),
					 request.getParameter("sexo")
					 );
					 
					 
Endereco e =  new Endereco(null,
						   request.getParameter("bairro"),
						   request.getParameter("cidade"),
						   request.getParameter("estado")
						   );

PessoaDao pd = new PessoaDao();

try{
	pd.create(p,e);
	out.print("<br><b>Dados Gravados");
}catch(Exception ex){
	out.print("<br><b>Erro "+ ex.getMessage());
}

%>
<a href="index.jsp">Voltar para a página principal</a>

7 Respostas

Scoobydoo

Teria que ver porque e o que ta null…
Mas talvez isso resolva…

view plaincopy to clipboardprint?
package persistence;  
  
import entity.Endereco;  
import entity.Pessoa;  
  
public class PessoaDao extends Dao{  
  
    public void create(Pessoa p,Endereco e) throws Exception{  
        open();  
        stmt = con.prepareStatement("insert into pessoa values(null,?,?)");  
        stmt.setString(1,p.getNome());  
        stmt.setString(2,p.getSexo());  
        stmt.execute();  
        stmt.close();  
          
        open();  
        stmt = con.prepareStatement("select max(idpessoa) as maior from pessoa");  
        stmt.executeQuery();  
        rs.next();  
        int resp =rs.getInt("maior");  
        rs.close();  
        stmt.close();  
          
        open();  
        stmt = con.prepareStatement("insert into endereco values(null,?,?,?,?)");  
        stmt.setString(1,e.getBairro());  
        stmt.setString(2,e.getCidade());  
        stmt.setString(3,e.getEstado());  
        stmt.setInt(4, resp);  
        stmt.execute();  
        stmt.close();  
        close();  
          
    }  
}
arthurgon

Qual banco você está utilizando?
As tabelas estão relacionadas corretamente?
Verifique se a quantidade de campos e a posição de cada um em relação a sua query está correta.
Abs.

jorgeneto

Scoobydoo , obrigado pela atenção porem não resolveu…

arthurgon, o servidor é mysql. Fiz todos os testes na mão e aparentemente no banco está tudo certo. O relacionamento é 1 pra 1, vou postar aqui as ddl’s das duas tabelas:

create table pessoa(
	idpessoa	int	primary key	auto_increment,
	nome		varchar(35),
	sexo 		enum('m','f')
);

create table endereco(
	idendereco 	int primary key	auto_increment,
	bairro		varchar(20),
	cidade		varchar(20),
	estado		varchar(2),
	id_pessoa	int	unique
);

alter table endereco
add constraint fk_pessoa
foreign key (id_pessoa)
references pessoa(idpessoa)
on delete cascade;

Como está no código, eu pego a mensagem de erro e exibo na tela. e literalmente aparece: erro Null.

Já agradeço desde já…

Scoobydoo

Coloca um Try Catch e adiciona um Ex.printStackTrace();
Essa é a mensagem correta do erro .

Provavelmente teu Smtp ou teu RS ou teu CON estão nulos…

jorgeneto

Scoobydoo, não conhecia printStackTrace() procurei algums exemplos de como utliliza-lo na internet. Mas preciso estudar isso pra saber utilizar, fiz alguns testes mas esta
dando erro porque devo não estar utilizando da maneira correta.

Obrigado pela dica Scoobydoo.

abelgomes

veja o valor da variavel “resp” se esta trazendo corretamente e ultiza o try e catch assim:

try{
//AQUI VEM SEU CODIGO DE INSERÇÃO
}catch(Exception e){
     printStackTrace(); 
}

faça essa alteração e posta ai denovo.

jorgeneto

Opa… Achei meu erro!
Quando executo a consulta so maior id, não estava atribuindo o resultado da consulta a variável rs.

Amigos, obrigado pela ajuda…

Criado 23 de março de 2011
Ultima resposta 28 de mar. de 2011
Respostas 7
Participantes 4