WinFuture-Forum.de: Problem/zeitdruck: Kunden-db(vector) Und Suche - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Problem/zeitdruck: Kunden-db(vector) Und Suche Kunden-DB

#16 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 19. Juli 2005 - 13:05

1. Um konkret zu werden, müsste man einmal deine Klasse Datenanbindung sehen. Irgendwo hast du wohl vergessen ein Objekt zu initialisieren.

2. Warum protected? private reicht doch auch. (Es sei denn zu lässt ne Klasse von dieser Klasse erben, dann vergiss das)
Irgendwo ist es gehüpft wie gesprungen, da du ja immer ne Referenz auf diese Objekte hast.
0

Anzeige



#17 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 19. Juli 2005 - 13:12

Zitat

ch ruf erst in der Main über die Instanz die auswahl() der Kunden auf, von dort aus wähl ich ebenfalls die 1 um nen Kunden einzulesen, dann springt er an die rote Stelle und liefert ne NullpointerException. Warum?


Weil db1 == null oder db1.con == null?

Zitat

muss ich diese stmt, con, rs (blau markiert) immer als protected oben in der Klasse haben oder wäre es geschickter ich leg ne Datenbankanbindung-Instanz (dort sind Con, stmt usw. deklariert) an und greif immer über diese darauf zurück?


Letzteres.

Zitat

Instanz anlegen, oder?

Ein Singleton wäre das besser.
Sprich: Datenbankanbindung als abstract deklarieren, mit einer statischen Methode getInstance, die eine eindeutige Instanz dieser Klassen zurückliefert.

Zitat

Bemerke: es gibt noch Artikel, Lieferanten etc.. da würd ich das ja immer wieder deklarieren, was eigentlich net stimmen kann, oder?

Wie wär's, wenn du eine generische Methode schreibst, die alles vereint?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#18 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 19. Juli 2005 - 18:01

Hey,
ja das mit dem abstract ist korrekt, hatte ich auch vor, aber versteh das net so ganz. Und aufgrund meines Zeitproblems muss ich eben davon abstand nehmen und einfach funktionalitäts bzw. programmierstil einbußen in kauf nehmen.

könnte ich es dir mal schicken und du kannst schauen, wo bei der datenbankanbindung was schief läuft?!

Wer mir helfen will, bitte Mail hier rein oder an <entfernt> schreiben.

Wär euch echt dankbar! Ich löcher euch auch net zu arg, aber muss bis heut Abend die Verwaltung lauffähig haben und bin glaub recht kurz davor.
0

#19 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 20. Juli 2005 - 01:32

hmm jo meiner einer hängt noch am selben problem.

gut das blaue sollte ich wohl über Instanzen lösen, denke ich.
Warum des con aber null ist, weiß ich nicht. Ihr vielleicht?

Hier noch die Klasse, die meine DB-Anbindung macht:

public class Datenbankanbindung {
    protected Statement stmt = null;
    protected Connection con;
    protected ResultSet rs = null;
    
    /** Creates a new instance of Datenbankanbindung */
    public Datenbankanbindung() {
    }
    
    public void connect() throws Exception{
        
        try {
            String url = "jdbc:odbc:xyz";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con=DriverManager.getConnection(url);
            System.out.println("Connect erfolgreich!");
            
            //        stmt = con.createStatement();
            //        rs=stmt.executeQuery("SELECT Firma, Kunden-CODE FROM Kunden");
            //
            //        while (rs.next()) {
            //            String kundencode=rs.getString(1);
            //            String firma=rs.getString(2);
            //            System.out.println(kundencode+"\t"+firma);
            //        }
            //        stmt.close();
            //con.close();
        }
        catch (Exception e) {
            System.out.println("Fehler bei der Datenbankanbindung!"+e.getMessage());
        }
    }
    
}


Was passt da nicht? Langsam wirds echt dringend bei mir, pls help.

Dieser Beitrag wurde von mubbelbubbel82 bearbeitet: 20. Juli 2005 - 01:33

0

#20 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 20. Juli 2005 - 14:15

Es ist null, weil du es mit null initialisierst und es nie ändertst - du rufst ja nirgendwo connect() auf. Außerdem, wie willst du über db1.con auf eine als protected deklarierte Variable zugreifen? Und wieso "throws Exception", wenn du doch alles catchsts und nix propagierst?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#21 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 20. Juli 2005 - 15:56

ich versteh bei deiner antwort nur bahnhof?! ähm konkret pls!!!
rumprobieren tu ich schon seit nem tag jetzt.
Wieso ändere ich es nie?
con=DriverManager..... ist das nix?
beim Resultset hab ich nun das selbe bzw. ein ähnliches Problem, heeelp. Bin eh schon fast durchgerasselt.. :)

nur weil db1.connect() hier nirgends aufgerufen wird... naja es wird in der main() aufgerufen.


jo das Problem hab ich vor 2h gelöst: db1.connect() stand in der main übrigens.
aber es geht weiter... die Zeit drängt echt tierisch, aber wenn ich das mal gelöst habe, dann bin ich erheblich weiter und es ist licht am ende. also bitte bitte angucken.

 
public class Datenbankanbindung {
    protected Statement stmt = null;
    protected static Connection con;
    protected ResultSet rs = null;
    
    /** Creates a new instance of Datenbankanbindung */
    public Datenbankanbindung() {
    }
    
    public void connect() throws Exception{
        
        try {
            String url = "jdbc:odbc:fake";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con=DriverManager.getConnection(url,"unknown","unknown");
            if(con != null) System.out.println("Connect erfolgreich!");
.... //nur noch catch anweisungen


 
package Projekt;
import java.sql.*;
import Prog1Tools.*;


public class Kunden {
    
    
    protected String sql;
    protected PreparedStatement stmt;
    protected ResultSet rs;
    protected Connection con;
    protected Statement statement;
    
    
    /** Kunden Standardkonstruktor */
    public Kunden() {
    }
    
    /** Methode, die das Kundenauswahlmenü zeigt zur Steuerung der Kundenoperationen */
    public void auswahlKunde() throws Exception{
        try{
            /** Instanz um auf die Klasse Kundensuche zu kommen und dort Einträge zu suchen */
            Kundensuche ks=new Kundensuche();
            int kundeauswahl;
            do{
                 kundeauswahl=IOTools.readInteger("Was tun?\n(1) Kunden anlegen (2) Kunden anzeigen (3) Kunden suchen nach KNR (4) Kunden suchen nach Name (5) Kunde ändern (6) Kunde löschen (7) HOME \n ");
                switch(kundeauswahl){
                    case 1: anlegenKunde(); //Kunde einlesen
                    break;
                    
                    case 2: ausgebenKunde(); //Kunden aus der DB holen
                    break;
                    
                    case 3: ks.suchenKnr();  //nach Knr suchen
                    break;
                    
                    case 4: ks.suchenKunde(); //nach Name suchen
                    break;
                    
                    //case 5: kvwm.main(); //home: zurück zum Ursprungsmenü
                    //break;
                    
                    case 6: ändernKunde(); //Datensatz ändern
                    break;
                    
                    case 7: löschenKunde(); //Datensatz löschen
                    break;
                    
                    default: System.out.println("Programm wurde abgebrochen!");
                    break;
                }
            }while(kundeauswahl<1 && kundeauswahl>7);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
    /** Kunden einlesen und Eintrag in die Datenbank*/
    public void anlegenKunde() throws SQLException{ // funktioniert wunderbar
        try{
            Datenbankanbindung db1=new Datenbankanbindung();
            PreparedStatement stmt=db1.con.prepareStatement("INSERT INTO Kunden VALUES (?,?,?,?,?,?,?,?,?,?,?)"); //11 Attribute für nen Kunde, die in der bestehenden Tabelle stehen
            
            String kundencode=IOTools.readString("Kunden-Code: ");
            String firma=IOTools.readString("Firma: ");
            String kontaktperson=IOTools.readString("Kontaktperson: ");
            String position=IOTools.readString("Position: ");
            String strasse=IOTools.readString("Strasse: ");
            String ort=IOTools.readString("Ort: ");
            String region=IOTools.readString("Region: ");
            String plz=IOTools.readString("Postleitzahl: ");
            String land=IOTools.readString("Land: ");
            String telefon=IOTools.readString("Telefon: ");
            String telefax=IOTools.readString("Telefax: ");
            
            stmt.setString(1,kundencode);
            stmt.setString(2,firma);
            stmt.setString(3,kontaktperson);
            stmt.setString(4,position);
            stmt.setString(5,strasse);
            stmt.setString(6,ort);
            stmt.setString(7,region);
            stmt.setString(8,plz);
            stmt.setString(9,land);
            stmt.setString(10,telefon);
            stmt.setString(11,telefax);
            stmt.executeUpdate();
            
            stmt.close();
            db1.con.close();
            System.out.println("Kunde erfolgreich angelegt!");
        }
        
        catch(Exception e){
            System.out.println("Fehler in anlegenKunde()"+e.getMessage());
        }
    }
    
    /** Kunden ausgeben aus der Datenbank, kompletter Kundenstamm */
[COLOR="Red"]    public void ausgebenKunde() throws SQLException{[/COLOR]
        try {
           // PreparedStatement stmt; 
            Datenbankanbindung db1=new Datenbankanbindung();
            statement=db1.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONC
UR_UPDATABLE);
[COLOR="Red"]            rs=statement.executeQuery("SELECT Kunden-Code, Firma, Kontaktperson, Position, Strasse, Ort, Region, Land, Telefon, Telefax FROM Kunden");[/COLOR]
            rs.beforeFirst();
            while(rs.next()){
                System.out.println(rs.getString(1)+"\t"+rs.getString(2)); //1=Kunden-Code; 2=Firma
            }
            stmt.close();
            System.out.println("Kunden erfolgreich ausgegeben!");
            
        }catch(Exception e){
            System.out.println("Fehler in Methode: "+e.getMessage());
        }
    }
    
    /** einzelne Datensätze von Kunden ändern */
    public void ändernKunde(){
        try {
            String firmenname=IOTools.readString("richtiger Firmenname: ");
            String kundenid=IOTools.readString("Änderung welches Kunden(ID)? ");
            sql="UPDATE Kunden SET Firma="+firmenname+" WHERE Kunden-Code="+kundenid;
            rs=stmt.executeQuery(sql);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
    
    /** einzelne Datensätze von Kunden löschen*/
    public void löschenKunde(){
        try{
            String id=IOTools.readString("Welchen Kunden(ID) wollen sie löschen? ");
            rs=stmt.executeQuery("SELECT Kunden-Code,Firma FROM Kunden");
            while(rs.next()){
                String kundencode=rs.getString("Kunden-Code"); //1,2?
                String firma=rs.getString("Firma");
                
            }
            
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
    
    
}



Was geht: Kunde einlesen
nicht geht: Rest

Es gibt PRobleme in der rot markierten Zeile. Ein Fehler, dass 2 Parameter erwartet wurden, aber zu wenige geliefert oder so!? Warum und was muss ich fixen? KAnns wer fixen?
Hab dafür noch bis heute 24 Uhr, dann ist eh alles vorbei. :-(

Geh ich richtig in der annahme, dass anlegen funktioniert?
dass löschen, ändern, ausgebe, suchen genau nach dem selben schema funktionieren?
sprich: wenn ich diesen resultset einmal zum laufen habe, dann ist es mehr oder minder copy&paste. die sql statements dazu kann ich, aber es funktioniert halt nicht, alle kunden aus der access-db auszugeben.... bitte helft.
0

#22 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 20. Juli 2005 - 18:35

Zitat

Ein Fehler, dass 2 Parameter erwartet wurden, aber zu wenige geliefert oder so!? Warum und was muss ich fixen? KAnns wer fixen?

Warum liest du nicht die verdammte Javadoc? Bei Eclipse und IntelliJ reicht ein dann gar ein billiges Strg-Q, um die Doc einzublenden.
Die Anzahl und Typen der Parameter stimmen aber.
Das Problem dürfte eher sein, daß du versucht, eine statische Referenz nicht-statisch zu instanziieren.

Datenbankanbindung db1 = new Datenbankanbindung(). db1.con.blah
->
Datenbankanbindung.con.blah, ohne Konstruktor

Zitat

con.close()


Und warum schließt du die Connection gleich wieder?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#23 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 21. Juli 2005 - 22:33

Ich bedank mich recht herzlich für die hier angebotene Hilfestellung. Hab es ja eigentlich eh immer selbst geschafft. Nun kommts zur Abgabe des ganzen in 3 Tagen.

Könnte bitte der Mod das Thema löschen, nicht dass da mir jmd. nen Strick dreht, wenn ers findet?! Bitte lösch einfach den Thread oder blende ihn aus.
Danke sehr!
0

#24 Mitglied ist offline   mubbelbubbel82 

  • Gruppe: Mitglieder
  • Beiträge: 16
  • Beigetreten: 28. Mai 05
  • Reputation: 0

geschrieben 23. Juli 2005 - 18:20

Hallooooo?
Das kann doch net wahr sein, geschieht das bald!?!
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0