Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung.

TH260199

Neues Mitglied
Mein Ziel ist es eine Kontaktverwaltung aufzubauen und soweit so gut habe ich es schon grob geschafft.
Der Inhalt soll in einer Datenbank und CSV-Datei gespeichert werden.
Die Eingabe soll über Swings durch Eingabemasken erfolgen. Ich habe drei Texteingaben und eine Zahleingabe.
Komischerweise wird aber die Texteingabe nicht übernommen und bei der Zahleingabe kommt nur die 10.
Ich lade den Code mal hoch.
Ich würde mich über Hilfe wirklich freuen, das ist nur ein Projekt zum üben.
Ich fange gerade erst mit dem Programmieren an.

Java:
package kontaktVerwaltung;

import java.awt.Checkbox;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JOptionPane;

 class db {
    
       public void speichern() {
          kontaktVerwaltungClass cw = new kontaktVerwaltungClass();
          
           String url = "jdbc:mysql://localhost:3306/verwaltung";
            String user = "root";
            String pass = "";
            
                try {
              
                Connection con = DriverManager.getConnection(url, user, pass);
              
                String sql = "insert into contact(name, adress, postcode, website) values(?,?,?,?)";
                   PreparedStatement pstmt = con.prepareStatement(sql);
                   pstmt.setString(1, cw.tfName.getText());
                   pstmt.setString(2, cw.tfAdress.getText());
                   pstmt.setInt(3, cw.tfPostcode.getColumns());
                   pstmt.setString(4, cw.tfWebsite.getText());
                   pstmt.execute();

                  
                   con.close();
                } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());

                }
                
            
          
        }
      
       public void show() {
          
       }
        

 }



Code:
package kontaktVerwaltung;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

class csv {
    
    
    
    public void save() {
        
        kontaktVerwaltungClass cv = new kontaktVerwaltungClass();
        
        try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {

            StringBuilder sb = new StringBuilder();
            sb.append("Name");
            sb.append(',');
            sb.append("Adresse");
            sb.append(',');
            sb.append("Postleitzahl");
            sb.append(",");
            sb.append("Webseite");
            sb.append('\n');

            sb.append(cv.tfName.getText());
            sb.append(',');
            sb.append(cv.tfAdress.getText());
            sb.append(',');
            sb.append(cv.tfPostcode.getColumns());
            sb.append(',');
            sb.append(cv.tfWebsite.getText());
            sb.append('\n');

            writer.write(sb.toString());
            writer.close();
            System.out.println("done!");

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }

    }
        
    
}
 

KonradN

Super-Moderator
Mitarbeiter
Dann zeige doch auch mal die Klasse kontaktVerwaltungClass.

Was ich vermute:
A) Du öffnest das Fenster in Zeile 16 aber es geht sofort weiter. Der Anwender hat also keine Zeit, etwas einzugeben.
B) getColumns sieht dubios aus. Was für ein Control soll da eine Eingabe zurück geben?

Der Ablauf bei einer UI Anwendung ist Eventbasiert. Es gibt also eine UI und wenn der Nutzer etwas macht, dann passiert etwas. Dann kann das save aufgerufen werden, aber dem Save muss natürlich übergeben werden, was gespeichert werden soll.
 

TH260199

Neues Mitglied
Dann zeige doch auch mal die Klasse kontaktVerwaltungClass.

Was ich vermute:
A) Du öffnest das Fenster in Zeile 16 aber es geht sofort weiter. Der Anwender hat also keine Zeit, etwas einzugeben.
B) getColumns sieht dubios aus. Was für ein Control soll da eine Eingabe zurück geben?

Der Ablauf bei einer UI Anwendung ist Eventbasiert. Es gibt also eine UI und wenn der Nutzer etwas macht, dann passiert etwas. Dann kann das save aufgerufen werden, aber dem Save muss natürlich übergeben werden, was gespeichert werden soll.
Da habe ich eigentlich nur ein Objekt erzeugt und dann im CLick_Event die DB und die Datei ablaufen lassen.
getColumn soll eigentlich nur den eingetragenen Wert abspeichern.

Java:
package kontaktVerwaltung;

import java.awt.Color;

import java.awt.EventQueue;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Toolkit;
import java.awt.Label;
import javax.swing.JMenuBar;
import javax.swing.UIManager;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JList;
import java.awt.Component;
import javax.swing.Box;
import java.awt.Dimension;
import javax.swing.JTable;


public class kontaktVerwaltungClass extends JFrame {
    

    
    public JPanel contentPane;
    public JTextField tfName;
    public JTextField tfAdress;
    public JTextField tfPostcode;
    public JTextField tfWebsite;
    private JTable table;

    

    

    

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    kontaktVerwaltungClass frame = new kontaktVerwaltungClass();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public kontaktVerwaltungClass() {
        setTitle("Kontaktverwaltung");
        setForeground(UIManager.getColor("FormattedTextField.selectionForeground"));
        setBackground(new Color(255, 255, 128));
        setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\tomha\\Desktop\\kisspng-computer-icons-google-contacts-iphone-simple-png-contact-5ab06b07ce0bb5.436415021521511175844.png"));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 806, 469);
        contentPane = new JPanel();
        contentPane.setBackground(UIManager.getColor("InternalFrame.activeTitleGradient"));
        
        

        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel picturbeLabel = new JLabel("New label");
        picturbeLabel.setIcon(new ImageIcon("C:\\Users\\tomha\\Desktop\\Firmenlogo.png"));
        picturbeLabel.setBounds(568, 21, 200, 131);
        contentPane.add(picturbeLabel);
        
        JLabel lblName = new JLabel("Name: ");
        lblName.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        lblName.setBounds(10, 21, 45, 13);
        contentPane.add(lblName);
        
        JLabel lblAdress = new JLabel("Strasse & Nr: ");
        lblAdress.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblAdress.setBounds(10, 44, 114, 13);
        contentPane.add(lblAdress);
        
        JLabel lblPostcode = new JLabel("PLZ & Ort: ");
        lblPostcode.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblPostcode.setBounds(10, 65, 90, 13);
        contentPane.add(lblPostcode);
        
        JLabel lblWebsite = new JLabel("Webseite: ");
        lblWebsite.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblWebsite.setBounds(10, 89, 90, 13);
        contentPane.add(lblWebsite);
        
        tfName = new JTextField();
        tfName.setBounds(90, 19, 174, 19);
        contentPane.add(tfName);
        tfName.setColumns(10);
        
        tfAdress = new JTextField();
        tfAdress.setBounds(90, 43, 174, 19);
        contentPane.add(tfAdress);
        tfAdress.setColumns(10);
        
        tfPostcode = new JTextField();
        tfPostcode.setBounds(90, 64, 174, 19);
        contentPane.add(tfPostcode);
        tfPostcode.setColumns(10);
        
        tfWebsite = new JTextField();
        tfWebsite.setBounds(90, 88, 174, 19);
        contentPane.add(tfWebsite);
        tfWebsite.setColumns(10);
        
        JButton btnAdd = new JButton("Kontakt hinzufügen");
        btnAdd.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                
                db database = new db();
                csv data = new csv();
                
                database.speichern();
                data.save();
            }
        });
        btnAdd.setFont(new Font("Tahoma", Font.PLAIN, 16));
        btnAdd.setActionCommand("Kontakt hinzufügen");
        btnAdd.setBounds(274, 78, 174, 34);
        contentPane.add(btnAdd);
        
        table = new JTable();
        table.setBounds(61, 175, 628, 220);
        contentPane.add(table);
                
    }
}
 

Jw456

Top Contributor
wie schon gesagt wurde getColumns()) gibt dir die Spalten Nummer nicht den Text den du eingegen hast.

Das Objekt was du in der Zeile 15 der db Klasse erstellt. Ist nicht das selbe was du in der main Methode erstellst hast. Du musst die Ref an die db Klasse übergehen wenn du von ihr aus die Eingaben in der GUI zugreifen willst. Nicht ein neues Objekt erstellen.
 

Jw456

Top Contributor
Java:
                db database = new db(); // hier solltes du die ref von dir selber übergeben
                csv data = new csv();   // und in einer Instanzvariablen  Variablen speichern
                                        // zum weiterverwenden. damit hat deine db Klasse eine ref auf
                                        // die GUI
 

KonradN

Super-Moderator
Mitarbeiter
Mehrere Probleme (in etwa das, was ich schon erwähnt habe):

Du hast eine Instanz der Klasse kontaktVerwaltungClass - diese wirst Du vermutlich in Deiner main Methode erzeugen und anzeigen. Beim Drücken auf den Knopf rufst Du dann die gezeigte Methode auf. Diese erzeugt dann eine neue Instanz von kontaktVerwaltungClass. Damit hast Du zwei Instanzen. In einer sind die Eingaben und die zweite ist einfach leer - die wurde nur erzeugt und nie angezeigt.

Erster schneller Fix (noch nicht schön): Übergib die Instanz, also:
Java:
    public void save(kontaktVerwaltungClass cv) {
        
        try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {
        // ...

Und der Aufruf erfolgt dann in etwa so: data.save(this);

Der zweite Punkt ist der Aufruf von getColumn. Du hast ein Textfeld und kannst da nur den Text abfragen. Das wäre getText. In der csv Datei sollte das schon ausreichen. In der Datenbank-Variante brauchst du den int Wert - den kannst Du per Integer.parseInt bekommen.

Generell ist das so aber noch nicht wirklich schön. Die Klassen für die Datenbank / CSV Datei sollten keine Abhängigkeit zu der UI haben. Es wäre also besser, das nur Abhängig zu machen zu den Daten selbst. Du solltest also die Werte als Parameter übergeben. Entweder als einzelne Parameter oder - was üblich ist - über eine Klasse. Du erstellst also eine Klasse Kontakt und dann hast Du eine Methode save (Kontakt kontakt)

Das wären so ein paar einfache Ideen zu dieser Problematik.

Und dann noch der Hinweis zu den Conding Guidelines, die bei Java in der Regel eingehalten werden: Klassennamen fangen mit einem großen Buchstaben an. Und Bezeichner sollten immer gut ausdrücken, was sich dahinter verbirgt. Das ist also eine Klasse die ein Kontakt Eingabe Fenster darstellt ... also wäre sowas wie KontaktEingabeFenster sinnvoll (so die Namen auf Deutsch sein sollen).
 

Jw456

Top Contributor
Java:
class Csv {
    private KontaktVerwaltungClass cv;
    public Csv(KontaktVerwaltungClass cv) {
        this.cv = cv;
    }

    public void save() {
        try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {
        ....
     
//------------------------------------    
class Db {
    private  KontaktVerwaltungClass cw;
    public Db(KontaktVerwaltungClass cw) {
        this.cw = cw;
    }
    public void speichern() {
        String url = "jdbc:mysql://localhost:3306/verwaltung";
        String user = "root";
        ....
//-----------------------------------
// KontaktVerwaltungClass
....
     @Override
            public void mouseClicked(MouseEvent e) {

                Db database = new Db(KontaktVerwaltungClass.this); //Die Objekte könnte man auch schon früher erstellen. als Istanzvariable.
                Csv data = new Csv(KontaktVerwaltungClass.this);

                database.speichern();
                data.save();
            }

....

so solltest du zugrif auf deine GUI haben.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Erster schneller Fix (noch nicht schön): Übergib die Instanz, also:
Java:
Code:
    public void save(kontaktVerwaltungClass cv) {
       
        try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {
        // ...

Und der Aufruf erfolgt dann in etwa so: data.save(this);
Hierbei solltest du bedenken das du in einer Callback Methode (Listener) bist. Schaue wie du da an das richtige „this“ kommst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
P MySQL Java Programm als Dienst MySQL Dump zurück spielen Datenbankprogrammierung 4
W Interaktion Java-Programm <-> Datenbank Datenbankprogrammierung 14
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
O MySQL sql Datei einzelner Tabellen erzeugen (über Java Programm) Datenbankprogrammierung 6
J Mit Java Programm - PostgreSQL backup und restore Datenbankprogrammierung 5
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
A Java JDBC Programm bringt auf Unix Server Fehlermeldung Datenbankprogrammierung 4
G Mit Java-Programm Datenbank löschen/neu anlegen Datenbankprogrammierung 5
M vorschläge bzgl. java programm mit datenbankanbindung Datenbankprogrammierung 4
B Importieren in MySQL mit Java-Programm Datenbankprogrammierung 2
B Exportieren aus MySQL mit Java-Programm Datenbankprogrammierung 11
P Wie übergebe ich einen NULL Wert in meinem Java-Programm? Datenbankprogrammierung 7
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben