2012-11-05 83 views
1

我想從sql查詢中添加一些記錄,但輸出不正確。始終返回最後一條記錄。如何在數組列表中使用多維數組?

正確的名單是:

約翰

尼克

瑪麗

,但總是返回喬。

這是添加元素的方法:我把idname_ofString[1][2]

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; 

,我想表現出的JComboBox的name_of。 Ι要進行插入和觀看name_ofid

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)); 

此代碼總是返回喬。

另外我想知道是否有更好的方法來匹配一個jcombo元素與id

回答

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); 

開始從那裏,你做硬盤的方式,並考慮到你有認識問題,數組和對象引用,學習語言開始與循環和收藏結合使用多維基本數組之前。

6

當填充fieldsList時,您重複添加對同一對象的引用(tempRow)。當你的循環修改tempRow的內容時,所有先前添加的條目也會改變(因爲它們是同一個對象)。

將下面的行內循環:

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

謝謝!你是對的!但爲什麼發生這種情況我總是改變字符串的值 – thanassis

1

移動這一行:

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

爲第一生產線在while(result.next())循環。

正在發生的事情:

,如果你把tempRow外環線,中環路同一陣列第二個迭代器被修改,即在明年值覆蓋。在完成while循環時,您的fieldsList僅包含所有索引處的最後一個元素。

運行你的循環3次,你看到瑪麗作爲輸出。