我有表格格式的数据,如下所示
id | Firstname | Lastname | Mo_Number
--------------------------------------
1 Chirag patel 77887*****
1 Chirag patel 99002*****
1 Chirag patel 88937*****
2 Devang patel 90900*****
2 Devang patel 45090*****
2 Devang patel 65900*****
我想将此表解析为java。
在java类中创建了以下类
package com.mirdb.model;
import java.util.Set;
public class Person {
private int id;
private String fName;
private String lName;
private Set<String> moNumbers;
}
任何人都可以告诉我通过解析上表可以给我个人对象列表的方法。
答案 0 :(得分:2)
因此,假设您的数据位于通过JDBC访问的数据库中,并且您拥有保存数据的ResultSet
,那么您可能希望执行以下操作:
while(result.next()) {
Person p = new Person();
p.setId( result.getInt("id") );
p.setfName( result.getString("Firstname ") );
// ...
}
显然我假设你的Person
类有一个可见的默认构造函数和所有字段的getter / setter方法。如果指向正确的方向,则应look at this tutorial。
修改:添加可以的方式(有很多方法!)处理每个人的多个电话号码。
Map<Integer,Person> persons = new HashMap<Integer,Person>();
while(result.next()) {
int id = result.getInt("id");
Person p = persons.get(id);
if (null == p) {
p = new Person();
// .. add all info to person (without phone number)
persons.put(id,p);
}
p.moNumbers.add(result.getString("Mo_Number"));
}
答案 1 :(得分:0)
我怀疑是否可以开箱即用,尤其是因为您似乎错过了Person
对象中的ID参数。
一种可能的解决方案可能是在Person
类中使用一个构造函数,该构造函数将字符串作为参数。此字符串将表示文本文件中的一行,然后构造函数将解构(.split("\\t")
可能?)然后根据您传递的字符串初始化正确的值。
编辑:看到你的评论,你可以尝试在this之前的SO帖子中做一些建议:
List<Person> pList = new ArrayList<Person>();
while (rs4.next()) {
pList.add(new Person(rs4.getString(0), rs4.getString(1)...);
}
...
return pList;
对于人:
package com.mirdb.model;
import java.util.Set;
public class Person {
private String ID;
private String fName;
private String lName;
private Set<String> moNumbers;
public Person(String id, String fName, String lName, Set<String> moNumbers)
{
this.ID = id;
this.fName = fName;
...
}
...
public String getID(){return this.ID;}
...
public boolean equals(object obj)
{
if (obj == null)
return false;
if (obj == this)
return true;
if (!(obj instanceof Person))
return false;
Person rhs = (Person) obj;
return rhs.getID().equals(this.getID());
}
}
编辑:根据您的其他问题:But question is how can I make Set<String> moNumbers so that I can pass it to constructor??
在你的例子中,你只显示一个蒙面数字(至少我认为是*
代表的。如果你只有一个数字,你可以这样做:
List<Person> pList = new ArrayList<Person>();
while (rs4.next()) {
Set<String> mobileNumbers = new HashSet<String>();
mobileNumbers.add(rs4.getString(3));
// if on the other hand you have multiple comma delimeted numbers, you could try the approach below:
//Set<String> mobileNumbers = new HashSet<String>(Arrays.asList(rs4.getString(3).split(",")));
pList.add(new Person(rs4.getString(0), rs4.getString(1), rs.getString(2), mobileNumbers);
}
return pList;