Beschreibung Modul „Database“

Team10
Verfügbare Informationen zu "Beschreibung Modul „Database“"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Carsten - daniel - michapolda - seilz@U-H-D-E - Joker - Benny
  • Forum: Team10
  • Forenbeschreibung: --* seekcat-Projekt-Forum *--
  • aus dem Unterforum: Implementierung
  • Antworten: 15
  • Forum gestartet am: Dienstag 28.11.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Beschreibung Modul „Database“
  • Letzte Antwort: vor 15 Jahren, 10 Monaten, 13 Tagen, 3 Stunden, 6 Minuten
  • Alle Beiträge und Antworten zu "Beschreibung Modul „Database“"

    Re: Beschreibung Modul „Database“

    Carsten - 14.04.2007, 19:51

    Beschreibung Modul „Database“
    So ich hab mal was zusammengekloppt:

    Insert(String Tabelle, String[][] SpalteWerte)
    Dieser Methode muss als erstes der Name einer Tabelle übergeben werden. Zweiter Parameter ist ein zweidimensionales String Array. Die erste Dimension enthält jeweils den Spaltennamen, die zweite den Wert der eingetragen werden soll.

    Delete(String Tabelle, String[][] Where)
    Auch hier wird als erstes der Name der Tabelle genannt aus der Zeilen gelöscht werden sollen. Zweiter Parameter ist ein zweidimensionales String Array. Die erste Dimension enthält jeweils den Spaltennamen, die zweite den Wert der eingetragen werden soll.

    Update (String Tabelle, String[][] SpalteWerte, String[][] Where)
    Erster Parameter wie vor, zweiter Parameter ist ein zweidimensionales String Array. Die erste Dimension enthält jeweils den Spaltennamen, die zweite den Wert der eingetragen werden soll. Anschließend wird ein ebenfalls zweidimensionales Array erwartet das an erster Stelle den Spaltennamen und an zweiter den Wert enthält für die Where Clause.

    Ich denke mal die Funktionen müssten soweit alles abdecken was auftreten könnte oder vermisst jemand was? Jetzt zum schwierigeren Teil der Select Funktion die ja entsprechend Ergebnisse zurückliefern soll. Bei obengenannten Geschichten wird wohl ein Integer Wert zurückgegeben 0 für in Ordnung ansonsten die Nummer des SQL Fehlers!



    Select (String Tabelle, String[] Felder, String[][]Where, String[][] OrderByDESC, Int Offset, Int Limit) return String[]
    So dieser Methode müsst ihr als erstes wie immer den Namen der Tabelle übergeben, als zweites die Felder die ausgelesen werden sollen. Dann folgt analog zu oben die Where Clause mit Feldname, Wert der geprüft werden soll. Hier habe ich nun die Möglichkeit eingebaut die Werte nach Feldern zu sortieren. Das zweidimensionale Array enthält als erstes das Feld zum Ordnen und als zweites einen noch festzulegenden Parameter für aufsteigend / absteigend sortieren.
    Zu Limit Offset hab ich mal aus ner MySQL Anleitung kopiert: Der Ausdruck LIMIT kann benutzt werden, um die Zahl der Reihen bei der Ausgabe zu begrenzen. LIMIT braucht zwei Zahlen als Argumente. Die erste Zahl bestimmt den Offset der ersten Reihe, die zweite Zahl die Zahl der Ausgaben. Der Offset beginnt mit 0, nicht wie sonst alles mit 1:.

    Offset ist dann wichtig wenn wir z.b. auf einer Seite nur 20 Seiten anzeigen wollen und dann soll ja die Abfrage nicht ewig laufen sondern nur auf die ersten 20. Wird dann z.b. auf die nächste Seite gewechselt (also ergebnis 21 – 40) müsst ihr nur den Offset anpassen.

    Da diese Funktion möglichst für alle Abfragen funktionieren muss (also egal ob ihr 1 oder 100 Felder abfragt) ist der Rückgabetyp ein Stringarray. Dies soll dann folgendermaßen aufgebaut sein:
    String[0] erstes Feld das abgefragt wurde
    String[1] zweites Feld das abgefragt wurde usw.
    Hier mal ein Beispiel für eine Abfrage über drei Felder mit mehreren Zeilen:
    Ausgangstabelle
    Feld 1 2 3
    Spalte 1 A B C
    Spalte 2 D E F
    Die Funktion würde jetzt ein Array mit folgendem Inhalt zurückliefern: A,B,C,D,E,F

    Ich hab mir ziemlich viele Gedanken dazu gemacht aber mir ist nichts dümmeres eingefallen, ich kann ja nicht 20 Select Funktionen schreiben die sich alle nur durch die Anzahl abgefragter Felder unterscheiden. Oder hat jemand eine bessere Idee?
    Wenn ihr die Ergebnisse bekommt müsstet ihr einfach nur mit Mod AnzahlAbgefragterFelder arbeiten um die Datensätze zu unterscheiden.

    So wenn jetzt noch einer Fragen hat der soll die Fresse ja halten :lol:



    Re: Beschreibung Modul „Database“

    daniel - 15.04.2007, 13:03


    also mir fällt nichts dazu ein, das ist soviel kram wo ich mich nicht auskenne ^^



    Re: Beschreibung Modul „Database“

    michapolda - 15.04.2007, 13:26


    habe mir auch mal ein paar gedanken gemacht und versucht das nach richies beispiel zu machen.

    die schnittstelle sollte noch folgende methoden zur verfügung stellen um auf die datenbank zugreifen zu können:

    public boolean trageUserEin (String username, String Passwort, String email)
    return erfolgreich

    public boolean istPasswortKorrekt (String username, String Passwort)
    return korrekt

    ob der user eingeloggt ist, braucht sie nicht zu können. machen wir ja über cookies.


    ok, dann viel spass!



    Re: Beschreibung Modul „Database“

    Carsten - 15.04.2007, 15:33


    public boolean trageUserEin (String username, String Passwort, String email)
    return erfolgreich =

    Insert(String Tabelle, String[][] SpalteWerte)


    public boolean istPasswortKorrekt (String username, String Passwort)
    return korrekt =

    Select (String Tabelle, String[] Felder, String[][]Where, String[][] OrderByDESC, Int Offset, Int Limit) return String[]



    Re: Beschreibung Modul „Database“

    seilz@U-H-D-E - 15.04.2007, 16:41


    fetzt!



    Re: Beschreibung Modul „Database“

    Joker - 20.04.2007, 19:33

    Nochmal was zur DB
    16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
    Keywords: SQL | Datenbank | Bild | Download | Performance | BLOB
    Antwort von Kristian Köhntopp

    Aus irgendeinem Grund scheinen viele Leute zu glauben, dass es Bilddaten adeln würde, wenn man sie in eine Datenbank stopft.

    Wenn man die Bilddaten selbst in der Datenbank ablegt, hat dies den Vorteil, dass keine broken links auftreten können, weil ja die Bilder selbst genauso wie die Links auf die Bilder aus der Datenbank erzeugt werden. Liegen die Bilddaten dagegen im Dateisystem und die Datenbank enthält nur Pfadnamen, dann ist es problemlos möglich, dass jemand die Dateien umbenennt, ohne diese Änderung in der Datenbank nachzuführen und umgekehrt. Leider ist es speziell bei MySQL so, dass keinerlei Mechanismen vorhanden sind, die die referentielle Integrität der Datenbank sicherstellen, sodass diese Sicherheit nicht wirklich gegeben ist.

    Dazu kommen noch eine Reihe von weiteren Nachteilen:

    Wenn man die Bilddaten selbst in der Datenbank speichert, dann muss man für jedes Bild in einer Webseite ein Script starten. Das bedeutet, für eine Seite wie
    index.php:

    <html>
    <body>
    <h1>Bla</h1>
    <img>
    </body>
    </html>

    muss nicht nur das Script index.php gestartet werden, um das HTML zu generieren, sondern für jedem Image-Tag auf der Seite muss ein Script sendimage.php gestartet werden, das eine Datenbankverbindung aufmacht und das Bild aus der Datenbank fischt. Wenn CGI PHP verwendet wird, ist der Overhead noch viel größer, denn hier muss für jedes Bild ein 800 kB großer PHP-Prozess erzeugt und gestartet werden.

    Legt man dagegen die Bilder als Dateien im Dateisystem ab, kann man mit der Static Page Engine des Webservers oder gar einem spezialisierten Bilder-Webserver arbeiten und ist um ca. den Faktor 10 effizienter.

    MySQL kann BLOBs (binary large objects) nicht fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB in kleinen Teilstücken aus der Datenbank zu holen oder den hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank abgelegt werden können.

    Viele Datenbanken werden sehr ineffizient, wenn vergleichsweise große BLOBs zusammen mit anderen, sehr kleinen Objekten in derselben Tabelle gespeichert werden oder wenn eine Tabellenzeile mehr als ein BLOB enthält.

    Wie man Bilder in einer MySQL-Datenbank speichert, wird im Artikel Wie kann ich Bilder in einer MySQL-Datenbank speichern? beschrieben.
    http://www.php-faq.de/q/q-mysql-blob.html



    Re: Beschreibung Modul „Database“

    Benny - 21.04.2007, 14:45


    Ähm Johannes, lies mal im "Software-Entwurf" --> ER-Modell der DB!!
    Dort haben wir schon festgelegt, dass nur der Pfad des entsprechenden
    Bildes gespeichert wird und nicht das Bild an sich!!



    Re: Beschreibung Modul „Database“

    Joker - 21.04.2007, 18:57


    ok wusst ich nimmer



    Re: Beschreibung Modul „Database“

    Carsten - 05.05.2007, 14:39


    So habe mal angefangen das ganze Ding zusammen zu zimmern und dabei ist mir aufgefallen das die Übergabe von Recordsets anstelle von Strings evtl doch besser wäre. Oder hat da jemand Einwände?


    Edit:

    Noch ein Problem, es ist teilweise notwendig abhängig vom Datentyp notwendig diesen bei Abfragen mit speziellen Zeichen zu umschließen. Ein String wird z.B. mit 'String' umschlossen. Da ich das aber im Moment noch nicht aus der Datenbank auslesen kann um welchen Datentyp in der Datenbank es sich handelt und selbst wenn es möglich wäre das ganze wohl ziemlich bremsen wird sollte sich jeder mal Gedanken dazu machen.



    Re: Beschreibung Modul „Database“

    seilz@U-H-D-E - 06.05.2007, 21:20


    Ich denke wir bekommen den ganzen Array von der Liste zurück?!
    So wie wir das verstanden haben besteht ein recordset nur aus strings... wir müssten dann also immer casten...
    da wäre der array doch sinnvoller?!
    gerade in unserem fall wäre es günstiger den array dann durchzuiterieren.



    Re: Beschreibung Modul „Database“

    Joker - 08.05.2007, 17:10


    Ich bin für die Rückgabe eines Result-sets (allein schon wegen Result (dt. Ergebnis)),biatch
    lg jo



    Re: Beschreibung Modul „Database“

    Carsten - 10.05.2007, 11:49


    Oh man die Signaturen der Methoden werden immer größer hier mal die Insert die is soweit fertig:

    public int insert(String tabelle, String[][] SpalteWerte, int[] typ)

    In Typ muss stehen 1 für String, 2 für numerische Werte und 3 für Datum


    Bei den anderen Operationen habe ich für die Where Clause noch eine Verknüpfung geplant also ob es dann heißen soll feld 1 = 1 AND/OR feld 2 = xy bzw. auch noch ob man die Zeichen aussuchen kann also = < > usw bei den Verknüpfungen



    Re: Beschreibung Modul „Database“

    Benny - 10.05.2007, 18:07


    Schon mal cool, schaffst du die DB bis mittwoch fertig zu machen, weil wir ja alle quasi drauf angewiesen sind und damit dann auch mal testen wollen!
    Daniel und ich, geben Meini am Montag den Server, die Netzwerk-Einstellungen hat Daniel schon vorgenommen.



    Re: Beschreibung Modul „Database“

    Carsten - 12.05.2007, 12:44


    Ich habe jetz insert, update und delete Anweisung fertig gemacht. Habe bastl das Ergebnis soweit geschickt ich denk mal Select macht er. Allerdings kann ich noch nicht genau sagen wie die Signaturen jetz aussehen da ich noch einige Funktionen hinzufügen möchte.



    Re: Beschreibung Modul „Database“

    Carsten - 15.05.2007, 10:44


    So DB ist soweit fertig, bene hat schon getestet und läuft. Gibt nur noch eine Sache mit dem verarbeiten von Datumswerten da müssen wir uns nochmal abstimmen.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Team10

    ER-Modell der Datenbank - gepostet von bastl am Dienstag 27.02.2007
    Wie gehts weiter? - gepostet von daniel am Donnerstag 21.06.2007
    Weihnachtsmarkt - gepostet von daniel am Montag 04.12.2006
    Layout - gepostet von Benny am Dienstag 02.01.2007



    Ähnliche Beiträge wie "Beschreibung Modul „Database“"

    angriffs beschreibung - hülser (Montag 26.02.2007)
    Beschreibung Mayrhofer - Babs (Dienstag 02.01.2007)
    Vokubalur zum Graphen Beschreibung - Vino (Freitag 20.04.2007)
    Beschreibung - conocimiento (Donnerstag 24.05.2007)
    Beschreibung - dancingflyhorn (Sonntag 24.04.2005)
    Myrkr - Beschreibung - Thorona Post (Samstag 14.04.2007)
    Räume des Commanders - Beschreibung - pantheon (Samstag 29.04.2006)
    Beschreibung - Black Hand (Montag 18.12.2006)
    Beschreibung unseres Königreiches - arthurspooner (Montag 05.02.2007)
    Beschreibung!!!! - Anonymous (Donnerstag 24.03.2005)