Objektorientierter Ansatz fehlt

Status
Nicht offen für weitere Antworten.

rastaman

Mitglied
HAllo Leute

Also ich habe ein Problem... ;)

Ich code seit einiger zeit an einem projekt... dabei habe ich mir mühe gegeben nach dem objektorientierten ansatz vorzugehen.

Endziel: Verwaltungssystem für eine Videothek

Hauptklasse: Die klasse, in der ich das ganze Gui per Netbeans gebastelt habe

Unterklassen: (unter anderem)
sql (hier ist der ganze Sql teil abgelegt)
kunde (verarbeite ich die result sets von der klasse sql in vectoren etc)

ich habe nun also diese klasse kunde mit der "new instance of Kunde"
Code:
public kunde(String n, String v, String st, String or, java.util.Date gd, int ku, int pl, int tel, int pw, String em ) {
        this.name = n;
        this.vorname = v;
        this.strasse = st;
        this.ort =or;
        this.geburtsdatum = gd;
        this.kundennummer = ku;
        this.plz = pl;
        this.telefonnr = tel;
        this.passwort = pw;
        this.email = em;

und dem teil, der die gewünschten Daten in einen Vector füllt,
Code:
    public Vector vektorfüllen(){
         Sql verbindung = new Sql();
         verbindung.connect();
         Vector abfragek = new Vector();
         try {
           rSet = verbindung.abfrage("SELECT * FROM kunde ORDER BY Name");
           //rSet = verbindung.abfrage("SELECT Name, Vorname, Vorname, Strasse, Ort, Geburtsdatum, Kundennummer, PLZ, Telefonnummer, Passwort, Email FROM kunde ORDER BY Name");

           while ( rSet.next() )
                abfragek.add( new kunde( rSet.getString("Name"), rSet.getString("Vorname"), rSet.getString("Strasse"), rSet.getString("Ort"), rSet.getDate("Geburtsdatum"), rSet.getInt("Kundennummer"), rSet.getInt("PLZ"), rSet.getInt("Telefonnummer"), rSet.getInt("Passwort"), rSet.getString("Email") ));
            }
         catch ( SQLException e )
            {
            System.out.println( "Fehler bei Tabellenabfrage" + e );
            }
        verbindung.abfrageende();
        verbindung.trennen();
        return abfragek;
    }

und nun versuche ich von meiner mainklasse aus auf die klasse kunde zuzugreiffen
Code:
    public static void main(String args[]) {
        //zugriff auf die klasse Kunde um anschliessend die methode vector füllen auszuführen
        kunde k = new kunde();
        k-vectorfüllen();
        
        //Zeichnen des Gui
        new guidatenbank().show();
und den Vector zu füllen.
Dies klappt aber nicht und der Compiler meldet:
guidatenbank.java [1'060:1] kunde(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.Date,int,int,int,int,java.lang.String) in videothek2.kunde cannot be applied to ()
new kunde();

also ich habe keinen plan wie ich weiter machen soll :Bahnhof:
 
R

Roar

Gast
der konstruktor von kunde (Klassennamen werden großg eschrieben) erwartet die bestimmten parameter. du hast nur einen konstruktor, also musst du den auch verwenden. du kannst nicht einfach parameter weglassen.
 
B

Beni

Gast
Du hast den Konstruktor von "kunde" als
Code:
public kunde(String n, String v, String st, String or, java.util.Date gd, int ku, int pl, int tel, int pw, String em ) {
definiert, und willst nun
Code:
new kunde();
aufrufen.

Aber diesen Konstruktor, ohne Argumente, hast du nicht definiert :arrow: er existiert nicht. Du musst entweder all die Argumente einfüllen, oder noch einen zusätzlichen Konstruktor definieren:

Code:
public class kunde{
  public kunde(){ ... }
  public kunde(String n, String v, String st, String or, java.util.Date gd, int ku, int pl, int tel, int pw, String em ){ ... }
}

P.S. eigentlich schreibt man Klassen gross ("Kunde").

[edit: nur zweiter, dafür ausführlicher]
 

nollario

Bekanntes Mitglied
das problem ist, dass die methode verktorfüllen (keine umlaute in Methodennamen und ausserdem: vektorFuellen) falsch plaziert ist. im moment ist es eine instanz methode der klasse kunde. du solltest sie aber entweder statisch machen (public static void vektorFuellen) oder teil einer anderen (beispielsweise deiner hauptklasse)....

die fehlermeldung ist entstanden, da du einen konstruktor benutzt der gar nicht vorhanden ist. du hast ja einen eigenen konstruktor geschrieben mit den ganzen parametern
 
B

Beni

Gast
Dieses vektorfüllen hat ja keinen direkten Zusammenhang mit einer Instanc von "kunde". Darum kannst du das Keyword "static" hinzufügen. (Damit wird vektorfüllen zu einer Klassenmethode, im Gegensatz zu einer Instanzmethode).
Code:
public static Vector vektorfüllen(){...}

So, und jetzt kannst du ganz einfach schreiben:
Code:
Vector datas = kunde.vektorfüllen();
 

rastaman

Mitglied
Funzt 1A ;)

wenn ich jetzt folgendermassen vorgehe:
Code:
public static void main(String args[]) {
        
        start();
        
        
        new guidatenbank().show();
          
    }

    public static void start(){
       Vector kunde = Kunde.vektorfüllen(); 
       Vector filme = Filme.vektorfüllen();
       
       return; 
    }

sind dann die beiden vectoren sozusagen im ram gespeichert und können jederzeit von anderen methoden aus durchsucht werden?
 

rastaman

Mitglied
hm aber wenn ich das so mache:

Code:
    //Variablen
    private static Vector kunde;
    private static Vector filme;

    public static void main(String args[]) {
        
        start();
        
        
        new guidatenbank().show();
          
    }

    public static void start(){
       kunde = Kunde.vektorfüllen(); 
       filme = Filme.vektorfüllen();
       
       return; 
    }

dann sollte es ja gehen...
oder eben nicht weil die variablen static sind?
 
B

bygones

Gast
prinzipiell schon - es sind nun Klassenvariablen und somit werden die "gemerkt". Wobei sie private sind und wenn du von einer anderen Klasse zugreifen willst musst du dann noch getter und setter Methoden wählen..

Aber warum machst du alle Variablen bzw. Methoden statisch ?
Meiner Ansicht nach wäre es (OOP)-mäßig besser sie als instanzvariablen bzw -methoden zu schreiben ![/code]
 

rastaman

Mitglied
na ja die methode start ist statisch, weil mein Compiler sonst meckert... ;)

wie müsste ich das ganze denn sonst schreiben?
 
B

bygones

Gast
rastaman hat gesagt.:
wie müsste ich das ganze denn sonst schreiben?
Code:
public class Main {//Variablen
    private Vector kunde;
    private Vector filme;

    public Main() {
       kunde = Kunde.vektorfüllen();
       filme = Filme.vektorfüllen();
       new guidatenbank().show();
    }

    public static void main(String args[]) {
        new  Main();         
    }
}
wobei - Klassennamen immer groß und eher guidatenbank().setVisible(true)
 

rastaman

Mitglied
Hier mal der ganze code von Klasse

Code:
public class Kunde {
    
    static ResultSet rSet; 
    
    int anz;
    
    private String name;
    private String vorname;
    private String strasse;
    private String ort;
    private int kundennummer;
    private java.util.Date geburtsdatum = new java.util.Date();
    private int plz;
    private int telefonnr;
    private int passwort;
    private String email;

    
    /** Creates a new instance of kunde */
    public Kunde(String n, String v, String st, String or, java.util.Date gd, int ku, int pl, int tel, int pw, String em) {
        this.name = n;
        this.vorname = v;
        this.strasse = st;
        this.ort =or;
        this.geburtsdatum = gd;
        this.kundennummer = ku;
        this.plz = pl;
        this.telefonnr = tel;
        this.passwort = pw;
        this.email = em;
    }
       
    
    public static Vector vektorfüllen(){
         Sql verbindung = new Sql();
         verbindung.connect();
         Vector abfragek = new Vector();
         try {
           rSet = verbindung.abfrage("SELECT * FROM kunde ORDER BY Name");
           //rSet = verbindung.abfrage("SELECT Name, Vorname, Vorname, Strasse, Ort, Geburtsdatum, Kundennummer, PLZ, Telefonnummer, Passwort, Email FROM kunde ORDER BY Name");

           while ( rSet.next() )
                abfragek.add( new Kunde( rSet.getString("Name"), rSet.getString("Vorname"), rSet.getString("Strasse"), rSet.getString("Ort"), rSet.getDate("Geburtsdatum"), rSet.getInt("Kundennummer"), rSet.getInt("PLZ"), rSet.getInt("Telefonnummer"), rSet.getInt("Passwort"), rSet.getString("Email") ));
            }
         catch ( SQLException e )
            {
            System.out.println( "Fehler bei Tabellenabfrage" + e );
            }
        verbindung.abfrageende();
        verbindung.trennen();
        return abfragek;
    }
    
         
     public String getName(){
         return name;
     }
   
}

und meine Klasse Sql:

Code:
public class Sql {
    
    Connection conn;
    Statement stmt;
    ResultSet rSet;
    int update;

    
  public boolean connect()
  {
    try {
      Class.forName( "com.mysql.jdbc.Driver" );
    }
    catch ( ClassNotFoundException e ) {
      System.out.println( "Fehler bei ODBC-JDBC-Bridge" + e );
      return false;
    }
    try
    {
      String url = "jdbc:mysql://localhost/videothek";
      conn = DriverManager.getConnection( url, "root", "224181" );
      //conn.close();
    }
    catch ( SQLException e )
    {
      System.out.println( "Fehler bei Tabellenabfrage" + e );
      return false;
    }
    return true;
  }
   
  public ResultSet abfrage(String query){
    try
    {
      stmt = conn.createStatement();
      String sqlQuery = query;
      rSet = stmt.executeQuery( sqlQuery );

     }
    catch ( SQLException e )
    {
      System.out.println( "Fehler bei Tabellenabfrage" + e );

    }
     return rSet;  
  }
  
    public boolean abfrageende(){
    try
    {
        stmt.close();
     }
    catch ( SQLException e )
    {
      System.out.println( "Fehler bei Tabellenabfrage" + e );
      return false;
    }
     return true;  
  }
  
  
  public int update(String query){
    try
    {
      stmt = conn.createStatement();
      String sqlUpdate = query;
      update = stmt.executeUpdate( sqlUpdate );
      stmt.close();
     }
    catch ( SQLException e )
    {
      System.out.println( "Fehler bei Tabellenabfrage" + e );
    }
     return update;  
  }
  
  public boolean trennen(){
    try
    {
      conn.close();
    }
    catch ( SQLException e )
    {
      System.out.println( "Fehler bei Tabellenabfrage" + e );
      return false;
    }
    return true;   
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
C Programm objektorientierter machen Allgemeine Java-Themen 12
J Frage zu Objektorientierter Programmierung Allgemeine Java-Themen 9
N chess ansatz Allgemeine Java-Themen 12
M ORM scheitert gefühlt im Ansatz Allgemeine Java-Themen 27
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
MoxxiManagarm Ich brauche einen smarten Ansatz Allgemeine Java-Themen 23
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
N Ansatz Simulation Javascript Allgemeine Java-Themen 2
J Drei Bedingungen -> 9 Fällen, welcher Ansatz besser Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
P Ansatz?: EncoderWrapper Klasse bauen? Allgemeine Java-Themen 5
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
R Setting Ordner fehlt Allgemeine Java-Themen 1
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
L hilfe. :D wo fehlt diek klammer Allgemeine Java-Themen 17
L Deinstallationsprobleme (Dll fehlt) Allgemeine Java-Themen 9
S Datei fehlt. Allgemeine Java-Themen 2
R java.awt.Component.setCursor() fehlt bei der JFrame doc Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben