растущий массив программно

1

Я новичок в java, может ли кто-нибудь помочь мне в этом. У меня есть таблица db (образец) с одним столбцом (имя), я хочу читать записи из этой таблицы и хранить их в массиве (я не хочу собирать вещи для коллекций). Я хочу, чтобы размер массива увеличивался динамически. Может ли кто-нибудь исправить мой код. Я размещаю свой код здесь. Спасибо.

public class ArrayEx {

  public static void main(String[] args) throws Exception {
    String str[]=new String[4];
    int i=-1;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","sasi","admin");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select name from sample");
    while(rs.next()){
        i++;

        str[i]=rs.getString("name");
    }
    for(int j=0;j<str.length;j++)
    {
        System.out.print(str[j]+" ");
    }
  }
}
  • 2
    Боюсь, вы должны «пойти на сборы». Использование коллекций не сложно, не беспокойтесь об этом.
  • 3
    Используйте ArrayList .
Показать ещё 6 комментариев
Теги:

4 ответа

1

Если вам нужен массив, который растет, используйте ArrayList. В противном случае вы можете определить количество строк вверх и использовать массив.

Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery("select name from sample");
rs.last();
int lastRow = rs.getRow();
String str[]=new String[lastRow-1];
rs.beforeFirst();
while (rs.next()) {
   ...
}
  • 0
    Это не будет работать, если вы не создадите инструкцию SCROLL_INSENSITIVE.
1

В принципе, если вы действительно хотите использовать "растущий" массив, он будет выглядеть так:

int capcity = 4;
int usedSlots = 0;
String growingArray[] = new String[capcity];

Теперь вы "просто" постоянно увеличиваете "usedSlots" каждый раз, когда вы храните значение в своем массиве. Если "usedSlots" достигает текущей "емкости"; вы можете увеличить емкость, создать новый массив, скопировать все существующие элементы массива... и так далее. Но, как указывали другие, нет необходимости расти в массиве, если заранее известно заранее определенное количество требуемых элементов. С другой стороны, если это число неизвестно, то использование массивов просто неверно.

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

Проще говоря: это не имеет смысла; вы ничего не получаете от использования Коллекций. Фактически, вы получаете код, который будет сложнее понять и поддерживать (и это может вызвать у вас довольно негативную обратную связь, когда вы представляете этот код в обзоре своим сверстникам).

1

Это не объектно ориентированное и выглядит как небольшое упражнение C Во всяком случае, для вашего кода очень мало изменений: Примечание: Arrays.copyOf() выделяет новый массив указанного размера и копирует элементы исходного. Возможно, вы тоже захотите сделать это вручную...

public static void main(String[] args) throws Exception {
    int incSize = 4; // will increase the array of this size when needed
    String str[]=new String[incSize];
    int i=0; // keeps count of nb of occupied slots

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","sasi","admin");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select name from sample");
    while(rs.next()){
        // If we reach the end of the array, let increase it
        if (i == str.length) {
            str = Arrays.copyOf(str, str.length+incSize);
        }
        str[i] = rs.getString("name");
        i++;
    }
    for(int j=0;j<str.length;j++)
    {
        System.out.print(str[j]+" ");
    }
}
1

Использование Коллекций - лучший способ. Но, поскольку вы не хотите, чтобы вы использовали Collection, вы можете сделать что-то подобное.

В первом просто объявите массив как

String str [];

После того как вы выполнили запрос и получили набор результатов, вы можете динамически назначить значение для str, используя размер набора результатов.

ул = новый [ResultSet_size];

Но это очень старый и плохой метод кодирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню