เริ่มจากข้อเท็จจริงที่ว่า ArrayList
ของคุณไม่มีโครงสร้างเป็นการจัดกลุ่มแถว/คอลัมน์ คุณจะต้องมี List
ภายใน List
โดยที่รายการด้านนอกคือแถวและรายการภายในคือค่าคอลัมน์
ขณะที่เราดำเนินการนี้ เรามาใช้ประโยชน์จาก PreparedStatement
อย่างเหมาะสมและจัดการทรัพยากรเพื่อให้ปิดอย่างถูกต้องในขณะที่เราดำเนินการอยู่
ArrayList<List<String>> customerDetails = new ArrayList<>(25);
String sqlQuery = "SELECT * FROM customer WHERE AccountNumber=?";
try (PreparedStatement stmt = DatabaseConnection.dBconn().prepareStatement(sqlQuery)) {
stmt.setString(1, accountNumber);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
List<String> rowDetails = new ArrayList<>(10);
rowDetails.add(rs.getString("Name"));
rowDetails.add(rs.getString("DoB"));
rowDetails.add(rs.getString("Address"));
rowDetails.add(rs.getString("Mobile"));
rowDetails.add(rs.getString("Email"));
rowDetails.add(rs.getString("AccountType"));
rowDetails.add(rs.getString("AccountNumber"));
rowDetails.add(rs.getString("SortCode"));
rowDetails.add(rs.getString("Balance"));
rowDetails.add(rs.getString("Card"));
customerDetails.add(rowDetails);
}
}
} catch (SQLException err) {
System.out.println(err.getMessage());
}
return customerDetails;
ดูที่ การใช้คำสั่งที่เตรียมไว้ และ คำสั่ง try-with-resources สำหรับรายละเอียดเพิ่มเติม
ตอนนี้ เราต้องการ TableModel
ซึ่งสามารถรองรับได้ ในระดับพื้นฐานมาก...
public class ListTableModel extends AbstractTableModel {
private List<List<String>> rows;
private List<String> columnNames;
public ListTableModel(List<String> columnNames, List<List<String>> rows) {
this.rows = new ArrayList<>(rows);
this.columnNames = columnNames;
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return columnNames.size();
}
@Override
public String getColumnName(int column) {
return columnNames.get(column);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Class type = String.class;
return type;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
List<String> rowData = rows.get(rowIndex);
return rowData.get(columnIndex);
}
}
ซึ่งใช้ List
สำหรับชื่อคอลัมน์และ List<List>
สำหรับข้อมูลแถว
โดยส่วนตัวแล้ว ฉันอยากจะรวมข้อมูลไว้ใน Plain Old Java Object (POJO) บางประเภท เนื่องจากมันห่อหุ้มข้อมูลและให้ความยืดหยุ่นที่มากกว่าเมื่อแสดงข้อมูล (เช่น ฉันต้องแสดงคุณสมบัติทั้งหมดของวัตถุหากฉันไม่ทำ ไม่ต้องการ)
ดู วิธีใช้ตารางเพื่อดูรายละเอียดเพิ่มเติม
person
MadProgrammer
schedule
22.04.2017
ArrayList
ของคุณไม่มีโครงสร้างเป็นการจัดกลุ่มแถว/คอลัมน์ คุณจะต้องมีList
ภายในList
โดยที่รายการด้านนอกคือแถวและรายการภายในคือค่าคอลัมน์ - person MadProgrammer   schedule 22.04.2017I've been working on a web-service that returns an arraylist.
- เหตุใดจึงส่งคืน ArrayList หากคุณได้รับข้อมูลทั้งหมดจากฐานข้อมูล ทำไมไม่ส่งคืนDefaultTableModel
ที่มีข้อมูลทั้งหมด จากนั้นคุณเพียงแค่สร้างJTable
ของคุณโดยใช้โมเดลตาราง - person camickr   schedule 22.04.2017