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.