Fórum Dificuldade de acessar o banco MySQL #523775
22/06/2015
0
Quando tento acessar o servlet recebo o seguinte erro:
HTTP Status 500 - type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException java.util.Properties$LineReader.readLine(Unknown Source) java.util.Properties.load0(Unknown Source) java.util.Properties.load(Unknown Source) util.Conexao.getConnection(Conexao.java:22) dao.ProfessorDAO.<init>(ProfessorDAO.java:30) controller.ProfessorServlet.processRequest(ProfessorServlet.java:52) controller.ProfessorServlet.doPost(ProfessorServlet.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs. Apache Tomcat/8.0.22
Meu arquivo de conexão é:
package util;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Conexao {
private static Connection connection = null;
public static Connection getConnection() {
if (connection != null)
return connection;
else {
try {
Properties prop = new Properties();
InputStream inputStream = Conexao.class.getClassLoader().getResourceAsStream("db.properties");
prop.load(inputStream);
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return connection;
}
}
}
O tal arquivo db.properties é
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/imwsaogotardo user=imwsaogotardo password=carcleo
Meu arquivo de servlet é
package controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.ProfessorDAO;
import model.Professor;
/**
* Servlet implementation class ProfessorServlet
*/
@WebServlet("/ProfessorServlet")
public class ProfessorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ProfessorServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// TODO Auto-generated method stub
String login = request.getParameter("login");
String senha = request.getParameter("senha");
String nome = request.getParameter("nome");
java.util.Date data = new java.util.Date();
int sala = Integer.parseInt(request.getParameter("sala"));
Professor professor = new Professor(
login,
senha,
nome,
data,
sala
);
ProfessorDAO dao = new ProfessorDAO();
dao.addProfessor(professor);
RequestDispatcher rd = request.getRequestDispatcher("listar.jsp");
rd.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest( request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest( request, response);
}
}
E o arquivo dao é
package dao;
/*
///////////////////////////////////////BUSCANDO O ID DA SALA/////////////////////
PreparedStatement select = connection.prepareStatement( "select id from sala where nome = ?");
select.setString(1, _professor.getNomeSala());
ResultSet rs = select.executeQuery();
int idSala = rs.getInt("id");
//////////////////////////////////////////////////////////////////////////////////
*/
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.GregorianCalendar;
import model.Professor;
import util.Conexao;
public class ProfessorDAO
{
private Connection connection;
public ProfessorDAO()
{
connection = Conexao.getConnection();
}
public void addProfessor(Professor _professor)
{
try {
PreparedStatement insert = connection.prepareStatement("insert into professor(login, senha, nome, dataCadastro, sala) values (?, ?, ?, ?, ? )");
// Parameters start with 1
insert.setString(1, _professor.getLogin());
insert.setString(2, _professor.getSenha());
insert.setString(3, _professor.getNome());
insert.setDate(4, new java.sql.Date(_professor.getDataCadastro().getTime()));
insert.setInt(5, _professor.getSala());
insert.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deleteProfessor(int _professorId)
{
try {
PreparedStatement preparedStatement = connection.prepareStatement("delete from professor where id=?");
// Parameters start with 1
preparedStatement.setInt(1, _professorId);
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateProfessor(Professor _professor)
{
try {
//java.util.Date novaData = new Date();
GregorianCalendar novaData = new GregorianCalendar();
java.sql.Date dataNova = new java.sql.Date(novaData.getTime().getTime());
PreparedStatement preparedStatement = connection.
prepareStatement("update professor set nome=?, login=?, senha=?, dataCadastro=?, sala=?" + "where id=?");
// Parameters start with 1
preparedStatement.setString(1, _professor.getNome());
preparedStatement.setString(2, _professor.getLogin());
preparedStatement.setString(3, _professor.getSenha());
preparedStatement.setDate(4, dataNova);
preparedStatement.setInt(5, _professor.getSala());
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<Professor> getAllProfessores()
{
List<Professor> professor = new ArrayList<Professor>();
try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("select nome, login, senha, dataCadastro, sala from professor");
while (rs.next())
{
Professor professorRS = new Professor(
rs.getString("nome"),
rs.getString("login"),
rs.getString("senha"),
rs.getDate("dataCadastro"),
rs.getInt("sala")
);
professor.add(professorRS);
}
} catch (SQLException e) {
e.printStackTrace();
}
return professor;
}
public Professor getProfessorById(int _professorId)
{
Professor professor;
professor = null;
try {
PreparedStatement preparedStatement = connection.prepareStatement("select nome, login, senha, dataCadastro sala from professor where id=?");
preparedStatement.setInt(1, _professorId);
ResultSet rs = preparedStatement.executeQuery();
if (rs.next())
{
new Professor(
rs.getString("nome"),
rs.getString("login"),
rs.getString("senha"),
rs.getDate("dataCadastro"),
rs.getInt("sala")
);
}
} catch (SQLException e) {
e.printStackTrace();
}
return professor;
}
}
O jsp é
<div id="indexMeio">
<form action="ProfessorServlet" method="post">
<input type="text" name="login" id="login"><br />
<input type="text" name="senha" id="senha"><br />
<input type="text" name="nome" id="nome"><br />
<input type="text" name="sala" id="sala"><br />
<input type="submit" value="Envia">
</form><br />
</div>
Onde esta o erro?
Obs.: tenho no diretorio imwsaogotardo\WebContent\WEB-INF\lib o .jar mysql-connector-java-5.1.35-bin.jar
Carlos Rocha
Curtir tópico
+ 0Posts
23/06/2015
Carlos Rocha
O projeto se chama imwsaogotardo e o diretório da classe é
imwsaogotardo.src.util
Nesse diretório tenho só esses 2 arquivos que são Conexao.java e o arquivo db.properties
Será que o problema não é o endereço de do arquivo db.properties?
Quando mudo o endereço de apenas db.properties para o diretório sem o src como abaixo
...
InputStream inputStream = Conexao.class.getClassLoader().getResourceAsStream("util/db.properties");
...
O erro muda para:
HTTP Status 500 - typeException report message descriptionThe server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException dao.ProfessorDAO.addProfessor(ProfessorDAO.java:36) controller.ProfessorServlet.processRequest(ProfessorServlet.java:53) controller.ProfessorServlet.doPost(ProfessorServlet.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) noteThe full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs. Apache Tomcat/8.0.22
Gostei + 0
23/06/2015
Carlos Rocha
package uitil;
import java.sql.*;
public class Conexao
{
static String status="";
public static Connection getConnection()
{
Connection conn=null;
try
{
Class.forNmame("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/imwsaogotardo?user=imwsaogotardo&password=carcleo";
conn = DriverManager.getConnection(url);
status = "Connection opened";
}
catch (SQLException e)
{
status = e.getMessage();
}
catch (ClassNotFoundException e)
{
status = e.getMessage();
}
catch (Exception e)
{
status = e.getMessage();
}
return conn;
}
}
Mas dá erro na linha 36 da classe FuncionariosDAO
public void addProfessor(Professor _professor)
{
try {
//linha 36 é a de baixo
PreparedStatement insert = connection.prepareStatement("insert into professor(login, senha, nome, dataCadastro, sala) values (?, ?, ?, ?, ? )");
insert.setString(1, _professor.getLogin());
insert.setString(2, _professor.getSenha());
insert.setString(3, _professor.getNome());
insert.setDate(4, new java.sql.Date(_professor.getDataCadastro().getTime()));
insert.setInt(5, _professor.getSala());
insert.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
do arquivo
Gostei + 0
23/06/2015
Carlos Rocha
Quando posto uma validação de que a conexão foi bem feita ou não dá que não.
Será que não estou colocando algum CLASS_PATH ou coisa assim?
........
public class ProfessorDAO
{
private Connection connection;
public ProfessorDAO()
{
connection = Conexao.getConnection();
if (connection==null)
{ System.out.println("Fora do Ar");}
else { System.out.println("No Ar");}
}
......
Inclui no projeto o mysql-connector-java-5.1.35-bin.jar
inclui esse conector na CLASS_PATH
coloquei esse connector na pasta workspace\imwsaogotardo\WebContent\WEB-INF\lib.
Nada faz essa conexão funcionar!
Gostei + 0
23/06/2015
Carlos Rocha
Meu problema era o connector
mysql-connector-java-5.1.35-bin.jar
Que não estava funcionando.
Troquei por
com.mysql.jdbc_5.1.5.jar
e funcionou!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)