MySQL Shopsystem mit mysql und Java

Zweifaenger

Mitglied
Hallo zusammen,
ich bin zur Zeit dabei ein Shopsystem zu entwickeln. Bei Diesem bekommt der Administrator ein Control Panel, welches als Java Application läuft. Der Client (Webshop) wird von einem Freund programmiert, sodass ich mich damit nicht auseinander setzen muss. :toll:

Java lerne ich seit ca 1 1/2 Jahren in der Schule und mit der Funktionsweise von mysql kenne ich mich grundlegend aus.

Als Nachschlagewerke nutze ich die Bücher die ich mir aus der Bibliothek geholt habe und das Internet.

Um nicht bei jeder Frage einen neuen Thread aufmachen zu müssen, mache ich hiermit diesen auf und poste nach und nach all meine Fragen, hoffe das ist ok so.

Mit dem CP hat der Admin die Möglichkeit neue Artikel hinzuzufügen, sich seine aktuellen Artikel anzuzeigen, diese zu bearbeiten oder welche zu löschen.

Ich habe mir überlegt das CP folgendermaßen aufzubauen:

3 Pakete:
- main (Klassen: hauptklasse)
- mysql (Klassen: (verbinden,trennen)
- aufgaben (Klassen: bearbeiten,anzeigen,hinzufügen,entfernen)


Hauptklasse: nach gedrücktem Knopf richtige Aufgabe auswählen

Verbinden: Verbindung zur mysql Datenbank herstellen
Trennen: Verbindung trennen

bearbeiten: Werte in der Tabelle umändern
anzeigen: Werte aus der Tabelle auslesen
hinzufügen: neue Werte in die Tabelle eintragen
entfernen: Werte aus der Tabelle entfernen



Das Programm soll dann folgendermaßen ablaufen:
User drückt einen Knopf- > Hauptklasse wählt passende Aufgabe aus -> Aufgabe stellt Verbindung her -> Aufgabe sendet sql Code an Server -> Aufgabe packt relevante Werte in Variablen -> Aufgabe schließt die Verbindung wieder -> Hauptklasse ließt Variablen aus und stellt diese dar.

Was haltet ihr von der Möglichkeit dies so zu realisieren?


Zum Testen wie man eine Verbindung zur Datenbank herstellt, habe ich mit Hilfe von Büchern und Tutorials folgendes zusammengebaut:

Java:
package aufgaben;

import java.sql.*;

public class entfernen 
	{
	static String dBUser = "root";
	static String dBPass = "";
	static String url = "jdbc:mysql://localhost:3306/facharbeit";
	static String table = "Artikel";
	
	
	public static void main(String[] args)
	{ String lname = "Karatekid";
		try
		{
			Connection myConn = DriverManager.getConnection(url, dBUser, dBPass); 
			Statement myStmt = myConn.createStatement();
			String sql = "delete from Artikel where name = " + "'"+lname+"'" ;
			int rowsAffected = myStmt.executeUpdate(sql);
			System.out.println("rows Affected: " + rowsAffected);
			System.out.println("Delete complete!");
		}
		catch (Exception exc )
		{
			exc.printStackTrace();
		}
	
	}

Mit dieser Variante klappt auch alles, aber das ist mir ein bisschen zu viel für jede Aufgabe alles neu schreiben zu müssen.


Wenn ich das richtige sehe, stellt folgendes die Verbindung her:
Java:
Connection myConn = DriverManager.getConnection(url, dBUser, dBPass); 
			Statement myStmt = myConn.createStatement();

Könnte ich also diesen Teil in die Klasse "verbinden" verschieben? Wie kann ich dann executeUpdate oder executeQuery ausführen?



Würde mich über Hilfe freuen, und denkt dran: jeder fängt mal an 😉

Gruß Zweifaenger
 
Zuletzt bearbeitet:
Um nicht bei jeder Frage einen neuen Thread aufmachen zu müssen, mache ich hiermit diesen auf und poste nach und nach all meine Fragen, hoffe das ist ok so.

Bitte mache für spezifische Fragen jeweils einen neuen Thread auf, so das man anhand des Titels entscheiden kann ob der Inhalt für jemanden relevant ist usw.
Außerdem gibt es Leute die vielleicht ähnliche Probleme haben und wenn alles in einen Thread geschrieben wird lässt es sich schwerer finden!

3 Pakete:
- main (Klassen: hauptklasse)
- mysql (Klassen: (verbinden,trennen)
- aufgaben (Klassen: bearbeiten,anzeigen,hinzufügen,entfernen)


Hauptklasse: nach gedrücktem Knopf richtige Aufgabe auswählen

Verbinden: Verbindung zur mysql Datenbank herstellen
Trennen: Verbindung trennen

bearbeiten: Werte in der Tabelle umändern
anzeigen: Werte aus der Tabelle auslesen
hinzufügen: neue Werte in die Tabelle eintragen
entfernen: Werte aus der Tabelle entfernen

....
Was haltet ihr von der Möglichkeit dies so zu realisieren?

Ja eine Aufteilung der Klassen in unterschiedliche Pakete ist immer sinnvoll
Aber zu deinen Klassen: Eine Klasse beschreibt immer ein Objekt. Zum Beispiel: Auto, Verbindung, Artikel, Käufer, .....
Schlechte Namen für Klassen sind einerseits "Hauptklasse" und eben "Verben". Noch dazu fehlen hier in der Aufzählung die Klassen für das UI 😉

Du solltest lieber Klassen wie "Artikel", "Kunde", "Bestellung" verwenden, entsprechende DAOs um die Daten aus der DB zu lesen/ändern/löschen/einzufügen.
Also hier fehlen die Grundlagen bzw. die Erfahrung mit OPP.

Zum Testen wie man eine Verbindung zur Datenbank herstellt, habe ich mit Hilfe von Büchern und Tutorials folgendes zusammengebaut:
......
Mit dieser Variante klappt auch alles, aber das ist mir ein bisschen zu viel für jede Aufgabe alles neu schreiben zu müssen.

Stimmt deswegen wird eigentlich immer gekapselt und es gibt dann eine eigene Klasse die sich um die Kommunikation mit der

Wenn ich das richtige sehe, stellt folgendes die Verbindung her:
Java:
Connection myConn = DriverManager.getConnection(url, dBUser, dBPass); 
			Statement myStmt = myConn.createStatement();

Könnte ich also diesen Teil in die Klasse "verbinden" verschieben? Wie kann ich dann executeUpdate oder executeQuery ausführen?

Ja damit wird zwar ein Connection Objekt erstellt, aber ich glaube dir fehlt noch der Aufruf von "open()" damit die Verbindung wirklich aufgebaut wird 🙂
Ich würde lieber mit PreparedStatement arbeiten, aber die Grundlagen dazu sind eig gleich. Du erzeugst ein Statement, gibst diesem Objekt dann den SQL Befehl als String und kannst je nachdem eine der "execute..." Methoden ausführen.
 
Zuletzt bearbeitet:
Bitte mache für spezifische Fragen jeweils einen neuen Thread auf, so das man anhand des Titels entscheiden kann ob der Inhalt für jemanden relevant ist usw.
Außerdem gibt es Leute die vielleicht ähnliche Probleme haben und wenn alles in einen Thread geschrieben wird lässt es sich schwerer finden!

Alles klar werde ich dann so machen.

Ja eine Aufteilung der Klassen in unterschiedliche Pakete ist immer sinnvoll
Aber zu deinen Klassen: Eine Klasse beschreibt immer ein Objekt. Zum Beispiel: Auto, Verbindung, Artikel, Käufer, .....
Schlechte Namen für Klassen sind einerseits "Hauptklasse" und eben "Verben". Noch dazu fehlen hier in der Aufzählung die Klassen für das UI 😉

Du solltest lieber Klassen wie "Artikel", "Kunde", "Bestellung" verwenden, entsprechende DAOs um die Daten aus der DB zu lesen/ändern/löschen/einzufügen.
Also hier fehlen die Grundlagen bzw. die Erfahrung mit OPP.

Habe hoffentlich verstanden wie du das meinst. Folgendes ist jetzt dabei herausgekommen: Bildschirmfoto 2015-01-14 um 13.15.55.jpg

Die Oberfläche hätte ich jetzt in der Klasse main gestaltet, da mir das in der Schule so beigebracht wurde.

Ja damit wird zwar ein Connection Objekt erstellt, aber ich glaube dir fehlt noch der Aufruf von "open()" damit die Verbindung wirklich aufgebaut wird 🙂
Ich würde lieber mit PreparedStatement arbeiten, aber die Grundlagen dazu sind eig gleich. Du erzeugst ein Statement, gibst diesem Objekt dann den SQL Befehl als String und kannst je nachdem eine der "execute..." Methoden ausführen.

Werde ich mich später drum kümmern, versuche erstmal den grundlegenden Aufbau zu schaffen 🙂
 
Mal grob... wie schon gesagt wurde, sind Objekte eher Dinge und keine Verben. Eine Trennen Klasse macht überhaupt keinen Sinn.
Ich würde auch nicht die Business Logik in Fachobjekte wie Auto packen.
Sieh es etwa so: Mach dir eine Datenbank Klasse die dir die Verbindung aufbaut und die Queries absetzt.
Ein AutoService lädt, speichert, löscht dann mit Hilfe der Datenbank Klasse Objekte vom Typ Auto..
 
Mal grob... wie schon gesagt wurde, sind Objekte eher Dinge und keine Verben. Eine Trennen Klasse macht überhaupt keinen Sinn.
Ich würde auch nicht die Business Logik in Fachobjekte wie Auto packen.
Sieh es etwa so: Mach dir eine Datenbank Klasse die dir die Verbindung aufbaut und die Queries absetzt.
Ein AutoService lädt, speichert, löscht dann mit Hilfe der Datenbank Klasse Objekte vom Typ Auto..

Ich habe keine Klasse die sich trennen oder ähnliches nennt.

Die Klasse "Verbindung" ist in dem Paket mysql und beinhaltet unter anderem die Methode trennen()
 
Zuletzt bearbeitet:
Habe hoffentlich verstanden wie du das meinst. Folgendes ist jetzt dabei herausgekommen:

Wie ARadauer schon sagt: Die Methoden "anzeigen", "bearbeiten usw. in der Klasse Artikel sind nicht wirklich "schön"/"gut".
Die Klasse Artikel sollte nur einfach die Daten für einen Artikel kapseln können. (siehe z.B.:Plain Old Java Object)

Anmerkung: Klassennamen werden in Java in UpperCamelCase geschrieben, Methoden und Attribute werden in lowerCamelCase geschrieben 🙂


Die Oberfläche hätte ich jetzt in der Klasse main gestaltet, da mir das in der Schule so beigebracht wurde.

Da es sich um ein ControlPanel für einen Webshop handelt, wird es meiner Meinung nach sehr viele unterschiedliche Panels geben.
Alles in die Klasse "main" zugeben könnte unübersichtlcih werden.
Außerdem sollte es zwischen UI und Businesslogik immer eine schöne Trennung geben. (Hier wäre zum Beispiel MVC zu erwähnen)

Mal grob... wie schon gesagt wurde, sind Objekte eher Dinge und keine Verben. Eine Trennen Klasse macht überhaupt keinen Sinn.
Ich würde auch nicht die Business Logik in Fachobjekte wie Auto packen.

Stimmt da habe ich mich ungenau ausgedrückt 😉

Ich habe keine Klasse die sich trennen oder ähnliches nennt.

Wahrscheinlich war das noch auf deinen 1.Post bezogen. Dort hattest du ja noch die Klasse "trennen" erwähnt.
 
Wie ARadauer schon sagt: Die Methoden "anzeigen", "bearbeiten usw. in der Klasse Artikel sind nicht wirklich "schön"/"gut".
Die Klasse Artikel sollte nur einfach die Daten für einen Artikel kapseln können. (siehe z.B.:Plain Old Java Object)

Kannst du mir mal bitte ein Beispiel geben wie das mit der "Kapselung" aussehen würde, verstehe bei dem Wikipedia Link leider nicht alles

Da es sich um ein ControlPanel für einen Webshop handelt, wird es meiner Meinung nach sehr viele unterschiedliche Panels geben.
Alles in die Klasse "main" zugeben könnte unübersichtlcih werden.
Außerdem sollte es zwischen UI und Businesslogik immer eine schöne Trennung geben. (Hier wäre zum Beispiel MVC zu erwähnen)

Eigentlich war geplant alles in ein CP zu packen. Schaue ich dann wie voll das wird.
 
Kannst du mir mal bitte ein Beispiel geben wie das mit der "Kapselung" aussehen würde, verstehe bei dem Wikipedia Link leider nicht alles

Hier ein besserer Link zum Begriff Kapselung: Datenkapselung (Programmierung)
Bei der Kapselung geht es eigentlich nur darum Eigenschaften die ein bestimmtes Objekt/Ding definieren in einer Klasse zu kapseln.
Also anstatt mit 3 String Listen zu arbeiten entwirft man eine Klasse mit 3 Attributen und erzeugt dann nur noch eine Liste mit Objekten dieser Klasse.

Eigentlich war geplant alles in ein CP zu packen. Schaue ich dann wie voll das wird.

Alles in einem Programm unterzubringen JA, alles auf ein einziges Panel bzw. in eine einzige Klasse zu stopfen NEIN.
Und glaub mir du wirst mehrere Panels und Klassen brauchen.

PS: Was bis jetzt nicht gefallen ist: Soll es ein universeller Webshop sein oder spezielle auf bestimmte Produkte beschränkt?
Also kann man ala Amazon alles mögliche reinstellen oder zum Beispiel nur "Videospiele"?
 
Zuletzt bearbeitet:
Hier ein besserer Link zum Begriff Kapselung: Datenkapselung (Programmierung)
Bei der Kapselung geht es eigentlich nur darum Eigenschaften die ein bestimmtes Objekt/Ding definieren in einer Klasse zu kapseln.
Also anstatt mit 3 String Listen zu arbeiten entwirft man eine Klasse mit 3 Attributen und erzeugt dann nur noch eine Liste mit Objekten dieser Klasse.

Danke werde ich mich mal mit auseinandersetzen.


PS: Was bis jetzt nicht gefallen ist: Soll es ein universeller Webshop sein oder spezielle auf bestimmte Produkte beschränkt?
Also kann man ala Amazon alles mögliche reinstellen oder zum Beispiel nur "Videospiele"?

Es wird ein Film Verkauf
 

Zurück
Oben