4
respostas

Conexao com banco de dados SQL Server

Boa noite,

Estou tendo problema em conectar ao banco de dados SQL Server. Estou querendo que exiba as informações da tabela na página web. A conexão retorna null com essa mensgem ("No suitable driver found for jdbc:sqlserver). O driver do sql server consta na WEB-INF/lib, e já cliquei sobre o arquivo com botão direito build path e adicionar o arquivo .jar. Mesmo assim na página web apresenta a seguinte mensagem de erro. HTTP Status 500 ? Internal Server Error Type Exception Report

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

java.lang.NullPointerException
    br.com.jdbc.dao.CategoriaDAO.listar(CategoriaDAO.java:26)
    br.com.jdbc.controller.CategoriaController.service(CategoriaController.java:44)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/9.0.37

Alguém sabe o que fazer neste caso?

4 respostas

Oi André, envia o código das classes CategoriaDAO e CategoriaController, por favor.

Boa tarde Otávio,

Segue o código de conexão:

package br.com.jdbc.factory;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

    public Connection recuperarConexao() throws SQLException, ClassNotFoundException  {
        return DriverManager
                .getConnection
                ("jdbc:jtds:sqlserver://DESKTOP-233055M:1433;databaseName=PRODUTOS;user=sa;password=258963");

    }
}

O código de CategoriaDAO:

package br.com.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.jdbc.modelo.Categoria;
import br.com.jdbc.modelo.Produto;

public class CategoriaDAO {

    private Connection connection;

    public CategoriaDAO(Connection connection) {
        this.connection = connection;
    }

    public List<Categoria> listar() {
        try {
            List<Categoria> categorias = new ArrayList<>();
            String sql = "SELECT ID, NOME FROM CATEGORIA";

            try (PreparedStatement pstm = connection.prepareStatement(sql)) {
                pstm.execute();

                try (ResultSet rst = pstm.getResultSet()) {
                    while (rst.next()) {
                        Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));

                        categorias.add(categoria);
                    }
                }
            }
            return categorias;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    public List<Categoria> listarComProduto() {
        try {
            Categoria ultima = null;
            List<Categoria> categorias = new ArrayList<>();

            String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO " + "FROM CATEGORIA C "
                    + "INNER JOIN PRODUTO P ON C.ID = P.CATEGORIA_ID";

            try (PreparedStatement pstm = connection.prepareStatement(sql)) {
                pstm.execute();

                try (ResultSet rst = pstm.getResultSet()) {
                    while (rst.next()) {
                        if (ultima == null || !ultima.getNome().equals(rst.getString(2))) {
                            Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));

                            categorias.add(categoria);
                            ultima = categoria;
                        }
                        Produto produto = new Produto(rst.getInt(3), rst.getString(4), rst.getString(5));
                        ultima.adicionar(produto);
                    }
                }
                return categorias;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

E código CategoriaController:

package br.com.jdbc.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

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 br.com.jdbc.dao.CategoriaDAO;
import br.com.jdbc.factory.ConnectionFactory;
import br.com.jdbc.modelo.Categoria;



@WebServlet("/listaCategoria")
public class CategoriaController extends HttpServlet  {

    private CategoriaDAO categoriaDAO;
    private static final long serialVersionUID = 1L;


    protected void service(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        //PrintWriter out = response.getWriter();

        Connection connection = null;

        try {
            connection = new ConnectionFactory().recuperarConexao();
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        this.categoriaDAO = new CategoriaDAO(connection);
        List<Categoria> listar = categoriaDAO.listar();

        System.out.println(listar);

        request.setAttribute("categorias", listar);

        RequestDispatcher rd = request.getRequestDispatcher("/listaCategoria.jsp");
        rd.forward(request, response);

    }

}

Instalei o jtds.jar para fazer a conexão com banco de dados.

Pelo erro, sua connection está null nessa linha:

try (PreparedStatement pstm = connection.prepareStatement(sql)) {

O que me leva a crer que quando você pegou a connection (código abaixo) deve ter dado alguma exception que foi logada no e.printStackTrace();

try {
            connection = new ConnectionFactory().recuperarConexao();
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

No seu console, antes desse java.lang.NullPointerException, teve alguma outra mensagem de erro? Provavelmente essa outra mensagem é a causa raiz do problema

Boa tarde Otávio,

Ele dá uma mensagem que o driver não foi encontrado. Segue a mensagem de erro, quando entra no catch: java.sql.SQLException: No suitable driver found for jdbc:jtds:sqlserver://SERVIDOR:1433;databaseName=PRODUTOS;user=login;password=senha

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software