PreparedStatement Java

Александр Баташов

всем добрый день. прошу помощи решить такой вопрос. есть код ниже.

package com.mysql;

import com.classes.StudentSubject;
import com.interfaces.DaoStudentSubject;

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

public class MySqlDaoDaoStudentSubject implements DaoStudentSubject {
    //первый вариант запроса
//    public static final String SELECT = " SELECT s.id, s.first_name, s.second_name, c.subject, c.mark " +
//            " FROM " +
//            " student s INNER JOIN " +
//            " subject c ";
//второй вариант запроса
        public static final String SELECT = " SELECT * FROM student_db.student";

    private PreparedStatement pstm=null;
    private PreparedStatement AllPreparedStatement = null;
    private final Connection connection;
    private ResultSet rs = null;

    private void init() throws SQLException {
        if (AllPreparedStatement == null) {
            AllPreparedStatement = connection.prepareStatement(SELECT);
        }
    }

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

    //Прочитать всех студентов
    @Override
    public void getAllStudent() throws SQLException {
        init();
        try (ResultSet rs = AllPreparedStatement.executeQuery(SELECT)) {
            while (rs.next()) {
                System.out.println(rs.getInt("id") + " " + rs.getString("first_name") + " " +
                        "" + rs.getString("second_name"));
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    //Получить все предметы одного студента вместе с их оценками
    @Override
    public void getStudentSubject() throws SQLException {
    init();
    try(ResultSet rs=AllPreparedStatement.executeQuery(SELECT)){
        while (rs.next()){

            System.out.println(rs.getInt("id") + " " + rs.getString("first_name") + " " +
                    "" + rs.getString("second_name"));

        }
    }

    }

с первым вариантом sql запроса , мне выдает одну и туже таблицу 20 раз ! во втором варианте запроса sql выдает два раза одну и туже базу.
кто подскажет , как мне лучше исправить код, сделать какой-то универсальный запрос sql , чтобы можно выбирать как одного студента и все его оценки и предметы(2 разных таблицы) , а во втором методе выбирать всех просто студентов. И вообще по синтаксису кода все ли верно ? у меня еще был вопрос верно ли я использую PreparedStatement, уже голову ломаю неделю и просто в шоке. Спасибо за любую помощь.

1 чел.