Object[] befüllen

chuvak

Erfahrenes Mitglied
Ich lese Daten aus einer Datenbank aus:
Java:
public Object[] select() {
   Object[] data; // data wird definiert
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
        while (rs.next()) {
    
// Hier müsste data befüllt werden mit 
// rs.getString("vorname");
// rs.getString("nachname");

        }
        rs.close();
        stmt.close();
    } catch (SQLException ex) {
        System.out.println("error while selecting");
        System.err.println(ex);
    }
    return data;
}

// ---
// hiermit wird diese Methode von außerhalb aufgerufen:
model.addRow(DB.INSTANCE.select());

Die Daten sollen dann einfach in eine JTable geladen werden.

Hat jemand eine Idee, wie ich meinen Gedankengang in die Tat umsetzen kann?
Evtl. mit einer Arraylist?
 
Hi,
erstell für einen Customer doch einfach ein Objekt, in dem du die Werte speicherst. Die Customer-Objekte kannst du dann ganz einfach in einem Array/List abspeichern.
Dann brauchst du natürlich in deinem Model noch ein paar Methoden überschreiben, damit du aus deinem Customer Objekt die Werte wieder raus bekommst, die angezeigt werden sollen.

Gruß

Fabio
 
Die Customerklasse:
Java:
public class Customer
{
	private String firstname;
	private String familyname;

	public void setFirstname(String firstname) {
		this.firstname = firstname;
	}

	public String getFirstname() {
		return firstname;
	}

	public void setFamilyname(String familyname) {
		this.familyname = familyname;
	}

	public String getFamilyname() {
		return familyname;
	}
}

Das DefaultTableModel:
Java:
	private final List<Customer> customerList = new ArrayList<Customer>();
	private final DefaultTableModel model;
	
	private String[] columnNames = { "Firstname", "Familyname" };
	
	/**
	 * 
	 */
	public DeinKonstruktorName() {
		model = new DefaultTableModel()
		{
			@Override
			public Object getValueAt(int row, int column) {
				// evtl. muss row noch -1 genommen werden
				Customer customer = customerList.get(row);
				if (column == 1) {
					return customer.getFirstname();
				} else if (column == 2) {
					return customer.getFamilyname();
				}
				return super.getValueAt(row, column);
			}
			
			@Override
			public int getColumnCount() {
				return columnNames.length;
			}
			
			@Override
			public String getColumnName(int column) {
				return columnNames[column];
			}
			
			@Override
			public Class<?> getColumnClass(int columnIndex) {
				return String.class;
			}
			
			@Override
			public int getRowCount() {
				return customerList.size();
			}
		};
		JTable table = new JTable(model);
	}

und die Methode zum syncronizieren mit der DB:
Java:
	public void syncWithDatabase() {
		customerList.clear();
		try {
			stmt = conn.createStatement();
			rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
			while (rs.next()) {
				Customer c = new Customer();
				c.setFirstname(rs.getString("vorname"));
				c.setFamilyname(rs.getString("nachname"));
				customerList.add(c);
			}
			rs.close();
			stmt.close();
			model.fireTableDataChanged();
		} catch (SQLException ex) {
			System.out.println("error while selecting");
			System.err.println(ex);
		}
	}

Ich hab den Code vorher nicht getestet. Ich kann dir also nicht versprechen, dass der funktioniert.

Gruß

Fabio
 
Zurück