Fórum Erro ao inserir registro no banco de ados #399052
12/04/2011
0
import java.sql.*;
public class AgendaDB {
private String nome = blank;
private String endereco = blank;
private String cidade = blank;
private String telefone = blank;
private String result_busca = blank;
private String result_inserir = blank;
public static final String BUSCA_INVALIDA = "failure";
public static final String BUSCA_VALIDA = "success";
public static final String SUCESSO_INSERCAO = "success";
public static final String FALHA_INSERCAO = "failure";
static Connection con = null;
static Statement stm = null;
static ResultSet rs;
static private String blank = "";
public AgendaDB() {
if (con==null) {
try {
Class.forName("org.postgresql.Driver");
con =
DriverManager.getConnection("jdbc:postgresql://localhost:5435/postgres","postgres","eguru");
} catch (SQLException e) {
System.err.println ("Erro: "+e);
con = null;
} catch (ClassNotFoundException e) {
System.out.println("ClassNotFound...");
e.printStackTrace();
}
}
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String inserir() {
String result_inserir = FALHA_INSERCAO;
try {
stm = con.createStatement();
stm.execute("INSERT INTO teste(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
endereco + "','" + cidade + "','"+ telefone + "')");
stm.close();
result_inserir = SUCESSO_INSERCAO;
} catch (SQLException e) {
System.err.println ("Erro: "+e);
result_inserir = FALHA_INSERCAO;
}
return result_inserir;
}
public String buscar() throws SQLException {
String result_busca = BUSCA_INVALIDA;
try {
stm = con.createStatement();
rs = stm.executeQuery("SELECT * FROM teste WHERE nome = '" + nome + "'");
if (rs.next()) {
nome = rs.getString(1);
endereco = rs.getString(2);
cidade = rs.getString(3);
telefone = rs.getString(4);
result_busca = BUSCA_VALIDA;
}
else
result_busca = BUSCA_INVALIDA;
rs.close();
stm.close();
} catch (SQLException e) {
System.err.println ("Erro: "+e);
}
return result_busca;
}
}
essa é minha JSP que chama os parametros de inserção
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<body>
<f:view>
<h:form>
<center><h2> Inserção </h2></center>
<br>
<h3>Entre com os dados abaixo</h3>
<table>
<tr>
<td>Nome:</td>
<td>
<h:inputText value="#{agenda.nome}"/>
</td>
</tr>
<tr>
<td>Endereço:</td>
<td>
<h:inputText value="#{agenda.endereco}"/>
</td>
</tr>
<tr>
<td>Cidade:</td>
<td>
<h:inputText value="#{agenda.cidade}"/>
</td>
</tr>
<tr>
<td>Telefone:</td>
<td>
<h:inputText value="#{agenda.telefone}"/>
</td>
</tr>
</table>
<p>
<h:commandButton value="Inserir" action="#{agenda.inserir}"/>
</p>
</h:form>
<br>
<h:outputLink value="index.jsf">
<f:verbatim>voltar</f:verbatim>
</h:outputLink>
</f:view>
</body>
</html>
e esse é o erro que dá, que eu não sei como resolver.
HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: java.lang.NullPointerException javax.faces.webapp.FacesServlet.service(FacesServlet.java:321) root cause javax.faces.el.EvaluationException: java.lang.NullPointerException javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) javax.faces.component.UICommand.broadcast(UICommand.java:311) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) root cause java.lang.NullPointerException AgendaDB.inserir(AgendaDB.java:61) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.apache.el.parser.AstValue.invoke(AstValue.java:196) org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) javax.faces.component.UICommand.broadcast(UICommand.java:311) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) note The full stack trace of the root cause is available in the JBoss Web/3.0.0-CR1 logs. JBoss Web/3.0.0-CR1
Pjava
Curtir tópico
+ 0Posts
12/04/2011
Davi Costa
AgendaDB.inserir(AgendaDB.java:61)
Vc já debugou para ver o que está chegando nulo, acho q aí que vc deve focar para resolver
seu problema.
Att Davi
Gostei + 0
12/04/2011
Pjava
Gostei + 0
12/04/2011
Davi Costa
no canto esquerdo da classe vc aperta com o botão direito e marca a opção:
Show Line Numbers.
Após aparecerem os números vc dá um duplo clique em cima do número.
Vc vai levantar seu servidor em modo debug, assim que a Thread em execução passar sobre essa linha o eclipse vai te solicitar para vc abrir o modo debug vc aceita e vê o estados de todos os objetos.
Para maiores dicas tem bastante conteúdo na net:
http://www.google.com.br/search?q=debugar+no+eclipse&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a
Att Davi
Gostei + 0
12/04/2011
Pjava
Este programa não pode exibir a página da Web Causas prováveis: Você não está conectado à Internet. O site está encontrando problemas. Talvez haja um erro de digitação no endereço. Você pode tentar: Verifique sua conexão com a Internet. Tente visitar outro site para verificar se você está conectado. Digite o endereço novamente. Voltar para a página anterior. Mais informações
Se não tiver em modo debug, aí vem o erro que já postei.
Gostei + 0
12/04/2011
Davi Costa
É uma classe java que executa a operações, não importa quem chamar ela, quando vc coloca o break-point em alguma linha dela, quando for executada essa linha é para entrar em modo debug.
Reveja os passos se foram feitos todos corretamente e se vc realmente subiu a aplicação em modo debug.
Não é para colocar brek-point em jsp não. Não há necessidade alguma.
Caso ainda esteja aprendendo com o modo debug e queira resolver logo o seu problema, vc pode pegar os objetos e seus respectivos atributos do método que inseri no banco e imprimi no console com System.out.println();
E vc vem quem está nulo.
Pelo método inserir quem pode estar nulo e dando nullpointer pode ser:
stm.
Mas para eu garantir precisaria que você me postasse qual é a linha 61.
Pesquise um pouco mais sobre debug no eclipse, vai te ajudar bastante.
Att Davi
Gostei + 0
12/04/2011
Dyego Carmo
Se sim favor fechar o seu post ;)
Valeu !
Gostei + 0
12/04/2011
Pjava
Gostei + 0
12/04/2011
Robson Teixeira
AgendaDB.inserir(AgendaDB.java:61)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) talvez algum dos seus inputs não está enviando o conteudo digitado para os respetivos atributos pois creio que na hora de concatenar a String para envia ao postgres está com atributo nulo por isso nullPointer. da uma olhada nisso ok?? att robson Passarella
Gostei + 0
13/04/2011
Davi Costa
Se ainda está com dificuldades para debugar, pode partir para akela opção que te falei, pega seus atributos(objetos) e imprime no console, existe a possibilidade dos atributos da sua tela estarem vindo nulos sim, mas isso não produziria um NullPointerException não, eles só ficaram null. Por exemplo:
String s = "jjjkjjdjkldjkljklj"+null+"jjljlj"+null+"jkklj";
System.out.println(s);
Esse trecho de código não daria nullPointerException, bom continuando o que daria problema:
public String inserir() {
String result_inserir = FALHA_INSERCAO;
try {
stm = con.createStatement();
stm.execute("INSERT INTO teste(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
endereco + "','" + cidade + "','"+ telefone + "')");
stm.close();
result_inserir = SUCESSO_INSERCAO;
} catch (SQLException e) {
System.err.println ("Erro: "+e);
result_inserir = FALHA_INSERCAO;
}
return result_inserir;
}
Se con ou stm estiverem nulos, isso sim causaria problema. Então vamos resolver o problema por partes.
Vamos passar esse problema primeiro e depois veremos se os campos da jsp estão nulos.
Na mensagem de erro fala da linha 61 da classe AgendaDB. Que linha seria essa?
Att Davi
Gostei + 0
13/04/2011
Pjava
Gostei + 0
13/04/2011
Davi Costa
Att Davi
Gostei + 0
13/04/2011
Pjava
Gostei + 0
13/04/2011
Davi Costa
Ou vc só fez isso na classe Java?
Ainda tou encucado com isso.
Como vc mudou a porta do postgres?
Pq se está dando conexão negada, pode estar tendo problema na porta.
E nessa app SE vc adicionou de alguma forma o driver do postgres nas libs?
Att Davi
Gostei + 0
13/04/2011
Pjava
Gostei + 0
13/04/2011
Davi Costa
Deu algum erro agora?
Att Davi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)