# Update DB; Werte aus Feldern übernehmen



## eys (9. Mrz 2010)

Hi Leutz,
ich würde gern einen Datensatz in meiner DB-Tabelle ändern, hab aber noch Probleme dabei.
vielleicht werdet ihr schlau draus, bin mir jetzt auch nicht sicher ob das hier ehe in die swing abteilung gehört..

Statement:

```
// Eine Adresse ändern
	public int updatePersonen(Personen p) throws DataException {
		try {
			String sql = "update personen set " +
					"personenNachname =          '" + p.getPersonenLastname()   +"',"+
                                        "personenVorname =           '" + p.getPersonenFirstname()  +"',"+
                                        "personenUserlogin =         '" + p.getPersonenUserlogin()  +"',"+
                                        "personenPassword =          '" + p.getPersonenPassword()   +"',"+
					"where personenID =          '" + p.getPersonenID()         +"' ";
			int count = update(sql);
			return count;
		}
		catch (Exception e) {
			throw new DataException(e.getMessage());
		}
	}
```

Managerklasse:

```
// Eine Adresse ändern
	public int updatePersonen(Personen p) throws DataException {
		return PersonenBroker.getInstance().updatePersonen(p);
	}
```

Button und ActionListener

```
updateButton = addButton("Ändern", UPDATE_ACTION);
                updateButton.setEnabled(false);
                

                ActionListener a1 = new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                              //-- geänderte Daten übernehmen
                    personen.setPersonenID(Integer.parseInt(personenID.getText()));
                    personen.setPersonenLastname("updatetest");
                    personen.setPersonenFirstname(personenVorname.getText());
                    personen.setPersonenUserlogin(personenUserlogin.getText());
                    personen.setPersonenPassword(personenPassword.getText());
                    personen.setPersonenID(Integer.parseInt(personenID.getText()));
                    System.out.println(personenNachname.getText());
                        try{

                            manager.updatePersonen(personen);   //Update ausführen
                            JOptionPane.showMessageDialog(frame, "Person wurde geändert",
                                "Speichern", JOptionPane.INFORMATION_MESSAGE);
                          }
                        catch(DataException ex){
                            JOptionPane.showMessageDialog(frame, ex.getMessage(), "Fehler", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                };
                updateButton.addActionListener(a1);
```

hatte die Update Methode zuerst separat aber das hat auch nicht funktioniert :rtfm: Das Programm startet zwar, die Felder werden auch mit Werten gefüllt aber die "setter" laufen irgendwie nicht. Es wird eine AWT-Queue -Nullpointer exception angezeigt. Habe auch eine Insert-Funktion aber da gibts keine Probleme...


----------



## SlaterB (9. Mrz 2010)

NullPointerExceptions haben oftmals triviale Ursachen, z.B. manager == null,
dazu sagt dein Code gar nichts aus

Exceptions immer auf den Grund gehen, sonst kann man nichts korrigieren

-----

Tipp: nenne die Personen-Klasse Person und die Attribute nur lastname statt personenLastname usw.


----------



## eys (9. Mrz 2010)

Hm.. ich habs schon mit debuggen probiert aber außer das er in irgendwelche exceptions springt hab ich da nix rausgefunden.
Meine Personen Klasse heißt schon Personen und eine Änderung der Variablen ändert doch auch nix :bahnhof:


----------



## Michael... (9. Mrz 2010)

gibt die Exception über e.printStackTrace() aus, dann sieht man auch in welcher Zeile der Fehler auftritt.


----------



## ARadauer (9. Mrz 2010)

Hilft dir jetzt zwar nicht, aber in Verbindung mit reinem SQL sollte man Prepared Statements verwenden
Using Prepared Statements (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)


----------



## eys (9. Mrz 2010)

danke für die ideen, habs jetzt nochmal arg umgebaut mit meinen ganzen funktionen und jetzt gehts :toll:
hab rausgefunden das er gleichzeitig zum update() auch meine insert() ausführen wollte


----------

