1

我想从 sql 查询中添加一些记录,但输出不正确。始终返回最后一条记录。

正确的列表是:

约翰

缺口

玛丽

,但总是返回乔。

这是添加元素的方法:

public ArrayList<String[][]> getFiledArrayList()
{
   // ArrayList<String[][]> fieldsList = new  ArrayList<>();
    String[][] tempRow = new String[1][2];
    ResultSet result;

    String sql = "select id, name_of from field";
    result = database.exeQueryStatement(sql);
    try 
    {
        while(result.next())
        {
            tempRow[0][0] = result.getString("id");
           // System.out.println(tempRow[0][0]);
            tempRow[0][1] = result.getString("name_of");
           // System.out.println(tempRow[0][1]);
            fieldsList.add(tempRow);
            System.out.println(fieldsList.get(0)[0][1]);
        }
    } 
    catch (SQLException ex) 
    {
        Logger.getLogger(FieldManage.class.getName()).log(Level.SEVERE, null, ex);
    }

    return fieldsList;

我把idname_of放在一个String[1][2]表中,我想name_of在一个 jComboBox 中显示。我想插入并name_of观看id

FieldManage fieldmanage = new FieldManage();
   ArrayList<String[][]> listOfField;
   listOfField = fieldmanage.getFiledArrayList();
   String[] fields = new String[listOfField.size()];
   System.out.println(listOfField.get(0)[0][0]);
   for (int i=0; i<listOfField.size(); i++)
   {
        fields[i] = listOfField.get(i)[0][1];
        System.out.println(fields[i]);//test print show always joe!
    }
     jComboFields.setModel(new javax.swing.DefaultComboBoxModel(fields));

此代码始终返回 Joe。

另外我想知道是否有更好的方法将 jcombo 元素与id.

4

3 回答 3

6

填充时fieldsList,您重复添加对同一对象 ( tempRow) 的引用。当您的循环修改 的内容时tempRow,所有先前添加的条目也会更改(因为它们是同一个对象)。

在循环内移动以下行:

String[][] tempRow = new String[1][2];
于 2012-11-05T12:19:06.347 回答
2

您正在尝试创建一个对象值数组。

使用ArrayList<String[][]>不是做到这一点的方法。

创建一个类

public class Person {
    private long id;
    private String name;

    public long getId() {
         return id;
    }

    public void setId(long id) {
        self.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        self.name = name;
    }

}

然后在你的代码中......

ArrayList<Person> myPeople = new ArrayList<Person>();

Person p = new Person();
p.setName("mary");
p.setId(1);

myPeople.add(p);

从那里开始,你做起来很艰难,并且考虑到你在理解数组和对象引用方面有问题,在开始将多维原始数组与循环和集合结合使用之前,先学习这门语言。

于 2012-11-05T12:33:34.513 回答
1

移动这一行:

String[][] tempRow = new String[1][2];

while(result.next())作为循环中的第一行。

怎么了:

如果你把循环放在tempRow外面,在循环的第二个迭代器中,相同的数组被修改,即被下一个值覆盖。在while循环完成时,您fieldsList仅在所有索引处包含最后一个元素。

运行你的循环 3 次,你会看到 Mary 作为输出。

于 2012-11-05T12:28:07.717 回答