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


#1 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 14. Juli 2005 - 14:54

Hallo Gemeinde,
erstmal schonma danke.
Bitte helft mir, sonst krieg ich im Studium riesig Probleme. ;)

Aufgabe:
Erstelle eine Kunden-DB, die Kunden in nen Vector einliest und ausgibt. => funktioniert
Erstelle dazu einen Selektor, wo man Kundennamen aus dem Vector auf Übereinstimmung suchen und ausgeben kann.
ha?s=hans etc... ha*=haber, haffner etc...
Hier Hilfe pls....
Wenn ich jemandem die Files schicken kann, wär ich dankbar, denn ich hab ziemlich Druck mit dieser Sache und verzweifel fast.



public class Kundenverwaltung { 
    
    public Kundenverwaltung() {
    }
    
    public static void main(String[] args) throws Exception {
        
        try{
            KundenContainer kc=new KundenContainer();
            kc.auswahl();
        }
        catch (NullPointerException f)
        {
        System.out.println("Fehler gefunden: Nullpointer\n"+f.getMessage());
        }
        
        catch (Exception e) {
            System.out.println("Fehler gefunden: allgemeiner\n"+e.getMessage());
        }
        
        }      
        
}    




Main-Klasse, in der ich versuche zuviele Anweisungen zu vermeiden. Das Exception-Handling ist noch nicht so ausgereift, weil ichs noch nich so verstehe.



public class KundenContainer {
    
    protected static Vector v=new Vector(5,2);//static...
    protected int kundennummer;
    protected String name;
    Kunde k1=new Kunde();
    
    
    public KundenContainer() {
    }
    
    //wählt zwischen den einzelnen Menüoptionen
    public void auswahl() {
        Selektor s1=new Selektor();
        System.out.println("Kundenverwaltung");
        System.out.println("Was wollen sie tun?");
        int ein;
        
        
        
        //Auswahl-Maske, die solange wiederkommt, bis einer Abbruch wählt
        do {
            ein=IOTools.readInteger("(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundenstamm, () Abbruch\n");
            
            switch(ein){
                case 1: eingabe(); //Eingabe-Maske
                break;
                
                case 2: suchenKnr(); // Suche nach der KNR
                break;
                
                case 3: //s1.setEingabe(name,k1);
                        s1.sucheName(); //Suche nach Name
                break;
                
                case 4: ausgabe(); //bisheriger Kundenstamm
                break;
                
                default:
                    System.out.println("Programmende erwünscht! "); //alles andere: Abbruch
                    break;
            }
        }while(ein<5 && ein>0);
        
    }
    
    //Eingabemaske
    public void eingabe() {
        name=IOTools.readString("Wie heißt der Kunde? ");
        kundennummer=v.size()+1; //automatische Kundennummerzuweisung
        Kunde k1=new Kunde(name,kundennummer);
        v.add(k1);
    }
    
    //Ausgabeprozedur
    public void ausgabe() {
        for(Iterator iter = v.iterator(); iter.hasNext();){
            Kunde k1=(Kunde)iter.next();
            System.out.println(k1.ausgebenKunde());
        }
    }
    
    public void suchenKnr(){
        
        int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");
        
        if(suchknr>v.size() || suchknr<1) { //fängt Kundennummern ab, die nicht existieren
            System.out.println("Kundennummer nicht vorhanden!");
        }
               
        for(Iterator iter = v.iterator(); iter.hasNext();){
            Kunde k1=(Kunde)iter.next();
            if(suchknr == k1.getKnr()){
                System.out.println(k1.ausgebenKunde());
            }
        }
    }
    
}




Nahezu alle Operationen des Programms werden hier ausgeführt.
Ich wollte eigentlich eine Klasse suche, die die suchen Kunde aufnimmt, aber dabei hieß es "Klasse Iterator not found". Warum?



public class Kunde {
    
    private String kunde;
    private String name;
    private int kundennummer;
    
    public Kunde() {
    }
    
    public Kunde(String name,int kundennummer) { 
        this.kundennummer=kundennummer;
        this.name=name;
    }
        
    public int getKnr() {
        return kundennummer;
    }

    public String getName(){
        return name;
    }
    
    public String ausgebenKunde() {
        kunde=getName()+"\t\t"+getKnr();
        return kunde; 
    }
    
}






public class Selektor {
    private boolean uebergabe;
    private boolean sternMatchV;
    private boolean sternMatchH;
    private boolean sternMatch;
    private boolean frageMatch;
    
    Kunde k1 = new Kunde();
    KundenContainer kc=new KundenContainer();
    
    /** Creates a new instance of Selektor */
    public Selektor() {
    }
    
    //    public void setEingabe(String eingabe, Kunde einKunde){
    //        this.eingabe=eingabe;
    //        this.einKunde=einKunde;
    //    }
    
    public void sucheName() {
        
        String eingabe=IOTools.readString("Suche: ");
        
        for(Iterator iter = kc.v.iterator(); iter.hasNext();){
            Kunde k1=(Kunde)iter.next();
            
            String name = k1.getName();
            int nr = k1.getKnr();
            String ausgabe2="";
            
            //Durchlauf eines einzelnen Elements und Längenbestimmung
            for(int x=0;x<eingabe.length();x++ ){
                char zwischen[] = {name.charAt(x)};
                String ausgabe = new String(zwischen);
                
                //Abfang falls Eingabe länger als vorhandene Kundennamenlänge
                if(eingabe.length()>name.length()){
                    break;
                }
                
                // falls in der Eingabe ein Fragezeichen vorhanden ist:
                if(eingabe.charAt(x)=='?'){
                    ausgabe2 = ausgabe2+ausgabe;
                }
                if (eingabe.charAt(x)==name.charAt(x)) {
                    ausgabe2 = ausgabe2+ausgabe;
                }
                if(ausgabe2.matches(name)){
                    frageMatch = true;
                }else{
                    frageMatch = false;
                }
            }
            
            
            //falls in der Eingabe ein Stern vorhanden ist:
            try{
                if(eingabe.substring(0,eingabe.indexOf('*')).matches(name.substring(0,eingabe.indexOf('*')))){
                    sternMatchV = true;
                }else{
                    sternMatchV = false;
                }
                if(eingabe.substring(eingabe.indexOf('*')+1,eingabe.length()).matches(name.substring(name.length()-(eingabe.length()-eingabe.indexOf('*')-1), name.length()))){
                    sternMatchH = true;
                }else{
                    sternMatchH = false;
                }
                
                // Vergleich, ob vorderer und hinterer Teil mit der Eingabe übereinstimmt
                if(sternMatchV && sternMatchH){
                    sternMatch=true;
                }else{
                    sternMatch=false;
                }
            }
            catch(Exception e){
            }
            
            if(sternMatch || frageMatch){
                uebergabe=true;
            }else{
                uebergabe=false;
            }
        }
    }
    public void getUebergabe(){
        if(uebergabe==true){
          System.out.println("gfunden!"); 
        }
        else 
        {
            System.out.println("nada!");            
        }
        
        //return uebergabe;
    }
    
    
}




Hier kann man nach Namen in der DB/Vector suchen!
ha?s findet z.B. hans, haus
ha* findet haller, haber, hasselbacher, halaaaaaaaaa etc....
Leider bekomm ich es nicht zum laufen, obwohl die Syntax stimmen müsste. Hab ich aus nem anderen Programm reinkopiert. Sind wohl manche Dinge einfach falsch instanziiert, glaub ich.

Kann mir jemand dabei helfen, die 4 Klassen zu sortieren und lauffähig zu machen?
Die Inhalte (und Vector) ist / sind vorgeschrieben. Es geht nur darum, dass man das Programm lauffähig macht.

Hab Druck, da ich es bis 22. fertighaben muss und wär euch daher dankbar, wenn sich jemand die Mühe macht!!
0

Anzeige



#2 Mitglied ist offline   Rika 

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

geschrieben 14. Juli 2005 - 20:06

1. Warum zum Teufel versucht du die Funktionalität der Java-Standardklasse für RegExps neu zu implementieren? Erst recht, wenn du es nicht hinbekommst? Ein guter Softwareentwickler greift nach Möglichkeit auf bereits vorhandene und ausführlich getestete Software-Stücke zurück, anstatt alles neu zu schreiben. Lies dir mal http://java.sun.com/j2se/1.5.0/docs/api/ja...ge-summary.html durch.
Insbesondere bei http://java.sun.com/j2se/1.5.0/docs/api/ja...ex/Pattern.html siehst, wie du es mit drei kurzen Zeilen Code hinbekommst. Der Selektor ist überflüssig.

2. Ist es stringenter Zwang von außen oder warum schreibst du Java 1.4-Legacy-Code mit alten Konstrukten, Typen, etc.? Es ist nix typisiert, du iterierst manuell, keine statischen Imports, Vector ist veraltet und langsam,...

3. Davon abgesehen sind da ganz typische Fehler drin. Main wirft eine generische Exception, Exceptions werden nicht deklarativ propagiert, NullPointer sind ein Problem, Logging mit System.out.println ist nicht sonderlich robust (Tipp: Log4J existiert), Modifier fehlen, Variablen haben zu breiten Scope, getter und setter statt finalen Variablen für Utility-Klassen, ...

4. Wenn irgendwelche Klassen zu fehlen scheinen, dann musst sie möglicherweise _importieren_. Iterator liegt direkt unter java.util.

5. Sowieso, du brauchst viele der Sachen gar nicht. Kunden haben einfach einen Namen, ihr Index in der Liste ist ihre Kundennummer. Die ganze Kunde-Klasse fällt damit komplett weg, da es eh nur Strings sind.

6. Die Methoden sind gar so kurz, man kann sie komplett inlinen.

Also dementsprechend trivial kann man das alles programmieren:

public final class Kundenverwaltung {
   
   public Kundenverwaltung() {
   }
   
   public final static void main(String[] args)  {
       
     KundenContainer kc=new KundenContainer();
     kc.auswahl();
}    

public class KundenContainer {
   
   private final static List<String> l=new ArrayList<String>();
  
   public KundenContainer() {
   }
   
   public static void auswahl() {
       System.out.println("Kundenverwaltung");
       System.out.println("Was wollen sie tun?");
       
       do {
           int ein=IOTools.readInteger("(1) Kunde anlegen, (2) Kunde nach Knr suchen, (3) Kunde nach Name suchen (4) bisheriger Kundenstamm, () Abbruch\n");
           
           switch(ein){
               case 1: 
                   String name=IOTools.readString("Wie heißt der Kunde? ");
                   l.add(name);
               break;
               
               case 2:
                   int suchknr=IOTools.readInteger("Welche Kundennummer wollen sie suchen? ");
                   String k;
                   try {
                     k = l.get(int);
                   } catch (IndexOutOfBoundsException e) { /*do something*/ }
                   if (k != null) ausgeben(i);
               break;
               
               case 3:
                   String eingabe=IOTools.readString("Suche: ");
                   Pattern p = Pattern.compile(eingabe);
                   boolean found;
                   for (int i=0; i < l.size(); i++) {
                      String k = l.get(i);
                      Matcher m = p.matcher(k);
                      if (m.matches()) {
                        ausgeben(i);
                        found = true;
                      }
   	 }
                    if (!found) System.out.println("Nicht gefunden!");
               break;
               
               case 4:
                   for(int i=0; i<l.size; i++) ausgeben(i);
               break;
               
               default:
                   System.out.println("Programmende erwünscht! "); //alles andere: Abbruch
                   break;
           }
       } while(ein<5 && ein>0);
       
   }
   
   private final static void ausgeben(final int i) {
     System.out.println(l.get(i)+"\t\t"+i);
   }

}


Man könnte statt der List<String> auch eine Map<Integer,String> verwenden, damit die Iteratoren schöner aussehen, aber das ist unnötige Performance-Vergeudung.

Dieser Beitrag wurde von Rika bearbeitet: 14. Juli 2005 - 20:12

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

#3 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 14. Juli 2005 - 22:20

Uff, also ich bin gerade mal in den Anfängen und hab dementsprechend sehr wenig von deinem Post verstanden.

Das Programm sieht so gut aus, aber ich denke, es ist für den Prof etwas auffällig, wenn sowas kommt.

Was alles veraltet ist versteh ich net, vektor mussten wir z.b. nehmen.

----------------------------------------------

mir ist nur vorhin aufgefallen, dass ich es eh an ne access-db anbinden soll.

soll ich weiterhin mit dem vektor verfahren oder soll ich einfach alle einzeln in die db kloppen? ich würd zu zweiterem gerade tendieren.

wie kann ich denn die connection zu der datei herstellen?
dachte eigentlich, dass es passen müsste, aber es heißt immer, dass ich weder treiber geladen hab und datenquelle auch net bekannt ist.

die datei heißt verwaltung.mdb und darin gibt es ne tabelle kunden, auf die ich zugreifen bzw. in die ich inserten will via
INSERT INTO kunden VALUES (?,?,?) (es wären 11 Spalten, aber das is ja net der Grund, oder?)

oder müsste hinter kunden noch .... kunden (kundennummer, name, straße, telefon)

Krieg das net hin und das is noch n größeres Prob als die Suche.
Die Suche müsste halt dann auf DB angepasst werden. Was ändert sich dann?

Und danke soweit für eure Mühe!
0

#4 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 15. Juli 2005 - 06:18

Zitat

wie kann ich denn die connection zu der datei herstellen?
dachte eigentlich, dass es passen müsste, aber es heißt immer, dass ich weder treiber geladen hab und datenquelle auch net bekannt ist.

die datei heißt verwaltung.mdb und darin gibt es ne tabelle kunden, auf die ich zugreifen bzw. in die ich inserten will via
INSERT INTO kunden VALUES (?,?,?) (es wären 11 Spalten, aber das is ja net der Grund, oder?)

oder müsste hinter kunden noch .... kunden (kundennummer, name, straße, telefon)

Du kannst keine "Verbindung" zu einer lokalen Datei herstellen - du kannst sie lediglich öffnen, in ihr lesen und schreiben (naja, sofern das Betriebssystem dir das erlaubt).
Wenn du mit einer Datenbank arbeiten möchtest, musst du entweder eine Datenbank separat laufen lassen und dich mit ihr verbinden (zB via IP oder UnixSockets) oder eine Datenbankbibliothek direkt in das Programm einbinden, die die Datei öffnen und verwalten kann.

Dein SQL Statement versteh ich auch nicht ganz ... wenn du 11 Spalten hast, dann musst du diese auch alle in den VALUES angeben - oder vorher angeben, welche Spalten die übergebenen Werte in dieser Reihenfolge beinhalten sollen.

Ich würd dir wärmstens Standartliteratur zu Java und SQL empfehlen. Da du von deinem Prof redest, nehm ich mal an, du studierst an einer Uni oder FH. Da müsste es kein Problem sein, entsprechende Materialien zu besorgen - oft auch für wenig Geld in Druckform. Frag einfach mal bei den entsprechenden Abteilungen oder deinem Prof nach.
Gibts für diese Vorlesung eigentlich keinen Tutor?

Grüße,
mo
I'm mó. mo's good twin.
0

#5 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 15. Juli 2005 - 11:34

1. der Prof ist der schlechteste Ansprechpartner in dieser Situation, da genau der uns in diese Lage manövriert hat und es selbst nicht erklären konnte.

2. ich hab hier Literatur und daher versteh ich ja auch nicht, weshalb es nicht geht und wende mich hierher.

entweder hab ich den treiber falsch geladen, die url falsch angegeben oder es stimmt bei der anbindung was nicht mit dem insert....

ich hab ne verwaltung.mdb, diese hat z.b. ne kunden tabelle, die eine spalte firma, adresse beinhaltet.

wie wären denn diese 2, 3 zeilen, wenn hierfür nun ich selbst kunden bzw. firmen und adressen schreiben sollte

Ich weiß, dass die Frage eigentlich net so aufwendig ist, habs auch hier im Buch stehen und ist auch vom Verständnis eigentlich kein Problem. Aber es funktioniert halt irgendwo nicht und je mehr ich draufstier, desto weniger find ich den Fehler.
0

#6 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 15. Juli 2005 - 14:32

1. *seufz*

Zitat

ich hab hier Literatur und daher versteh ich ja auch nicht

:thumbup:
ich nehm mal an, du meinstes, dass du es trotzdem nicht verstehst.

treiber? url? hö? davon steht aber nichts in deinem quellcode. wie kommst du darauf nun auf einmal? mussu schon vorher erklären :rofl:
wenn du nicht weist, wo (im code) es scheitert, nehm ich mal gaaanz schwer an, dass du keine exceptions abfängst... das ist nicht gut. fang an allen stellen, wo fehler du fehler vermutest die exceptions ab und werte sie aus. was für exceptions geworfen werden können, verrät dir die api-doku.
I'm mó. mo's good twin.
0

#7 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 17. Juli 2005 - 17:50

ähm also mit dem satz: den hätteste nur weiterlesen müssen, der steht schon in richtig gutem deutsch oben. :)

ähm ja, ich muss es an ne datenbank anbinden, stand das net oben?
werd diese selektorklasse wohl umgehen und es daher einfach mit select abfragen machen. Das funzt doch auch mit dem * und dem ? oder?
Wie sag ich das in SQL? Oder kennt SQL gar * und ? als das an, wofür ichs brauch?

-------------

Hmm ich spiel gerade mit nem anderen Gedanken, da mir die Sache mit dem wieder in Vektor einlesen net so passt.
Ist das net bißl doof, wenn man dann 8 Vektoren hat?

Noch paar allgemeine Dinge:
hab ja 8 Datentypen (Kunde, Lieferant)
Soll ich die statements bzw. die con nun in jeder klasse neu definieren? muss ich das evtl sogar? Oder wie umgehe ich das?
Oder reichts aus, wenn ich es einmal in der main-class als protected deklarier?
ist halt sonst immer ne blöde doppelt und dreifach deklaration.

Ich denke fast, ich komme vorerst zurecht, wenn ich das Meiste der Abfragen und so über SQL mache.
Evtl habt ihr noch paar IDeen:
ich hab bisher Kunden einlesen, ausgeben, suchen (nach KNR, Name etc..), löschen, ändern! Hat noch einer ne Idee? Irgendn kreativer Kopp?
(hoff es versteht keiner falsch: wer sich nicht meinen Kopf zerbrechen will, muss nichts sagen *g*) Ich überleg grad, was ich noch für Funktionen einbauen könnte!? Brauch ich ein speichern oder sichert der den Datensatz eh immer sofort in der DB? Sonst wär evtl kewl, wenn das wer grob anschneiden könnte.

Danke schonmal Dirk für alles!!! Jetzt schau ich heut Nacht obs geht und leg dann mal gewaltig los bis zum nächsten Problem!
0

#8 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 17. Juli 2005 - 21:48

Wenn du willst, dass wir dir das Programm schreiben, gib uns die komplette Problemstellung, ausführliche Informationen dazu, welche APIs verwendet werden dürfen, welche® Datenbankserver und bis wann du das alles brauchst. Wenn ich Zeit finde, programmier ich's.
Was du nicht machen kannst, ist bei jedem noch so kleinen Stolperstein um Hilfe zu schrein. Es gibt kostenlose Java Bücher im Netz und mehr wie genug Informationen zum Thema in Form von Tutorials.

Ich kann dir nur empfehlen, dich mit objektorientierter Programmierung (oop) auseinanderzusetzen, denn darum gehts in Java. zB unter folgendem Link gibts ne ordentliche Erklärung zu oop in Java ;)
http://www.informatik.uni-ulm.de/ki/Edu/Vo...Konzepte-II.pdf

So, nun versuch ich mal deine Fragen zu beantworten, besonders leicht machst du es uns aber nicht ... :)

1. Zu:

Zitat

werd diese selektorklasse wohl umgehen und es daher einfach mit select abfragen machen. Das funzt doch auch mit dem * und dem ? oder?
Wie sag ich das in SQL? Oder kennt SQL gar * und ? als das an, wofür ichs brauch?

Wie? Versteh dein Problem nicht ... Schau dir einfach mal die Syntax von select an:
http://dev.mysql.com.../de/select.html

2. Zu:

Zitat

Soll ich die statements bzw. die con nun in jeder klasse neu definieren? muss ich das evtl sogar? Oder wie umgehe ich das?
Oder reichts aus, wenn ich es einmal in der main-class als protected deklarier?
ist halt sonst immer ne blöde doppelt und dreifach deklaration.

Wenn du von der Main-Klasse vererbst, reicht das. Warum willst du die Daten denn überhaupt lokal halten, wenn du sie sowieso jeder Zeit von der Datenbank abrufen und dort ändern kannst?

3. Zu:

Zitat

hab ja 8 Datentypen (Kunde, Lieferant)

Wenn dann hast du Klassen, sei vorsichtig mit den Begriffen. Im übertragenen Sinne sind das auch Datentypen, aber ... ja nicht so ganz ;).

4. Zu

Zitat

(hoff es versteht keiner falsch: wer sich nicht meinen Kopf zerbrechen will, muss nichts sagen *g*) Ich überleg grad, was ich noch für Funktionen einbauen könnte!? Brauch ich ein speichern oder sichert der den Datensatz eh immer sofort in der DB? Sonst wär evtl kewl, wenn das wer grob anschneiden könnte.

*seufz* Der liebe Gott sichert den Datensatz, immer sofort. Wenn man von Client-Server-Anwendungen spricht, ist es ziemlich wichtig, sich genau auszudrücken. Für deine Zwecke kannst du davon ausgehen, dass ein Datensatz nach erfolgreichem absetzen deines Statements sofort geändert und gesichert wurde. In der Praxis sieht das bei stark belasteten, bei verteilten und bei Datenbanken, die aus Geschwindigkeitsgründen im Speicher gehalten werden, etwas anders aus.
I'm mó. mo's good twin.
0

#9 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 18. Juli 2005 - 13:11

Manches versteh ich nicht ganz.
Sicher bin ich kein Experte, aber ich bin auf dem Gebiet sicherr nicht der dümmste. Mit nem halben Jahr Java Erfahrung ist evtl einfach nicht mehr drin. v.a. wenn man sichs selbst reinhauen muss im stressigsten Semester meines bisherigen Studiums.

Ich bekomm heute Mittag kurz Hilfe von nem Kumpel und der korrigiert meine Datenbankanbindung, da bin ich echt ratlos derzeit. Ansonsten müsste eigentlich alles klappen. Ist halt ne Schreibarbeit bzw. Kopier und Anpassungsarbeit, wenn man 8 Klassen hat und alle ham die ähnlichen Methoden suchen, ändern, einlesen, ausgeben...

Interessant wäre für mich noch die GUI gegen später. Alles nicht so schwer, aber der Zeitdruck ist Grund meiner Panik. Wenn die Anbindung heute Nachmittag klappt, hab ich heute Abend sicher die Verwaltung der Kunden, Lieferanten etc. fertig!

Haste mir evtl deine Mailaddy, dann würd ich dir mal das Programm per Mail schicken.
Ganz programmieren musste es ja nicht, ich denke, dass ich das schon so hinbekomme. Weiß noch nicht ganz, ob ich mit der GUI Probleme bekomme, da ich nie mit JEditorPane, Jtable und ähnlichem bisher was gemacht habe.

Dank dir soweit mal.
0

#10 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 18. Juli 2005 - 13:15

Zitat (mubbelbubbel82: 18.07.2005, 14:11)

Ist halt ne Schreibarbeit bzw. Kopier und Anpassungsarbeit, wenn man 8 Klassen hat und alle ham die ähnlichen Methoden suchen, ändern, einlesen, ausgeben...

Oberklasse und davon erben lassen?

Zitat

Weiß noch nicht ganz, ob ich mit der GUI Probleme bekomme, da ich nie mit JEditorPane, Jtable und ähnlichem bisher was gemacht habe.


GUI würde ich dir raten mit Eclipse und Visual Editor zu machen.
Sonst ist es wirklich ne sche** Arbeit das alles per Hand zu machen.
0

#11 Mitglied ist offline   Rika 

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

geschrieben 18. Juli 2005 - 21:55

Zitat

Das Programm sieht so gut aus, aber ich denke, es ist für den Prof etwas auffällig, wenn sowas kommt.

Bei mir hat auch keiner geschimpft, weil ich überdurchschnittlich viel von Java verstanden haben.

Zitat

Was alles veraltet ist versteh ich net, vektor mussten wir z.b. nehmen.

Vector implementiert seit der JRE 1.4 das Interface List und ist damit extern identisch zu jeder anderen List. ArrayList wiederum wurde etwas optimiert und implementiert ebenfalls List, ist allerdings speichersparender und performanter als Vektor. Wenn Vector nicht noch so stark in AWT verwendet werden würde, hätten es die Java-Leute schon längst als Deprecated deklariert. Es gibt, wenn nicht explizit die Notwendigkeit besteht, keinen Grund, noch Vector zu verwenden.
Mal ganz davon abgesehen wird in dem Code, wie ich ihn oben präsentierte, die Liste eh als Liste angesprochen, somit kannst du einfach im Konstruktor die ArrayList durch Vector ersetzen.

Zitat

mir ist nur vorhin aufgefallen, dass ich es eh an ne access-db anbinden soll.
wie kann ich denn die connection zu der datei herstellen?

Über JDBC.

import java.sql.*
Connection connection = DriverManager.getConnection("jdbc:file:C:\\datenbank.db");


Zitat

soll ich weiterhin mit dem vektor verfahren oder soll ich einfach alle einzeln in die db kloppen? ich würd zu zweiterem gerade tendieren.

Wenn du nicht gerade ein Spezi bist, solltest du die Werte lieber einzeln schreiben.

String statement = "INSERT INTO kunden VALUES (?,?,?)";
 PreparedStatement preparedStatement = connection.prepareStatement(statement);
for (int i=0; i<KundenDB.size(); i++) {
  preparedStatement.setInt(1, i);
  preparedStatement.setString(2, KundenDB.get(i));
  ...
  preparedStatement.executeUpdate();
}


Zitat

Die Suche müsste halt dann auf DB angepasst werden. Was ändert sich dann?

Indem du es trivialerweise in SQL-Queries umwandelst.
"SELECT * FROM kunden WHERE kundennummer=?"


Zitat

Du kannst keine "Verbindung" zu einer lokalen Datei herstellen - du kannst sie lediglich öffnen, in ihr lesen und schreiben (naja, sofern das Betriebssystem dir das erlaubt).

Warum nicht? Herrje, JDBC bringt sogar einen vollständigen Treiber für eine XML-Datenbank mit. Ansonsten muss natürlich das jeweilige DBMS installiert sein, JDBC verwaltet dann nur den Zugriff darauf.
Oder man schreibt halt gleich selbst in 'ne XML-Datei.

Zitat

entweder hab ich den treiber falsch geladen, die url falsch angegeben oder es stimmt bei der anbindung was nicht mit dem insert....

Und die SQLException wertest du nicht aus?

Zitat

Das funzt doch auch mit dem * und dem ? oder?
Wie sag ich das in SQL? Oder kennt SQL gar * und ? als das an, wofür ichs brauch?

SELECT * FROM bla WHERE Kunde LIKE "^[a-zA-Z].+\s*"

Zitat

Noch paar allgemeine Dinge:
hab ja 8 Datentypen (Kunde, Lieferant)
Soll ich die statements bzw. die con nun in jeder klasse neu definieren? muss ich das evtl sogar? Oder wie umgehe ich das?
Oder reichts aus, wenn ich es einmal in der main-class als protected deklarier?
ist halt sonst immer ne blöde doppelt und dreifach deklaration.

List<String>[] alleDaten = new List<String>[] {Kunden, Lieferant, ...};

Zitat

Für deine Zwecke kannst du davon ausgehen, dass ein Datensatz nach erfolgreichem absetzen deines Statements sofort geändert und gesichert wurde. In der Praxis sieht das bei stark belasteten, bei verteilten und bei Datenbanken, die aus Geschwindigkeitsgründen im Speicher gehalten werden, etwas anders aus.

Unsinn. Wenn ein Erfolgsmeldung zurückkommt, sind die Daten auf jeden Fall physisch geschrieben, vorher bekommst du kein OK zurückgeliefert. Denk an das D in ACID.

Dieser Beitrag wurde von Rika bearbeitet: 19. Juli 2005 - 12:13

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

#12 Mitglied ist offline   Lofote 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.526
  • Beigetreten: 24. August 04
  • Reputation: 1

geschrieben 18. Juli 2005 - 22:24

Zitat

QUOTE
Für deine Zwecke kannst du davon ausgehen, dass ein Datensatz nach erfolgreichem absetzen deines Statements sofort geändert und gesichert wurde. In der Praxis sieht das bei stark belasteten, bei verteilten und bei Datenbanken, die aus Geschwindigkeitsgründen im Speicher gehalten werden, etwas anders aus.

Unsinn. Wenn ein Erfolgsmeldung zurückkommt, sind die Daten auf jeden Fall physisch geschrieben, vorher bekommst du kein OK zurückgeliefert. Denk an das D in ACID.


Richtig. Es mag zwar noch nicht in der Datenbank selber gespeichert sein, aber im Transaktionslog (was auch auf der Platte ist) auf jeden Fall, aus dem bei nem Absturz kurz danach der Datensatz dann auch nach nem Neustart entgültig geschrieben werden kann (was alles komplett transparent für den User passiert).

Bei dem XML-Gelumpe gibts natürlich kein Transaktionslog, da ists dann wirklich an der finalen Stelle bevor dein DB-Aufruf abgeschlossen ist. XML ist für komplexere Daten, die sich häufig ändern, sowieso absolut nicht als Datenbank geeignet, den das Wort Performance ist da nicht mehr existent.
0

#13 Mitglied ist offline   Rika 

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

geschrieben 19. Juli 2005 - 00:11

Zitat

Bei dem XML-Gelumpe gibts natürlich kein Transaktionslog, da ists dann wirklich an der finalen Stelle bevor dein DB-Aufruf abgeschlossen ist.

Jein. XML Serialization arbeitet mit Transaktionslocks, aber das will man nicht wirklich.

Zitat

XML ist für komplexere Daten, die sich häufig ändern, sowieso absolut nicht als Datenbank geeignet, den das Wort Performance ist da nicht mehr existent.

Solange du den DOM-Tree im RAM modifizieren kannst, ist es sehr performant. Für kleine Datensätze sowieso, da ist es zudem auch einfacher.
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

#14 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 - 07:21

Zitat (Rika: 18.07.2005, 22:55)

Über JDBC.


Jein...soweit ich weiß braucht man dafür extra eine JDBC-ODBC Brigde.
Aber ist auch im JDK dabei...
http://www.javaworld.com/javaworld/javaqa/...922-access.html
0

#15 Mitglied ist offline   mubbelbubbel82 

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

geschrieben 19. Juli 2005 - 12:34

Dank dir Rika, riesige Hilfe. :-)
Evtl kann der Mod auch bißerls aufräumen hier, ich weiß, dass ich sehr konfus gepostet habe. Sorry!!!
Neuer Versuch:

Aufgabe: System zur Kunden- und Auftragsverwaltung erstellen. Soll beinhalten: einlesen, ausgeben, suchen, ändern, löschen von Datensätzen.
Dazu hab ich ne Access.Datei mit 6 Tabellen und paar Beispieldatensätzen vorliegen. (Kunde hat z.B. 11 Spalten/Attribute) Viel Schreibarbeit ist angesagt! Mehr Info ist nicht gegeben. Was wollt ihr wissen?

    public static void main(String[] args) throws Exception{
             
        try { 
        Datenbankanbindung db1=new Datenbankanbindung();
        Kunden k1=new Kunden();
        Lieferanten l1=new Lieferanten();
       
        System.out.println("Datenbanksystem der Firma PB Enterprises ");
        System.out.println("In welchemBereich wollen sie arbeiten? ");
        System.out.println("(1) Kunden ");
        System.out.println("(2) Lieferanten ");
        System.out.println("(3) Personal ");
        System.out.println("(4) Artikel ");
        System.out.println("(5) Kategorien ");
        System.out.println("(6) Versandfirmen ");
       
        int auswahl = IOTools.readInteger();       
        switch(auswahl){
            case 1: k1.auswahlKunde(); 
            break;          
            case 2: l1.auswahlLieferant();  
            break;
        }     
        }
        catch (SQLException e){
            System.out.println("Fehler! "+e.getMessage());          
        }
        catch (ClassNotFoundException e){
            System.out.println("Klasse nicht gefunden!"+e.getMessage());
        }      
        }
    }


public class Kunden {
   
    protected String sql;
    //KundenverwaltungMain kvwm=new KundenverwaltungMain();
[COLOR="Blue"]    protected PreparedStatement stmt;
    protected ResultSet rs;
    protected Connection con; [/COLOR]

    public Kunden() {
    } 
   
    public void auswahlKunde() throws Exception{ 
       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) 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
            break;                    
            case 4: ks.suchenKunde(); //nach Name
            break;          
            //case 5: kvwm.main(); //home
            //break;          
            case 6: ändernKunde();
            break;         
            case 7: löschenKunde();
            break;         
            default: System.out.println("Programm wurde abgebrochen!");
            break;
       }
        }while(kundeauswahl<1 && kundeauswahl>4);       
    }
   
    public void anlegenKunde() throws SQLException{
       
        Datenbankanbindung db1=new Datenbankanbindung();
[COLOR="Red"]PreparedStatement stmt=db1.con.prepareStatement("INSERT INTO Kunden VALUES (?,?,?,?,?,?,?,?,?,?,?)");[/COLOR]
        String name=IOTools.readString("Wie heißt der Kunde? ");
        String kundencode=IOTools.readString("Welche Kundennummer soll dieser haben? "); 
              
        stmt.setString(1,"kundencode"); //Kunden-Code
        stmt.setString(2,"nameli"); //Firma
        stmt.setString(3,"test");
        stmt.setString(4,"name");
        stmt.setString(5,"name");
        stmt.setString(6,"name");
        stmt.setString(7,"name");
        stmt.setString(8,"name");
        stmt.setString(9,"name");
        stmt.setString(10,"name");
        stmt.setString(11,"name");       
        stmt.executeUpdate();     
       
        stmt.close();
        System.out.println("Kunde erfolgreich angelegt!");
    }
   
    public void ausgebenKunde() throws SQLException{       
        System.out.println("kommt noch");
        rs=stmt.executeQuery("SELECT Firma,Kunden-Code FROM Kunden");
       
        while(rs.next()){
            System.out.println(rs.getString("Firma"));
        }
        stmt.close();
    }
   
    public void ändernKunde(){
      sql="UPDATE Kunden SET Firma='blub' WHERE Code=1"; 
    }
   
    public void löschenKunde(){
        try{
       String id=IOTools.readString("Welche ID wollen sie löschen? ");
      
       Kundensuche ks=new Kundensuche();
       while(rs.next()){
           String kundencode=rs.getString("Kunden-Code"); //1,2?
           String firma=rs.getString("Firma");
       }

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


Die rot markierte Textstelle ist mein eines Problem:
Ich 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?
(Info: Kunden ist ne Tabelle in meiner DB, die Anbindung funktioniert, diese Tabelle hat 11 Spalten). Selbige Exception hab ich auch beim Ausgeben der Kunden und den anderen Funktionen.

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? Instanz anlegen, oder? Bemerke: es gibt noch Artikel, Lieferanten etc.. da würd ich das ja immer wieder deklarieren, was eigentlich net stimmen kann, oder?

Diese 2 Fragen mal vorab. Oder müsst ihr noch mehr wissen? Danke schonmal!
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

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