Dificuldade de acessar o banco MySQL

Java

22/06/2015

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
Carlos Rocha

Carlos Rocha

Curtidas 0

Respostas

Carlos Rocha

Carlos Rocha

22/06/2015

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
GOSTEI 0
Carlos Rocha

Carlos Rocha

22/06/2015

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

do arquivo
GOSTEI 0
Carlos Rocha

Carlos Rocha

22/06/2015

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!
GOSTEI 0
Carlos Rocha

Carlos Rocha

22/06/2015

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!
GOSTEI 0
POSTAR