迭代器 - 如何遍历特定记录

时间:2012-03-16 06:16:00

标签: java iterator

我已经使用JDBC执行了一个查询并遍历结果集我已经在java中的List中存储了所有字段。

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 while循环如何一次获得这7个字段(表中有一行有7个字段)。

我在这里有点迷惑。请帮帮我。

由于

3 个答案:

答案 0 :(得分:1)

我认为你的List声明应该是

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

从结果集中获取时,创建一个DAO对象,将所有获取的数据添加到该对象中,然后将该对象添加到列表中。

然后,您可以在每次迭代时迭代并获取每个DAO对象。

答案 1 :(得分:1)

您要做的是实际创建另一个存储所有七个值的对象。

然后创建这些条目的列表,以便您可以一次访问一行,这是我认为您要问的。

首先为该行创建一个类。

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并获取您想要的任何特定条目。

当然,如果你有特定的值,那么为Entry创建String类型的实例变量而不是字符串数组可能是明智的。

我的意思是你可以这样做:

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);
        // ...
    }

这样,对于某些具有除String之外的其他类型的列,您也可以像r.getInt(i)一样调用。

祝你好运!

答案 2 :(得分:0)

您可以使用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();
  }