Jump to content
carcleo

Falha ao conectar o MySQL

Recommended Posts

carcleo

Olá pessoal, estou tomando uma coça para entender a dinâmica do java(fase inicial) mas acho que para o que estou querendo estou quase lá.

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

Edited by carcleo

Share this post


Link to post
Share on other sites
carcleo

Obs.: O arquivo Conexao.java e o arquivo db.properties estão no mesmo diretório

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

Edited by carcleo

Share this post


Link to post
Share on other sites
carcleo

Tentei criar a conexão do jeito abaixo:

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();
       }
   }

Edited by carcleo

Share this post


Link to post
Share on other sites
carcleo

Acabei de observar o seguinte.

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!

Share this post


Link to post
Share on other sites
siul72

Boas,

Vamos comecar pelo inicio....

A base de dados esta criada?

O utilizador tem permissoes de escrita e leitura a essa base de dados?

O porto 3306 esta habilitado no my.cnf ?

Depois de tudo verificado, passa entao ao Java, na excepcao esta esta linha:

noteThe full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs.

... deves investigar o stack trace nesses logs...

Share this post


Link to post
Share on other sites
carcleo

A base de dados já esta criada e posso altera-la pelo phpmyadmin e, pelo SQLExplorer

O utilizador tem permissoes de escrita e leitura a essa base de dados? Sim, tem. Imclusive dei permissão na pasta!

O porto 3306 esta habilitado no my.cnf ? Sim, essa é a porta padrão do MySQL quando se instala

Quanto a criação do objeto Professor _professor na classe ProfessorDAO, esta perfeito.

Os dados para a inclusão na Sql Query estão chegando bem!

Share this post


Link to post
Share on other sites
carcleo

Resolvido!

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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.