Boa noite estou tentando desenvolver uma projeto simples de uma livraria porém não estou conseguindo resolver esse erro alguem poderia me ajudar :
segue o código
<%@page import=“java.util.ArrayList”%>
<%@page contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ page import=“DAOs.LivroDAO” %>
<%@ page import=“Beans.Livro” %>
.:: Livro ::.
<%@include file="menu.jsp" %>
Livro
NOVO
| Código |
Nome |
Autor |
<%
ArrayList livro = new LivroDAO().list();
if(livro.isEmpty()) {
out.print("<tr><td colspan='10'>Nenhum registro para exibir.</td></tr>");
}
else {
for (Object obj : livro) {
Livro l = (Livro)obj; %>
<tr>
<td><%= l.getCodigo() %></td>
<td><%= l.getNome() %></td>
<td><%= l.getAutor() %></td>
<td><button class="botao" id="btnEditar" onclick="location.href='LivroForm.jsp?codigo=<%= l.getCodigo() %>'">EDITAR</button></td>
<td><button class="botao" id="btnExcluir" onclick="if(confirm('Deseja realmente excluir o registro?')) { location.href='LivroExcluir?codigo=<%= l.getCodigo() %>'; }">EXCLUIR</button></td>
</tr>
<%
}
}
%>
</table>
</div>
</main>
</body>
o erro que da é esse :
HTTP Status 500 – Internal Server Error h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}
org.apache.jasper.JasperException: An exception occurred processing [/LivroForm.jsp] at line [18] 15: <% 16: int codigo = request.getParameter (“codigo”) == null ? 0 : Integer.parseInt(request.getParameter(“codigo”)); 17: 18: Livro l = (Livro)(new LivroDAO().findById(codigo)); 19: 20: if(l == null) { 21: l = new Livro(); Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:625) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.NullPointerException DAOs.LivroDAO.findById(LivroDAO.java:25) org.apache.jsp.LivroForm_jsp._jspService(LivroForm_jsp.java:149) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note A pilha de erros completa da causa principal está disponível nos logs do servidor.
Está tentando acessar dados de um objeto nulo, conforme a exceção lançada (java.lang.NullPointerException) na linha 25 da classe LivroDAO. Poste essa classe para vermos o que há com ela.
Para mais dados sobre essa exceção, consulte: Docs Oracle - Class NullPointerException.
segue a classe LivroDao:
package DAOs;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import Beans.Livro;
public class LivroDAO extends DAO {
public LivroDAO() {
super();
}
@Override
public Object findById(int id) {
Livro l = null;
String sql = "SELECT * FROM tb_biblioteca WHERE codigo = ?";
PreparedStatement st;
try {
st = this.getConnection().prepareStatement(sql);
st.setInt(1,id);
ResultSet rs = st.executeQuery();
while(rs.next()) {
l = new Livro();
l.setCodigo(rs.getInt("codigo"));
l.setNome(rs.getString("nome"));
l.setAutor(rs.getString("Autor"));
l.setObservacao(rs.getString("observacao"));
}
} catch (SQLException ex) {
Logger.getLogger(LivroDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return l;
}
@Override
public ArrayList<Object> list() {
ArrayList<Object> lista = new ArrayList();
String sql = "SELECT * FROM tb_cliente";
PreparedStatement st;
try {
st = super.getConnection().prepareStatement(sql);
ResultSet rs = st.executeQuery();
while(rs.next()) {
Livro l = new Livro();
l.setCodigo(rs.getInt("codigo"));
l.setNome(rs.getString("nome"));
l.setAutor(rs.getString("Autor"));
l.setObservacao(rs.getString("observacao"));
lista.add(l);
}
} catch (SQLException ex) {
Logger.getLogger(LivroDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return lista;
}
@Override
public boolean save(Object obj) {
boolean success = true;
Livro l = (Livro)obj;
try {
String sql;
if(l.getCodigo() == 0) {
sql = "INSERT INTO tb_livro(nome, autor, observacao) "
+ "VALUES(?,?,?)";
}
else {
sql = "UPDATE tb_livro SET nome=?, autor=?, observacao=? "
+ "WHERE codigo=?";
}
PreparedStatement st = this.getConnection().prepareStatement(sql);
st.setString(1, l.getNome());
st.setString(2, l.getAutor());
st.setString(11, l.getObservacao());
if(l.getCodigo() > 0) {
st.setInt(12, l.getCodigo());
}
st.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(LivroDAO.class.getName()).log(Level.SEVERE, null, ex);
success = false;
}
return success;
}
@Override
public boolean delete(Object obj) {
boolean success = true;
Livro l = (Livro)obj;
try {
String sql = "DELETE FROM tb_cliente WHERE codigo=?";
PreparedStatement st = this.getConnection().prepareStatement(sql);
st.setInt(1, l.getCodigo());
st.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(LivroDAO.class.getName()).log(Level.SEVERE, null, ex);
success = false;
}
return success;
}
}
O problema parece estar aqui (conforme apontado pela exceção)
st.setInt(1,id);
ResultSet rs = st.executeQuery();
Logo, é provavelmente é originada aqui:
st = this.getConnection().prepareStatement(sql);
Testou para ver se a variável st foi ‘carregada’ com o a instrução SQL? Perece que st está valendo null e, null não pode chamar método algum (já que null representada um valor inválido, um endereço de memória livre, não sei ao certo). Nesse caso, seria algo como: “null.executeQuery()” o que não faz sentido, nem sintático e nem semântico.
Imprima o preparedStatement para ver se ele está transformando a String sql em uma instrução SQL. Mais especificamente, coloque antes do ResultSet:
System.out.println("PS: " + st);