Olá, eu estou fazendo um projeto de conclusão do meu curso técnico, resolvi fazer um sistema de academia, até ai tudo certo, tem uma coisa em que eu quis fazer que é o cronograma de atividades do aluno, aonde o Professor cadastra essa atividade referente há, dia, hora e o nome da atividade, mas, quando eu entro no perfil do cliente, e vou em cronograma, ele me da a lista de cronograma feita, ou seja, qualquer cliente que eu logue, vai aparecer as mesmas atividades, sendo que apenas 1 cliente foi cadastrado nela…Gostaria de saber qual a solução para este problema…Estou usando a JSP para receber esses arquivos…
Se quiser o código :
<%@include file=“menu_cliente.jsp” %>
<%@page import=“model.Atividades”%>
<%@page import=“java.util.ArrayList”%>
<%@page import=“model.Cliente”%>
<%
String id = request.getParameter(“id”);
Cliente c = new Cliente();
ArrayList lista = new ArrayList();
Atividades a = new Atividades();
ArrayList listas = new ArrayList();
try {
listas = a.listar();
c.setId(cLogado.getId());
c.carregar();
} catch (Exception e) {
out.print("Erro: " + e);
}
%>
<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
Conexão Saúde
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light bg-faded py-lg-4">
<div class="container">
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav mx-auto">
<li class="nav-item px-lg-4">
<a class="nav-link text-uppercase text-expanded" href="painel_cliente.jsp"><img src="imagens/perfil.png"/> Perfil</a>
</li>
<li class="nav-item px-lg-4">
<a class="nav-link text-uppercase text-expanded" href="diagrama.jsp"><img src="imagens/calendarr.png"/> Conograma</a>
</li>
<li class="nav-item">
<a class="nav-link" href="index.jsp"><img src="imagens/exit.png"/>Sair</a>
</li>
</ul>
</div>
</div>
</nav>
<br>
<form method="post" action="atividades.jsp">
<div class="container">
<table class="table table-striped custab">
<h1>Cronograma</h1>
<thead>
<tr>
<th>Horario</th>
<th>Segunda</th>
<th>Terça</th>
<th>Quarta</th>
<th>Quinta</th>
<th>Sexta</th>
</tr>
</thead>
<tr>
<%
int cont = 0;
for(Atividades an:listas){
if (cont == 0){
%>
<td>
<%=an.getHorario()%>
</td>
<%
}
%>
<td><%=an.getNome()%></td>
<%
}
%>
Page © - 2017 Powered by Isaias
<!-- Bootstrap core JavaScript -->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Zoom when clicked function for Google Map -->
A solução seria uma tabela que relaciona aquelas atividades com aquele aluno/cliente.
SIm mas existe essa tabela…O nome da tabela se chama Atividades, ele pega a chave estrangeira do Cliente e do Funcionario(professor)
Faltou postar o principal, a parte que tem a query que retorna esses dados.
Que principal ?, fala do servlet ?
A query, a consulta que faz no banco. Se está usando banco relacional, posta o SQL.
Bom, vou postar os codigos da tabela Atividade…
A Model…
< package model;
import java.util.ArrayList;
/**
*
-
@author isaias
*/
public class Atividades {
private int id;
private String horario;
private String nome;
private String dia;
private Funcionario funcionario;
private Cliente cliente;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getHorario() {
return horario;
}
public void setHorario(String horario) {
this.horario = horario;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDia() {
return dia;
}
public void setDia(String dia) {
this.dia = dia;
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public void inserir() throws Exception{
AtividadesDAO aDAO = new AtividadesDAO();
aDAO.inserir(this);
}
public void alterar() throws Exception{
AtividadesDAO aDAO = new AtividadesDAO();
aDAO.alterar(this);
}
public void excluir() throws Exception{
AtividadesDAO aDAO = new AtividadesDAO();
aDAO.excluir(this);
}
public ArrayList listar() throws Exception{
AtividadesDAO aDAO = new AtividadesDAO();
return aDAO.listar();
}
public void carregar() throws Exception{
AtividadesDAO aDAO = new AtividadesDAO();
this.horario = aDAO.carregarPorId(this.id).getHorario();
this.nome = aDAO.carregarPorId(this.id).getNome();
this.dia = aDAO.carregarPorId(this.id).getDia();
this.funcionario = aDAO.carregarPorId(this.id).getFuncionario();
this.cliente = aDAO.carregarPorId(this.id).getCliente();
}
}
o DAO dela
package model;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import model.Atividades;
/**
*
- @author isaias
*/
public class AtividadesDAO extends DataBaseDAO{
public void inserir(Atividades a) throws Exception{
String sql=“INSERT INTO atividades (horario, nome, dia, funcionario_id, cliente_id) VALUES(?,?,?,?,?)”;
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1, a.getHorario());
pstm.setString(2, a.getNome());
pstm.setString(3, a.getDia());
pstm.setInt(4, a.getFuncionario().getId());
pstm.setInt(5, a.getCliente().getId());
pstm.execute();
this.desconectar();
}
public void alterar(Atividades a) throws Exception{
String sql=“UPDATE atividades SET horario=?, nome=?, dia=?, funcionario_id=?, cliente_id=? WHERE id=?”;
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1, a.getHorario());
pstm.setString(2, a.getNome());
pstm.setString(3, a.getDia());
pstm.setInt(4, a.getFuncionario().getId());
pstm.setInt(5, a.getCliente().getId());
pstm.setInt(6, a.getId());
pstm.execute();
this.desconectar();
}
public void excluir(Atividades a) throws Exception{
String sql=“DELETE FROM atividades WHERE id=?”;
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setInt(1, a.getId());
pstm.execute();
this.desconectar();
}
public ArrayList listar() throws Exception{
ArrayList lista = new ArrayList();
String sql=“SELECT * FROM atividades”;
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
Atividades a = new Atividades();
a.setId(rs.getInt(“id”));
a.setHorario(rs.getString(“horario”));
a.setNome(rs.getString(“nome”));
a.setDia(rs.getString(“dia”));
FuncionarioDAO uDAO = new FuncionarioDAO();
a.setFuncionario(uDAO.carregarPorId(rs.getInt(“funcionario_id”)));
ClienteDAO cDAO = new ClienteDAO();
a.setCliente(cDAO.carregarPorId(rs.getInt(“cliente_id”)));
lista.add(a);
}
this.desconectar();
return lista;
}
public Atividades carregarPorId(int id) throws Exception{
Atividades a = new Atividades();
String sql=“SELECT * FROM atividades WHERE id=?”;
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
ResultSet rs = pstm.executeQuery();
if (rs.next()) {
a.setId(rs.getInt(“id”));
a.setHorario(rs.getString(“horario”));
a.setNome(rs.getString(“nome”));
a.setDia(rs.getString(“dia”));
FuncionarioDAO uDAO = new FuncionarioDAO();
a.setFuncionario(uDAO.carregarPorId(rs.getInt(“funcionario_id”)));
ClienteDAO cDAO = new ClienteDAO();
a.setCliente(cDAO.carregarPorId(rs.getInt(“cliente_id”)));
}
this.desconectar();
return a;
}
}Texto pré-formatado
>
Você está retornando todas as atividades. Exemplo do que precisa fazer:
select * from atividades where cliente_id = ?
Isso ai seria na classe DAO certo ?
Pelo padrão que está seguindo sim.
Então nesse caso, eu teria que ter 2 listar, pois tem que ter um, pro funcionario, quando ele cadastrar o cliente, e ele ver la a listagem… e outro pro cliente, que seria nesse codigo sql q voce me mandou ai, procede ?
Tem que ter um listar pra cada consulta diferente. Só não faça n selects picotados pra no final exibir 1 consulta pro usuário, quando for assim faça os joins necessários pra ficar numa query só.
public ArrayList<Atividades> listarr() throws Exception{
ArrayList<Atividades> lista = new ArrayList<Atividades>();
String sql="SELECT * FROM atividades WHERE cliente_id = ?";
this.conectar();
PreparedStatement pstm = conn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
Atividades a = new Atividades();
a.setId(rs.getInt("id"));
a.setHorario(rs.getString("horario"));
a.setNome(rs.getString("nome"));
a.setDia(rs.getString("dia"));
ClienteDAO cDAO = new ClienteDAO();
a.setCliente(cDAO.carregarPorId(rs.getInt("cliente_id")));
lista.add(a);
}
this.desconectar();
return lista;
}`
Mais ou menos assim ?, malz pelas perguntas poderem parecer obvias…as vezes está na minha cara as respostas e mesmo assim não vejo…
Um problema que vejo é ter faltado setar o parametro cliente_id.
E fechar o ResultSet e PreparedStatement.
Eu não já setei ele no final ali ?..
ClienteDAo cDAO = new ClienteDAO();
a.setCliente(cDAO.carregarPorId(rs.getInt(“cliente_id”)));
client_id do select das atividades.
String sql=“SELECT * FROM atividades (cliente_id) WHERE cliente_id = ?”; Assim ?
String sql=“SELECT cliente_id FROM atividades where cliente_id=?”; desse jeito entao ?