Iterartor - Как пройти для определенных записей - PullRequest
0 голосов
/ 16 марта 2012

Я выполнил запрос, используя JDBC и просматривая набор результатов. Я сохранил все поля в List в java.

List<String> dataList=new ArrayList<String>();
        while(res.next())
        {
            dataList.add(res.getString(1));
            dataList.add(res.getString(2));
            dataList.add(res.getString(3));
            dataList.add(res.getString(4));
            dataList.add(res.getString(5));
            dataList.add(res.getString(6));
            dataList.add(res.getString(7));
        }
        Iterator<String> it= dataList.iterator();

Как я добавил непосредственно в список, как я могу получить эти 7 полей при обходеитератор.Означает:

while(it.hasNext())
{
   String f1=it.next();

}

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

Я немного запутался здесь.Пожалуйста, помогите мне.

Спасибо

Ответы [ 3 ]

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

На самом деле вы хотите создать еще один объект, в котором хранятся все семь значений.

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

Сначала создайте класс для строки.

private static class Entry {
    String[] row;

    public Entry ( ResultSet r ) {
        row = new String [ 7 ];
        for (int i = 1; i <= 7; i++) {
            row[i] = r.getString(i);
        }
    }
}

Используя это, вы можете затем создать список объектов Entry.

List<Entry> entryList = new ArrayList <Entry> ();

while(res.next())
{
    entryList.add ( new Entry ( res ) );
}

Затем вы можете перейти к циклу записи entryList и получить любую конкретную запись, какую захотите.

Конечно, если у вас есть конкретные значения, возможно, было бы целесообразно создать переменные экземпляра типа String для Entry, а не массив строк.

Под этим я подразумеваю, что вы могли бы сделать это:

private static class Entry {
    String column1; // rather than name column1 use what the column semantically represents

    String column2;

    // ...

    public Entry ( ResultSet r ) {
        column1 = r.getString(1);
        // ...
    }

Таким образом, вы также можете вызывать, например, r.getInt(i) для определенных столбцов, которые имеют другой тип, отличный от String.

Удачи!

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

Я думаю, что ваша декларация списка должна быть

List<Any DAO Object> instead of List<String>

При извлечении из набора результатов создайте объект DAO, добавьте все извлеченные данные в этот объект, а затем добавьте этот объект в список.

Затем вы можете выполнять итерацию и получать каждый объект DAO на каждой итерации.

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

Вы можете использовать класс DatabaseMetaData,

private static final String DRIVER = "com.mysql.jdbc.Driver";

  private static final String URL = "jdbc:mysql://localhost/testdb";

  private static final String USERNAME = "root";

  private static final String PASSWORD = "";

  public static void main(String[] args) throws Exception {
    Class.forName(DRIVER);
    Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

    DatabaseMetaData metadata = connection.getMetaData();
    ResultSet resultSet = metadata.getColumns(null, null, "users", null);
    while (resultSet.next()) {
      String name = resultSet.getString("COLUMN_NAME");
      String type = resultSet.getString("TYPE_NAME");
      int size = resultSet.getInt("COLUMN_SIZE");

      System.out.println("Column name: [" + name + "]; type: [" + type + "]; size: [" + size + "]");
    }
    connection.close();
  }
...