Duvida sobre recebimento de dados

24 respostas
Isaias_Barbosa

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

24 Respostas

JulioCesarSF

A solução seria uma tabela que relaciona aquelas atividades com aquele aluno/cliente.

Isaias_Barbosa

SIm mas existe essa tabela…O nome da tabela se chama Atividades, ele pega a chave estrangeira do Cliente e do Funcionario(professor)

javaflex

Faltou postar o principal, a parte que tem a query que retorna esses dados.

Isaias_Barbosa

Que principal ?, fala do servlet ?

javaflex

A query, a consulta que faz no banco. Se está usando banco relacional, posta o SQL.

Isaias_Barbosa

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) {
    
    <a href="http://this.id">this.id</a> = 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(<a href="http://this.id">this.id</a>).getHorario();

this.nome = aDAO.carregarPorId(<a href="http://this.id">this.id</a>).getNome();

this.dia = aDAO.carregarPorId(<a href="http://this.id">this.id</a>).getDia();

this.funcionario = aDAO.carregarPorId(<a href="http://this.id">this.id</a>).getFuncionario();

this.cliente = aDAO.carregarPorId(<a href="http://this.id">this.id</a>).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>
javaflex

Você está retornando todas as atividades. Exemplo do que precisa fazer:

select * from atividades where cliente_id = ?

Isaias_Barbosa

Isso ai seria na classe DAO certo ?

javaflex

Pelo padrão que está seguindo sim.

Isaias_Barbosa

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 ?

javaflex

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

Isaias_Barbosa
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…

javaflex

Um problema que vejo é ter faltado setar o parametro cliente_id.

JulioCesarSF

E fechar o ResultSet e PreparedStatement.

Isaias_Barbosa

Eu não já setei ele no final ali ?..

ClienteDAo cDAO = new ClienteDAO();
a.setCliente(cDAO.carregarPorId(rs.getInt(“cliente_id”)));

javaflex

client_id do select das atividades.

Isaias_Barbosa

String sql=“SELECT * FROM atividades (cliente_id) WHERE cliente_id = ?”; Assim ?

Isaias_Barbosa

String sql=“SELECT cliente_id FROM atividades where cliente_id=?”; desse jeito entao ?

javaflex
Isaias_Barbosa

Mesmo com essa explicação dele infelizmente não conseguir resolver ;(

javaflex

Você já setou parâmetro em outras querys, como a de update. Te aconselho parar para estudar antes de fazer algo por conta própria, senão sempre vai ficar perdido até em coisas que você já fez. Procure um livro que tenha um projeto de exemplo e siga com uma direção.

Isaias_Barbosa

Então vai ser assim "SELECT * FROM atividades SET cliente_id WHERE cliente_id=?"
ou Assim “SELECT atividades SET cliente_id WHERE cliente_id=?”

Isaias_Barbosa

Fiz assim pra fazer um teste…
“SELECT id,horario,nome,dia,funcionario_id, cliente_id FROM atividades WHERE cliente_id=1”

ai ele pegou…agora se eu colocar um “?” ai ele fala q n tem valor especifico no parametro 1

Isaias_Barbosa

resolvido ja

Criado 25 de novembro de 2017
Ultima resposta 2 de dez. de 2017
Respostas 24
Participantes 3