попытка новичка использовать Java ArrayList для хранения ResultSet, полученного из базы данных - PullRequest
0 голосов
/ 06 марта 2012

У меня есть сервер базы данных, взаимодействующий с сервером приложений Java с помощью JDBC.Я хочу хранить данные из базы данных ResultSet в переменные Java.

Вот мой класс Java, HRPeople:

public class HRPeople {
    public int elements;
    public String[] FirstName;
    public String[] LastName;
    public String[] Email;
    public int[] Salary;
}

В настоящее время я использую этот класс для хранения данных из ResultSet следующим образом:

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6";
rset = stmt.executeQuery(query);
while (rset.next()) {
    returnHRdata.FirstName[ii] = rset.getString("first_name");
    returnHRdata.LastName[ii]  = rset.getString("last_name");
    returnHRdata.Email[ii]     = rset.getString("email");
    returnHRdata.Salary[ii]    = rset.getInt("salary");
    ii = ii + 1;
}

Проблема с вышеупомянутымСценарий состоит в том, что примитивные массивы требуют, чтобы я знал количество строк в ResultSet, чтобы я мог правильно инициализировать эти массивы.Поэтому я хочу использовать ArrayList вместо этого.Как мне изменить приведенный выше сценарий, чтобы сделать это?

Вот моя первоначальная попытка (это близко)?Файл HRPeople.java, показанный выше, даже используется в этом сценарии?

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6";
rset = stmt.executeQuery(query);
List<HRPeople> returnHRdata = new ArrayList<HRPeople>();
while (rset.next()) {
   returnHRdata.FirstName = rset.getString("first_name");
   returnHRdata.LastName  = rset.getString("last_name");
   returnHRdata.Email     = rset.getString("email");
   returnHRdata.Salary    = rset.getInt("salary");
   returnHRdata.add;
}

ОБНОВЛЕНИЕ 1:

Если я добавлю к коду следующий код,

return returnHRdata;

Iполучить следующую ошибку (есть идеи почему?):

myClass.java:213: incompatible types
found   : java.util.List<HRPerson>
required: java.util.ArrayList<HRPerson>
    return returnHRdata;
           ^
1 error

Ответы [ 6 ]

5 голосов
/ 06 марта 2012

Возможно, вы сначала захотите определить HRPerson следующим образом:

public class HRPerson {
    public String firstName;
    public String lastName;
    public String email;
    public int salary;
}

Тогда ваш основной код будет выглядеть так:

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6";
rset = stmt.executeQuery(query);
List<HRPerson> returnHRdata = new ArrayList<HRPerson>();
while (rset.next()) {
   HRPerson person = new HRPerson();
   person.firstName = rset.getString("first_name");
   person.lastName  = rset.getString("last_name");
   person.email     = rset.getString("email");
   person.salary    = rset.getInt("salary");
   returnHRdata.add(person);
}
1 голос
/ 06 марта 2012

Преобразовать это:

public class HRPeople {
  public int elements;
    public String[] FirstName;
    public String[] LastName;
    public String[] Email;
    public int[] Salary;
}

до:

public class HRPerson {
    public String firstName;
    public String lastName;
    public String email;
    public int salary;
}

и

List<HRPerson> people = new ArrayList<HRPerson>();

Теперь все должно быть просто:

while (rset.next()) {
  HRPerson person = new HRPerson();
  returnHRdata.firstName = rset.getString("first_name");
  returnHRdata.lastName = rset.getString("last_name");
  returnHRdata.email = rset.getString("email");
  returnHRdata.salary = rset.getInt("salary");
  people.add(person);
}
1 голос
/ 06 марта 2012
List<HRPeople> returnHRdata = new ArrayList<HRPeople>();
while (rset.next()) {
   HRPeople people = new HRPeople();
   people.FirstName = rset.getString("first_name");
   people.LastName = rset.getString("last_name");
   people.Email    = rset.getString("email");
   people.Salary    = rset.getInt("salary");
   returnHRdata.add(people);
}

Вы можете улучшить этот код, используя букву нижнего регистра для первого символа ваших полей и используя методы получения и установки для доступа к ним.

0 голосов
/ 06 марта 2012

Вместо того, чтобы хранить массив каждого свойства в вашем объекте, создайте один объект для описания данного объекта в таблице.

class HRPerson {
    String firstName;
    String lastName;
    String email;
    Integer salary;
}

Создайте список этого типа, позволяющий хранить результаты.

List<HRPerson> hrPeople = new ArrayList<HRPerson>();

while(rset.next()) {
    HRPerson person = new HRPerson();
    person.firstName = rset.getString("first_name");
    person.lastName  = rset.getString("last_name");
    person.email     = rset.getString("email");
    person.salary    = rset.getInt("salary");

    hrPeople.add(person);
}

Наконец, заполните его, создав новые объекты для каждой строки в вашей таблице.

0 голосов
/ 06 марта 2012

создайте класс HRPeople с атрибутами firstname, lastname .... и объявите метод getter, setters.

затем:

List<HRPeople> returnHRdata = new ArrayList<HRPeople>();
HRPeople people = null;
while (rset.next()) {
   people = new HRPeople();
   people.setFirstName( rset.getString("first_name"));
   people.setLastName (rset.getString("last_name"));
...
   returnHRdata.add(people);
}
0 голосов
/ 06 марта 2012

Закрыть ...

while (rset.next()) {
   HRPeople person = new HRPeople();
   person.setFirstName(rset.getString("first_name"));
   person.setLastName(rset.getString("last_name"));
   person.setEmail(rset.getString("email"));
   person.setSalary(rset.getInt("salary"));
   returnHRdata.add(person);
}

Вы, конечно, должны определить методы setXXXX в классе HRPerson. О да, и делай то, что предложил Томаз.

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