Neuen Kunden anlegen

Status
Nicht offen für weitere Antworten.

Nasim

Mitglied
Hallo,

also ich habe eine GUI mit NetBeans erstellt und eine Datenbank mit MSSQL verknüpft.

Nun hab ich ein TAB namens "Kundenverwaltung" dort soll man neue Kunden anlegen können.

Man gibt die Angaben vom Neukunden an und klickt dann auf einen Button namens "Neuen Kunden anlegen".

Jetzt soll der Kunde in die Datenbank gespeichert werden nur weiss ich nicht wie das funktioniert ?!

Weiss jemand weiter?

Liebe Grüße

Nasim
 

Nasim

Mitglied
Ich häng dir grad mal das Projekt an.

Also da ich ziemlich wenig Ahnung habe,
weiss ich beides nicht. ^^

Grüße
 

Nasim

Mitglied
Ja weiss ich, die Datenbankanbindung hab ich ja auch schon hinbekommen,
nur weiss ich nicht was ich machen muss wenn über das Programm ein neuer Kunde angelegt wird, wie ich das realisieren muss.
 

Michael...

Top Contributor
Ach wie nett, wiedermal eine automatisch erstellte GUI ;-) Ich habe mir den Code nur im WordPad anschauen können, da machen einem solche automatisch erstellten Oberflächen ganz schön zu schaffen. Ich würde Dir empfehlen die GUI-Klasse aufzuteilen - zumindest für jeden Tab eine eigene Klasse.

Zum speichern der Kundendaten:
Du benutzt ja schon Select - Statements, zum einfügen von Datensätzen benutzt man Insert - Statements:
Code:
Insert into Kundentabelle (Name, Vorname) values ('Mayer', 'Franz')
Generell würde ich PreparedStatements verwenden. In Java würde das dann so aussehen:
Java:
PreparedStatement newCustomer = con.prepareStatement("Insert into Kundentabelle (Name, Vorname) values (?, ?)");
newCustomer.setString(1, "Mayer");
newCustomer.setString(2, "Franz");
newCustomer.execute();
Das ganze ist ungetestet, für eventuelle Fehler keine Gewähr ;-)
 

Nasim

Mitglied
Ok danke und wo muss ich das reinschreiben in Database.java oder
bei der GUI.java unter Kundenverwaltung beim Button "Neuen Kunden hinzufügen" ?
 

Nasim

Mitglied
Ok ich hab eine neue Methode in Database erstellt zeigt auch keine Probleme an.

Aber wie soll ich das dann in der actionPerformed mit den Kundendaten machen?

Sorry steh grad i-wie ein bisschen auf dem Schlauch. ^^
 

Michael...

Top Contributor
So wie Du es auch in den andere actionPerformed-Methoden machst. Nur musst diesmal anstelle des Suchtexts die Kundeninforrmationen übergeben.
 

Nasim

Mitglied
Ok habs probiert aber weiss nicht genau was da rein gehört und was nicht.

private void jButtonKundenverwaltungNeuenKundenanlegenActionPerformed(java.awt.event.ActionEvent evt) {
NeuerKunde
newCustomer = ("Insert into Kundentabelle (Name, Vorname, Straße, Hausnummer, PLZ, Wohnort, Telefon) values (?, ?)");
newCustomer.setString(1, "");
newCustomer.setString(2, "");
newCustomer.execute();

}

kannst du mir sagen was ich da genau reinschreiben muss?
 

André Uhres

Top Contributor
Oliver, ist NeuerKunde ein PreparedStatement??
Java:
PreparedStatement newCustomer;
try {
    newCustomer = conn.prepareStatement("...");//conn ist eine java.sql.Connection
} catch (SQLException ex) {
    ex.printStackTrace();
}
Bei values(..) brauchst du soviele Fragezeichen wie du Werte einfügen willst, in diesem Fall sieben. Die Werte, die du reinschreiben musst, bekommst du aus deinen Textfeldern, etwa so:
String name = jTextFieldKundenverwaltungName.getText();
Mit setString kannst du dann die Werte an die entsprechenden Positionen übergeben (zum Beispiel ist der Name in Position 1):
newCustomer.setString(1, name);
usw.
...
 
Zuletzt bearbeitet:

Nasim

Mitglied
Danke :)
Ok hab ich alles gemacht.
Zeigt auch keine Fehler an aber wenn ich einen neuen Kunden anlegen will,
also wenn ich auf den Button klick passiert nichts und wenn ich in die Datenbank guck ist auch kein neuer Kunde angelegt worden ?!

Gruß
 

Nasim

Mitglied
In der Database.java :

public void NeuerKunde(String name, String vorname, String straße, String hausnummer, String wohnort, String plz, String telefon){
PreparedStatement newcustomer;
try {
newcustomer = conn.prepareStatement("Insert into Kundentabelle (Name,Vorname,Straße,Hausnummer,Wohnort,PLZ,Telefon) values (?,?,?,?,?,?,?)")
newcustomer.setString(1, name);
newcustomer.setString(2, vorname);
newcustomer.setString(3, straße);
newcustomer.setString(4, hausnummer);
newcustomer.setString(5, wohnort);
newcustomer.setString(6, plz);
newcustomer.setString(7, telefon);
} catch (SQLException ex) {
ex.printStackTrace();
}
}

In der GUI.java der Button wo den neuen Kunden hinzufügen soll:

private void jButtonKundenverwaltungNeuenKundenanlegenActionPerformed(java.awt.event.ActionEvent evt) {
Database.getDatabase().NeuerKunde(
jTextFieldKundenverwaltungName.getText(),
jTextFieldKundenverwaltungVorname.getText(),
jTextFieldKundenverwaltungStraße.getText(),
jTextFieldKundenverwaltungHausnummer.getText(),
jTextFieldKundenverwaltungWohnort.getText(),
jTextFieldKundenverwaltungPLZ.getText(),
jTextFieldKundenverwaltungTelefon.getText());
}


Weiss jemand was ich falsch gemacht habe bzw. etwas vergessen habe?
Bin für jede Hilfe dankbar. :)

Liebe Grüße

Nasim
 
S

SlaterB

Gast
zunächst mal hast du vergessen, irgendwelche Probleme zu beschreiben,
funktioniert etwas nicht?
Compilerfehler/ Exception zur Laufzeit/ Fehlverhalten der Anwendung?

als unvollständig könnte man bewerten, dass du bisher nur ein PreparedStatement erstellt hast,
aber auf dessen Ausführung verzichtest:

newCustomer.execute();

und immer KLEIN anfangen, EIN TextFeld, eine Tabelle mit EINEM Attribut,
anfangs am besten nichtmal eine GUI-Anwendung, sondern eher ein einfaches Hello World-Abspeichern-main-Programm

du versinkst in Bergen von Parametern und sonstigen Details ohne den Kern zu erfassen
 
Zuletzt bearbeitet von einem Moderator:

Nasim

Mitglied
Ja ok stimmt hab ich vergessen.

Hab jetzt das Statement ausgeführt und bekomme folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.sql.SQLException: Der Wert NULL kann in die 'KundenNr'-Spalte, 'Bibliothek.dbo.Kunden'-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:506)
at javaapplication2.Database.NeuerKunde(Database.java:78)
at javaapplication2.GUI.jButtonKundenverwaltungNeuenKundenanlegenActionPerformed(GUI.java:570)
at javaapplication2.GUI.access$400(GUI.java:32)
at javaapplication2.GUI$5.actionPerformed(GUI.java:343)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
M

maki

Gast
Was verstehst du denn nicht?

Die Fehlermeldung:
Code:
Der Wert NULL kann in die 'KundenNr'-Spalte, 'Bibliothek.dbo.Kunden'-Tabelle nicht eingefügt werden. 
Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT.
.. ist doch eindeutig.
 

Nasim

Mitglied
Ja ich versteh nich was ich falsch programmiert habe damit der Fehler kommt, weil KundenNr ist der Primärschlüssel also kann man da bei der Datenbank ja auch nicht ankreuzen das auch NULL Werte gültig sind?!


public void NeuerKunde(String name, String vorname, String straße, String hausnummer, String wohnort, String plz, String telefon) throws SQLException{
PreparedStatement newcustomer = NULL
newcustomer.executeUpdate();
try {
newcustomer = conn.prepareStatement("Insert into Kunden (Name,Vorname,Straße,Hausnummer,Wohnort,PLZ,Telefon) values (?,?,?,?,?,?,?)");//conn ist eine java.sql.Connection
newcustomer.setString(1, name);
newcustomer.setString(2, vorname);
newcustomer.setString(3, straße);
newcustomer.setString(4, hausnummer);
newcustomer.setString(5, wohnort);
newcustomer.setString(6, plz);
newcustomer.setString(7, telefon);
} catch (SQLException ex) {
ex.printStackTrace();
}

}
 
M

maki

Gast
Das DB Schema ist falsch, der MS SQL Server muss schon wissen dass er den Primärschlüssel selber erstellen muss, ist [c]KundenNr[/c] denn als Identity definiert?
 
S

SlaterB

Gast
du musst offensichtlich einen Wert beim Insert übergeben,
oder die Tabelle anders definieren, auto_increment oder so

Google

vielleicht in jeder DB anders
 

Nasim

Mitglied
Ja der Datentyp von KundenNr ist int.
Weisst du vielleicht was man machen muss damit die DB weiss das sie den Primärschlüssel selbst erstellen muss?
 
S

SlaterB

Gast
ich habe auf google verlinkt und 5 Seiten werden dir 7 Lösungen nennen,
MSSQL kenne ich nicht, wird aber auch dabei sein, notfalls wenn man die Anfrage einschränkt,
Anleitung solltest du auch haben wenn du mit einer bestimmten DB arbeitest,
Foren gibts dazu vielleicht,

naja, viel blah blah, kurz: ich kann dazu nix genaueres sagen ;)
vielleicht meintest du auch maki ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
O Neuen JFrame öffnen und alten schließen AWT, Swing, JavaFX & SWT 7
W Bei Button-klick neuen button in array hinzufügen AWT, Swing, JavaFX & SWT 7
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
R SWT TreeViewer neuen Input setzen AWT, Swing, JavaFX & SWT 3
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
Ollek IndexOutOfBoundsException bei neuen Daten in JTable AWT, Swing, JavaFX & SWT 13
M PropertyChangeListener - JTable bei neuen Objekten updaten? AWT, Swing, JavaFX & SWT 3
D Swing FileChooser mit einem neuen Rootordner AWT, Swing, JavaFX & SWT 6
D Aufruf neuer Klasse ohne Erzeugung eines neuen Fensters AWT, Swing, JavaFX & SWT 3
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
Ollek Realisierung: JTable zur Laufzeit mit neuen Daten füllen AWT, Swing, JavaFX & SWT 3
T Neuen JInternalFrame von JLabel "herunterziehen" AWT, Swing, JavaFX & SWT 6
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
R SWT Statusmeldung im neuen Fenster blockiert aufrufendes Fenster AWT, Swing, JavaFX & SWT 2
G JFile Chooser "Buttons" wie Neuen Ordner erstellen AWT, Swing, JavaFX & SWT 3
S BufferedImage & Scaling: Altes Problem im neuen Gewand AWT, Swing, JavaFX & SWT 2
G JList Neuen Eintrag sofort anzeigen AWT, Swing, JavaFX & SWT 10
M Focus beim öffnen eines neuen JFrames AWT, Swing, JavaFX & SWT 6
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
S Problem, neuen JInternalFrame zur Laufzeit anzuzeigen AWT, Swing, JavaFX & SWT 8
G Screen nach Auswahl schließen und neuen öffnen?wie mach ichs AWT, Swing, JavaFX & SWT 8
O Brauche ich einen neuen Frame? AWT, Swing, JavaFX & SWT 2
H JTree nach setzen eines neuen TreeModels aufklappen AWT, Swing, JavaFX & SWT 2
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
T JButtons indexiert unter NetBeans anlegen AWT, Swing, JavaFX & SWT 7
Y JCheckBoxen automatisch anlegen AWT, Swing, JavaFX & SWT 6
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
N Minesweeper: 2D Feld von JButtons anlegen AWT, Swing, JavaFX & SWT 19
T JPanel in Schleife anlegen AWT, Swing, JavaFX & SWT 7
TheJavaKid JFrame in Taskleiste anlegen (Minimieren) AWT, Swing, JavaFX & SWT 5
S JFileChooser // Neuer Ordner anlegen deaktiviert! AWT, Swing, JavaFX & SWT 2
M SWT 200 combos anlegen AWT, Swing, JavaFX & SWT 2
T anlegen einer jTable mit TableModel AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben