Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Falha ao conectar o MySQL

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem esse arquivo db.properties? Pelo que vejo, este arquivo contém as propriedade para conexão a base de dados.

 

Neste inicio de aprendizado colocaria as propriedade de conexão "hard code" mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

"Neste inicio de aprendizado colocaria as propriedade de conexão "hard code" mesmo."

 

Como seria isso Prog?

 

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 para

 

...
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E qual erro é? Se você não postar o stacktrace vai ser difícil adivinhar o que se passa.

 

Não está faltando especificar a porta na url de conexão?

String user = "foo",
pass = "foo123",
url = "jdbc:mysql://localhost:3306/apps";

Connection conn = DriverManager.getConnection(url, user, pass);

Compartilhar este post


Link para o post
Compartilhar em outros sites
O amigão. Você seguiu o post desde o começo?


Já postei umas 3 vezes o erro as vou colocar de novo.


O projeto se chama imwsaogotardo e o diretório da classe é


imwsaogotardo.src.util.Conexao.java


Nesse diretório tenho só esses 2 arquivos que são Conexao.java e o arquivo db.properties

A classe de conexão é essa:


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("util/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 arquivo db.properties


driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/imwsaogotardo
user=imwsaogotardo
password=carcleo

E o erro é esse:


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
dao.ProfessorDAO.addProfessor(ProfessorDAO.java:39)
controller.ProfessorServlet.processRequest(ProfessorServlet.java:54)
controller.ProfessorServlet.doPost(ProfessorServlet.java:68)
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

Coloquei no momento de chamar a classe conexão um validador


...
private Connection connection;

public ProfessorDAO()
{
connection = Conexao.getConnection();
if (connection==null)
{ System.out.println("Fora do Ar");}
else { System.out.println("No Ar");}
}
...

Mas só retorna que esta "Fora do AR"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Óras, foi você quem abriu o tópico com um código (lendo do arquivo de propriedades) e depois postou um outro código (com as propriedades de conexão dentro da classe, post #4), isso não é acompanhar? Eu me referi ao segundo, pedi o stacktrace dele... mas enfim.

 

Antes de deixar de acompanhar:

// Class.forName...
Class.forNmame("com.mysql.jdbc.Driver").newInstance();

Compartilhar este post


Link para o post
Compartilhar em outros sites
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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.