1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

"INNER JOIN no JAVA"

Criei uma classe "Aluno" e nela coloquei como um dos atributos, disciplina do tipo "Disciplina" pra que quando eu criar um Aluno, o mesmo ja tenha uma disciplina. O problema é na hora do CRUD:

Estou dando um new Disciplina no resultSet e passando getId, getDisciplina

public List<Aluno> ler(Connection conn) throws SQLException {
        ArrayList<Aluno> listaAluno = new ArrayList<>();
        String sql = "select idAluno, nomeAluno, ativo, nomeDisciplina "
                + "from Aluno "
                + "inner join Disciplina on idDisciplina = idDisciplina, nomeDisciplina = nomeDisciplina";
        try (java.sql.PreparedStatement stmt = conn.prepareStatement(sql);
                ResultSet rs = stmt.executeQuery()) {
            while (rs.next()) {
                listaAluno.add(new Aluno(rs.getInt(1), rs.getString(2), Ativo
                        .valueOf(rs.getString(3)), new Disciplina(rs.getInt(4),
                        rs.getString(5))));

            }

        }
        return listaAluno;

E na hora de criar, estou fazendo dessa maneira:

public static void main(String[] args) throws SQLException {

        String url = "jdbc:mysql://localhost:3306/calendariofatene";
        try (Connection conn = DriverManager.getConnection(url, "root",
                "raziel")) {
            AlunoDAO dao = new AlunoDAO();
            Disciplina disciplina = new Disciplina(1, "Gestao");
            Aluno aluno = new Aluno(5, "Ismael", Ativo.S, new Disciplina(1, "ADS"));

            dao.criar(conn, aluno);

        }

    }

Não sei se a sintaxe do INNER JOIN esta correta mas o erro que esta dando é o seguite:

Exception in thread "main" java.sql.SQLException: No value specified for parameter 4

Grato pela ajuda!

  • no seu método ler() tem uma abiguidade no innenr join. E outra, cadê seu método criar() ? você já debugou? Se sim, o erro está dando em qual método?

    Lincoln Amorim   29 de mai de 2013
  • Mostra ai como estão as tabelas de aluno e disciplina. E outra, você está usando o método criar, mas mostrou o método ler. Onde está dando o erro? E uma dica: Tente desacoplar e especializar mais suas classes.

    felipeaqueiroz   29 de mai de 2013
  • O problema é esse: no meu metodo criar() eu tenho um atributo nomeDisciplina que é do tipo Disciplina que por sua vez pertence a classe Aluno. Como eu faço pra setar o tipo Disciplina no meu metodo criar(). Quanto a questao de desacoplar e especializar... Sou novo em programacao, estou no 2 semestre de Analise. se puder me dar dicas de onde posso encontrar algo relacionado a esses assuntos que vc levantou te agradeço, fiz uma busca rapida aqui no forum e nao encontrei muita coisa relacionada a isso

    Ismael Ximenes   29 de mai de 2013
  • Linconl Amorim, não consigo enxergar em que parte do select esta ambíguo, por favor pode me mostra?

    Ismael Ximenes   29 de mai de 2013
  • Então, Ismael. Se você é novo em programação e ainda não viu sobre isso, não se preocupe, que uma hora você verá. Sobre a ambiguidade, quando você escreve "on idDisciplina = idDisciplina", o idDisciplina está se referindo à qual tabela? Uma dica é você rodar suas consultas SQL no console do seu bando de dados antes. E outra: No seu método main, você instancia uma variável do tipo Disciplina, mas usa outra quando cria o seu Aluno. Percebeu? Quanto mais informações você nos fornecer, melhor.

    felipeaqueiroz   29 de mai de 2013
Mostrar todos os 6 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

3 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags sql ou faça a sua própria pergunta.