我应该使用什么类型的数据结构来保存表行?

iam*_*esy 9 java sql collections jdbc

我是Java新手,只是进入查询数据库.到目前为止,我在ResultSetMetaData中得到了我的结果.我认为对于数据集中的每一行,我应该将它添加到某种形式的集合中?谁能告诉我这方面的最佳做法?

谢谢,
琼西

Eri*_*son 8

创建一个对象来保存数据.遍历结果集,为每个结果集创建一个对象,并将它们存储在ArrayList或HashMap中,具体取决于您希望如何使用数据.这允许您关闭数据库,它为您提供了良好的对象,您可以在其上构建操作数据的方法.

它还允许您编写使用不需要依赖数据库的对象的代码.如果您以后想要拔出数据库并切换到文本文件或其他任何东西,那么很容易做到,您仍然可以使用相同的对象和方法.


And*_*s_D 7

通常我们有一个类,其中的字段对应于表.然后,每当我们在结果集中有一个(完整的)行时,我们就会创建一个这个类的实例.

例:

考虑一个像这样创建的表:

CREATE TABLE customer (First_Name char(50), Last_Name char(50),
   Address char(50), City char(50), Country char(25), Birth_Date date);
Run Code Online (Sandbox Code Playgroud)

模型类将是这样的:

public class Customer {
  private String firstName;
  private String lastName;
  private String address;
  private String city;
  private String country;
  private Date date;


  public String getFirstName() {
    return firstName;
  }
  // getters for all fields

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  // setters for all fields

  public String toString() {
    return String.format("[%s, %s, %s, %s, %s, %s]", firstName,
             lastName, address, city, country, date);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您读取数据并拥有ResultSet,则可以创建新的客户对象并设置字段:

List<Customer> customers = new ArrayList<Customer>();
ResultSet rs = stmt.executeQuery("SELECT * from CUSTOMER;");
while (rs.next()) {
  Customer customer = new Customer();
  customer.setFirstName(rs.get("First_Name"));
  // ... and so on

  customers.add(customer);
}
Run Code Online (Sandbox Code Playgroud)


Noe*_*l M 6

A List似乎很合乎逻辑.如果你不会有重复,并且你不关心结果的顺序,那么也许是Set.

相关实施List:

  • ArrayList:这是由数组支持的,因此对特定索引的查找应该很快

相关实施Set:

  • HashSet:由背靠HashMap所以O(1)插入时间
  • TreeSet:尊重数据的排序(使用compareTo方法) - 因此迭代数据将按顺序 - 权衡是O(log n)插入时间