Исчерпаны результирующий набор Java sqlexception - PullRequest
0 голосов
/ 11 октября 2018

Я получаю исчерпанный ошибкой набор результатов, даже не зная, что не так с тем, что я делаю, я в основном пытаюсь собрать 3 строки из базы данных в массив из 3 элементов класса с именем "Logement" вмой проект uni, который позже будет использован для заполнения ряда флажков в интерфейсе javafx

package accesBD;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import metier.ConvIntToBool;
import metier.Logement;

public class LogementDAO {
    TypeLogementDAO bd = new TypeLogementDAO();


    public Logement[] findAll() throws SQLException {
        Logement logements[] = null;
        Connection cnx= SConnection.getInstance();
        Logement logement = null;
        try {
            PreparedStatement st= cnx.prepareStatement("select* from logement");
            ResultSet res= st.executeQuery();
            int i =0;
            while (res.next()) {
                logement= new Logement(bd.find(res.getInt(1)), ConvIntToBool.boolToInt(res.getInt(2)) ,ConvIntToBool.boolToInt(res.getInt(3)),ConvIntToBool.boolToInt(res.getInt(4)),ConvIntToBool.boolToInt(res.getInt(5)),ConvIntToBool.boolToInt(res.getInt(6)));
                //System.out.println(res.getRow());
                logements[i]=logement;
                i++;
                }
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return logements;//la collection retournée peut être vide
    }
}

Эти - это 3 строки, которые я пытаюсь получить из базы данных

и это код для метода find

public TypeLogement find(int id){
        Connection cnx =SConnection.getInstance();
        TypeLogement c=null;
        try {PreparedStatement stp1=cnx.prepareStatement("select * from typelogement where id=?");
            stp1.setInt(1, id);
            ResultSet n= stp1.executeQuery();
            while(n.next()){
                c= new TypeLogement(n.getInt(1),n.getString(2),n.getDouble(3));
            }
            cnx.close();

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return c;

    }

1 Ответ

0 голосов
/ 11 октября 2018

Похоже, проблема в том, что вы закрываете соединение с базой данных: вы используете Connection cnx= SConnection.getInstance();, чтобы получить соединение как в findAll(), так и find().И в find() вы закрываете соединение.Итак, происходит следующее:

  1. Вы открываете соединение в findAll()
  2. Вы получаете внешний ResultSet и перебираете его
  3. В цикле, который вы вызываете find()
  4. Вы звоните Connection cnx= SConnection.getInstance(); и получаете внутренний ResultSet
  5. Вы закрываете соединение в find().Когда вы закрываете соединение, оно закрывает все результирующие наборы, открытые в этом соединении.
  6. Цикл для внешнего ResultSet завершается неудачно, поскольку результирующий набор был закрыт из-за закрытого соединения в методе find()

Вместо этогозакрытия соединения необходимо закрыть ResultSet в методе find().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...