我有一个查询结果集(日期和房间)某种矩阵。
9间客房和日期介于(2022年1月1日至2022年1月31日)。
try {
String query="select a.Tarikh AS 'TARIKH',a.Room AS 'ROOM',b.Room as 'BOOKED'"
+ "from (Select * from Tarikh Cross Join Room) as a\n"
+ "left join Booking as b\n"
+ "on a.Tarikh = b.Tarikh\n"
+ "and (a.Room = b.Room)\n"
+ "WHERE (a.Tarikh BETWEEN '2022-01-01' AND '2022-03-01');";
PreparedStatement pst=connection.prepareStatement(query);
ResultSet rs = pst.executeQuery();
// this line below implement the usage of net.proteanit.sql.DbUtils (import library)
table_1.setModel(DbUtils.resultSetToTableModel(rs));
// ---
pst.execute();
rs.close();
} catch (Exception e) {
e.printStackT
}
问题是,如何使JtableModel从这个
Room Date Booked
101 2022-01-01 2022-01-01
102 2022-01-01 2022-01-01
103 2022-01-01 2022-01-01
104 2022-01-01 2022-01-01
105 2022-01-01 null
106 2022-01-01 null
107 2022-01-01 null
108 2022-01-01 null
109 2022-01-01 null
101 2022-01-02 null
102 2022-01-02 2022-01-02
103 2022-01-02 null
104 2022-01-02 null
105 2022-01-02 null
106 2022-01-02 null
107 2022-01-02 null
108 2022-01-02 null
109 2022-01-02 null
and so on....
我希望记录是:
0101 0201 0301 0401 0501 and so on....
101 X
102 X X
103 X
104 X
105
106
107
108
109
有人知道吗,请帮忙。TQ
1条答案
按热度按时间2ul0zpep1#
您需要解析ResultSet数据以手动创建TableModel。
我可以从ResultSet数据创建一个
TreeMap
开始,房间号是键,ArrayList可以用于每个非空的预订日期。完成后,您就可以创建一个
DefaultTableModel
,其中包含“x”行和32列。行数将基于TreeMap
中的条目数。第一列将是房间号。接下来的31列将是该月的日期。现在,您需要从TreeMap读取每个键。每个键将表示TableModel中的一行。读取每个键时:
1.在第一列中设置房间号:
setValueAt(roomNumber, currentRow, 0)
1.循环遍历ArrayList中的每个预订日期并解析出日期。因此“2022-01-01”将成为第1列。现在您可以使用
setValueAt("X", currentRow, column)
更新模型中的值1.递增currentRow
对TreeMap中的所有键重复上述步骤。