2016-05-06 40 views
2

データベースからデータを取得する際に問題があります。 配列のリストを取得しようとしています。rs.next()を使用してすべての配列要素を取得します

しかし、私の問題は、前のものを上書きする可能性があるため、配列の最後の要素しか取得できないことです。

ここに私のコードです。

    String sql; 
       sql = "select * from NM_PROPERTIES_LOADER"; 
       ResultSet rs = stmt.executeQuery(sql); 
       String prop_name = null; 
       String prop_value = null; 
       PropertyData reader = new PropertyData(); 

       while(rs.next()){ 
        prop_name = rs.getString("prop_name"); 
        prop_value = rs.getString("prop_value"); 
        reader.setPropName(prop_name); 
        reader.setPropValue(prop_value); 
        ..//other setter.. 


        System.out.println(prop_name + " " + prop_value); 
       } 
       prop.add(reader); 

私のsysoutでは、すべてのデータを取得できます。私のページでは最後の要素だけが取り出されます。ここに私のDAOクラスがあります。

public class PropertyData { 

private int id; 
private String propName; 
private String propValue; 
private String engineName; 
private String desc; 
private Date createdAt; 
private String createdBy; 
private Date updatedAt; 
private String updatedBy; 



public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getPropName() { 
    return propName; 
} 
public void setPropName(String propName) { 
    this.propName = propName; 
} 
public String getPropValue() { 
    return propValue; 
} 
public void setPropValue(String propValue) { 
    this.propValue = propValue; 
} 
public String getEngineName() { 
    return engineName; 
} 
public void setEngineName(String engineName) { 
    this.engineName = engineName; 
} 
public String getDesc() { 
    return desc; 
} 
public void setDesc(String desc) { 
    this.desc = desc; 
} 
public Date getCreatedAt() { 
    return createdAt; 
} 
public void setCreatedAt(Date createdAt) { 
    this.createdAt = createdAt; 
} 
public String getCreatedBy() { 
    return createdBy; 
} 
public void setCreatedBy(String createdBy) { 
    this.createdBy = createdBy; 
} 
public Date getUpdatedAt() { 
    return updatedAt; 
} 
public void setUpdatedAt(Date updatedAt) { 
    this.updatedAt = updatedAt; 
} 
public String getUpdatedBy() { 
    return updatedBy; 
} 
public void setUpdatedBy(String updatedBy) { 
    this.updatedBy = updatedBy; 
} 

} 

答えて

1

ループの繰り返しごとに、readerの内容を上書きします。 ループ内にreaderを作成したい場合は、ループ内には 、ループ内にはprop.add(reader)を作成し、外側には作成しません。このよう

String sql = "select * from NM_PROPERTIES_LOADER"; 
ResultSet rs = stmt.executeQuery(sql); 

while(rs.next()) { 
    PropertyData reader = new PropertyData(); 
    String name = rs.getString("prop_name"); 
    String value = rs.getString("prop_value"); 
    reader.setPropName(name); 
    reader.setPropValue(value); 

    // other setter calls.. 

    prop.add(reader); 
} 
+0

私はすでにこれを試してみました。それは配列の長さを表示しました。私の場合は36行です。表示される行はすべて最後の要素です。私の最後の要素は "パスワード"なので、私は36行の "パスワード"を持っています。 –

+0

ループの中で 'PropertyData reader = new PropertyData(); 'でそれがどうなるかわかりません。それが本当の場合、他にも別の問題があります。 – janos

+0

ohhh .. PropertyDataリーダー=新しいPropertyData()を入れるのを忘れてしまった。ループ内。私の悪い。今それは働いている。ありがとう! –

関連する問題