Java: чтение значений из базы данных неизвестного размера - PullRequest
0 голосов
/ 31 марта 2012

Я пытаюсь прочитать значения из базы данных SQLite, и у меня возникает следующий вопрос: Какую структуру данных вы бы использовали, если бы API позволял вам переходить от строки к строке без возможности проверки количества строк? Я хотел бы подчеркнуть тот факт, что я хочу вернуть двумерный массив в конце ... Не могли бы вы перечислить списки, а затем преобразовать?

1 Ответ

1 голос
/ 31 марта 2012

я думаю, что лучше возвращать список объектов, которые вы пытаетесь получить его данные, например, если вы хотите получить базу данных всех студентов, вы можете создать класс для этого:

public final class Student {
  private int id;
  private String name;
  private int age;

  public Student(int id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  public int getId() {
      return this.id;
  }

  // other getter methods
}

, тогда вы можетеполучить всех студентов в списке

public List<Student> getAllStudents() throws SQLException {
    List<Student> students = new ArrayList<Student>();

    String select = "SELECT * FROM students";
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(select);

    while ( resultSet.next() ) {
        int id = resultSet.getInt(1);
        String name = resultSet.getString(2);
        int age = resultSet.getInt(3);

        Student student = new Student(id, name, age);
        students.add(student);
    }

    return students;
}

Редактировать : чтобы получить размер набора результатов, вы можете вызвать resultset.last (), а затем вызвать resultset.getRow (), это обсуждалось здесь:

Как получить размер java.sql.ResultSet?

Как получить количество строк, содержащихся в ResultSet?

ResultSet resultSet = ps.executeQuery();
int rowcount = 0;
if (resultSet.last()) {
  rowcount = resultSet.getRow();
  resultSet.beforeFirst();
}

тогда вы можете построить свой 2D массив:

    String[][] result = new String[rowCount][ColumnCount];

    int i=0;
    while (resultSet.next()) {
      // build result[i] array
      i++;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...