我需要从sql数据库中检索数据并将其放在hashmap中,我对如何做到这一点有些迷茫,特别是对于给定的数据类型,如果有人能帮助我并向我解释这个过程,那就太好了,下面是我的代码:
public void load (Path p) throws DataLoadingException {
try {
String pathString = p.toString();
Connection c = DriverManager.getConnection("jdbc:sqlite:"+pathString);
Statement s = c.createStatement();
ResultSet rs = s.executeQuery("select * from PassengerNumbers;");
while (rs.next()) {
LocalDate date = LocalDate.parse(rs.getString("Date"));
int flightnumber = Integer.parseInt(rs.getString("FlightNumber"));
int loadestimate = Integer.parseInt(rs.getString("LoadEstimate"));
}
rs.close();
c.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以下是sqldb中的数据:
(PK TEXT) (PK INTEGER) (INTEGER)
Date FlightNumber LoadEstimate
2020-07-01 618 124
2条答案
按热度按时间pb3skfrl1#
我的建议是创建一个flight类,在该类中可以将所有三个值存储为属性,这样就可以将三个值存储在一个地方。这使得可以将每个flight对象存储在hashmap<integer,flight>中。类似下面的代码。
这样,您就可以通过hashmap访问所有数据,因为您知道它的大小。
sdnqo3pr2#
hashmap包含键值对,并将每个唯一键Map到一个值。
根据您提供的sql数据库信息,您的表有一个复合主键,换句话说,您的主键由两列组成(日期为text类型,航班号为integer类型)。
如您所知,主键具有唯一的值,以便在查询表中的数据时帮助您进行区分。因此,应该将表的主键作为键存储在hashmap中。
现在,由于主键由两列组成,并且它们的值的组合有助于识别唯一性,因此可以创建一个数组或列表,并将日期和flightnumber存储在其中。然后,将此数组/列表作为键添加到hashmap中,并将所需的其余字段(在本例中是integer类型的loadestimate)作为其值。
上面的代码应该是这样的:
注意,我创建了一个object类型的泛型对象数组,以便能够存储不同类型的对象。这是可能的,因为它们都是类对象的子类。
另外,java中的安全模式是在结束resultset、语句和连接时(按顺序)在finally块中关闭它们。因此,在catch块之后添加finally块: