Vokabelprogramm mit DB

qerzo

Mitglied
Hi erstmal,
Es handelt sich nicht sdirekt um eine Hausaufgabe sondern vielmehr um meine Abipräsentationsprüfung.
Und zwar soll ich einen Vokabeltest programmieren der die Vokabeln bezüglich ihrer Schreibweise analysiert, bei dem die Testvokabeln komfortabel verwaltet werden können, der den Test automatisch bewertet (Wie soll das denn anders gehn?:D) und bei dem eine schriftliche Darstellung des bewerteten Test ausgedruckt werden kann. Mein Problem ist nun (da ich auch nicht unbedingt der fitteste in Java bin) das komfortable Verwalten der Vokabeln???:L
Das spricht an sich für ne Datenbank, allerdings haben wir damals lediglich MySQL Datenbanken mit PHP angesteuert -.-
Also hier meine Frage: Welche Datenbank eignet sich (am Besten) für Java?
Und ein Link mit Tutorial wär auch noch nett... Will aber nicht zu viel erwarten:)
Grüße und vielen Dank
qerzo
 
Zuletzt bearbeitet von einem Moderator:
T

Tomate_Salat

Gast
Ich würde hier eher zu H2 raten. Die kann man embedded verwenden und du musst keinen MySQL-Server bereitstellen/mitliefern.
 

qerzo

Mitglied
Danke für die Antworten werde mich einfach mal schlau machen und gucken womit ich leichter zurecht komme:)
qerzo

EDIT: So hab jetzt maln bisschen gelesen. Wenn ich H2 embedded verwende ist das dann quasi so, dass ich meine Datenbank in das Programm eingebettet hab oder wie muss ich das verstehn?
 
Zuletzt bearbeitet:

Ironzwerg

Mitglied
Genau so ist das.
Du musst also nicht darauf achten, ob du irgendwo nen Db-Server am Laufen hast.
Wenn du das Programm auslieferst, ist die DB mit dabei.
 

fastjack

Top Contributor
Zur Übung kannst Du Dir auch eine Schnittstelle zum Datenzugriff schreiben, dann kannst Du verschiedene Möglichkeiten zur Datenhaltung entwickeln, z.B. Serialisieren, XML, oder auch in die Datenbank.
 

qerzo

Mitglied
So ich hab jetzt das Grundgerüst meines Programms fertig....
Nur stellt sich mir jetzt eine Frage: wie bettet man H2 überhaupt ein. Ich bin echt verzweifelt;(
Bitte, bitte kann mir das jemand erklären oder mirn Link schicken???? Das muss doch irgendwo im H2 Tutorial stehen! Ich hab das bestimmt schon 10 mal überlesen - wäre nett wenn jemand mit seinem Finger drauf zeigt^^
Grüße qerzo
 

qerzo

Mitglied
find den Edit Button nich aber egal :D
Also ich hab jetzt was gefunden:

Add the h2*.jar to the classpath (H2 does not have any dependencies)
Use the JDBC driver class: org.h2.Driver
The database URL jdbc:h2:~/test opens the database test in your user home directory
A new database is automatically created

Mh Irgendwie versteh ich das nicht ???:L
Also ich hab mir jetzt die h2.jar runtergeladen - wie add ich die zum classpath, und wie benutze ich die JDBC driver class? Ich bin echt ratlos.
 
T

Tomate_Salat

Gast
erstelle in deinem Projektordner ein Verzeichnis und nenn es (standardmäßig) lib.
Dort legst du die h2*.jar ab. Also hast du etwa folgende Struktur:
Code:
PROJEKT
   |-- lib
   |     |- H2.jar
   |-- src
...

Wenn du eclipse offen hast, wählst du dein Projektbaum aus und drückst erstmal F5 (dann solltest du auch den Ordner [c]lib[/c] sehen). Danach machst du einen rechtsklick auf dein Projekt dort auf Properties. Dann öffnen sich die Eigenschaften. Links im Baum klickst du auf [c]Java Build Path[/c] wählst rechts den Reiter [c]Libraries[/c] aus und klickst auf [Add JARs...]. Dann öffnet sich ein Baum und von dort navigierst zu deinem ordner lib und makierst die H2-DB...fertig.
 

qerzo

Mitglied
Das funktioniert jetzt:)
Nur wirft das jetzt alles noch mehr weiterführende Fragen auf :autsch::D

EDIT: zB Kann ich die Datensätze direkt mit JAVA-Befehlen auslesen?
 
Zuletzt bearbeitet:

timbeau

Gesperrter Benutzer
Wie wärs mal mit Lesen des Tutorials? Oder ein Buch in der örtlichen Bibliothek?

Stichworte: sessionFactory, session, Query, HQL vs SQL Query
 

qerzo

Mitglied
Ja hatte nich so viel zeit zum lesen - musste für gestern auch nochn roboter programmiern-.-
aber du hast natürlich recht:D
danke für die stichworte :)
 

qerzo

Mitglied
poah das h2 tutorial verwirrt mich nur noch mehr...
versteh kein wort???:L
an welcher stelle steht denn bitte wie man die datensätze ausliest. da bekomm ich eiskalt en brechreiz

EDIT: Ich suche jetzt explizit ein Tutorial in dem steht wie ich die H2 DB mit java auslesen kann. Und zwar so das ich das verstehe. Ich hab echt keine Ahnung von der materie -.-
Das h2 tut hilft mir echt nich weiter... da steht drin wie ich die db mit java über jdbc verbinde - aber das reicht mir ja nich. zudem noch ne menge sql befehle für die db aba wie, WIE lese ich datensätze aus???
 
Zuletzt bearbeitet:

qerzo

Mitglied
ach thx
Ich glaub ich habs.
über jdbc wird ne verbindung mit der db aufgebaut mit der ich dann indirekt über sql befehle spreche.
so grob :bae:
 

qerzo

Mitglied
Mir ist was saublödes passiert....
Auf der Login-Seite habbich bei Setting Name zufällig auf Remove geklickt. Jetzt kann ich nicht mehr Generic H2 embedded angeben. Was mache ich jetzt um das wieder hinzubekommen??o_O
ne Neuinstallation hat nichts gebracht. Und da ich jetzt verzweifelt und mit meinem Latein am Ende bin...
Ich kann ja jetzt nich mal mehr auf meine DB zugreifen
Das schlaucht echt ziemlich-.-
 
T

Tomate_Salat

Gast
sind ja nur "templates", kannst du dir ganz einfach wieder einstellen:
Gibst bei Einstellungs-name: Generic H2(Embedded) ein
bei Driver Class: org.h2.Driver
JDBC URL: odbc:h2:~test
Benutzername: sa

und danach speichern drücken. Dann hast du das wieder.
 

fastjack

Top Contributor
Also ich würde Dir immer noch empfehlen ein Interface zu Ansteuerung an die Daten zu machen. In der Software benutzt Du dann nur noch das Interface, um Daten zu lesen oder schreiben etc. Schreib Dir anfangs eine einfache Implementierung, die z.B. die Serialisierung/XML oder so benutzt. Das hat den Vorteil, dass Du mit Deiner Software vorankommst, schon mal erste Ergebnisse siehst.
Dann kannst Du später immer eine Implementierung mit Hilfe einer Datenbankschicht machen.
 

qerzo

Mitglied
Also ich würde Dir immer noch empfehlen ein Interface zu Ansteuerung an die Daten zu machen. In der Software benutzt Du dann nur noch das Interface, um Daten zu lesen oder schreiben etc. Schreib Dir anfangs eine einfache Implementierung, die z.B. die Serialisierung/XML oder so benutzt. Das hat den Vorteil, dass Du mit Deiner Software vorankommst, schon mal erste Ergebnisse siehst.
Dann kannst Du später immer eine Implementierung mit Hilfe einer Datenbankschicht machen.

Ja, das Problem ist einfach das Ich von der Materie keine Ahnung habe....
Und auch nicht mehr viel Zeit - musste die Woche 3 referate halten und noch 2 arbeiten schreiben, da kam die programmierung leider zu kurz:eek:
ich werd jetzt einfach versuchen das ganze so gut es geht hinter mich zu bekommen...

Ich habe mich jetzt mal daran versucht 2 werte der datenbank als label auszugeben...
Aber irgendwie bekomm ich das nicht auf die reihe
Naja ich poste mal mein java quellcode
Java:
import java.awt.*;
import java.sql.*;
import java.applet.*;
public class trainer extends Applet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	 public static void main(String[] a)//verbindung zur DB laut h2 turorial
     throws Exception {
 Class.forName("org.h2.Driver");//lädt den Treiber
 Connection conn = DriverManager.//Öffnet eine Verbindung
     getConnection("jdbc:h2:~/test", "sa", "");//Datenbank URL, Benutzername und Passwort

 //versuch einer datenbankabfrage
 Statement stmt = conn.createStatement();//anweisungobjekt um sql kommandos abzusetzen
 String query = "SELECT DEUTSCH FROM VOKABEL";
 ResultSet rs = stmt.executeQuery( query );
 while ( rs.next() )//geht mit einer while Schleife durch die gesamte Ergebnismenge und gibt di ersten 3 Ergebniss auf dem Bildschirm aus
	 LV1.setText(rs.getString(1));
 LV2.setText(rs.getString(2));
 System.out.println(rs.getString(1));
 rs.close();
 stmt.close();
 conn.close();
	 }
	
(...)
		
		Label LUeb=new Label("Vokabeltrainer");
		Label LV1=new Label();
		Label LV2=new Label();
		
	public void init(){	
	
		LUeb.setFont(new Font("Arial", Font.BOLD, 25));
	add(LUeb);
	
	add(LV1);
	add(LV2);
	
	}
	}
Das Problem ist das es nicht funktioniert:autsch:
Sieht jemand den Fehler???:L
Durch stupides ausprobieren habe ich ihn nicht gefunden...
Eclipse sagt: connat make a static reference to a non-static field (ZEILE 21/22)
Wie kann ich das lösen?
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Die Textfields sind whl. nicht static, die main Methode aber. Applet mit main ist auch nicht richtig. Mach für die DB-Verbindung eine Klasse, mit der Du verbinden kannst usw. Schreib dir eine Klasse in der die Businesslogik enthalten ist, also Labels aus DB holen usw. Aus den Methoden kommen dann Datenobjekte zurück, mit denen Du dann die GUI füllen kannst.
 
G

Gast2

Gast
nochmal zum mitschreiben:
du hast nen applet => da gibts keine main-Methode
du versuchst aus nem staischen kontext (deiner main-Methode) auf nicht-statische Variablen zuzugreifen => das geht nicht

wie du das ganze besser machen kannst steht oben
 

qerzo

Mitglied
ich bin verloren.
das kann ich nie in einer woche lernen + schreiben.
die fehler leuchten mir ein - aber ich hatte nie die notwendigkeit ne eigene klasse zu schreiben...
die lösungansätze hören sich gut an - aber da muss ich schon tief im thema drin sein mh?
is wenigstens die art der connection richtig? also klappt das wennich das dann in ne eigene klasse pack?
oder gibts da noch ne andre möglichkeit für applets? mein im tutorial "java ist auch eine insel" wurde die conn anders aufgebaut? und wenn ich das alles als bildschirmausgabe geschafft hab mussich ja noch logische vergleiche ziehn um die richtigkeit der antworten zu prüfen.....
 

fastjack

Top Contributor
Deswegen meinte ich ja, programmiere alles gegen ein BusinessInterface, z.b:

Java:
List<Vokabel> getVokabeln(Sprache sprache);
List<Sprache> getSprachen();

oder in deinem Beispiel:

Java:
public static void main(String[] a)//verbindung zur DB laut h2 turorial
        throws Exception {
    BusinessInterface intf = new DatabaseBusinessInterface();
//    BusinessInterface intf = new SerializeBusinessInterface();
//    BusinessInterface intf = new TextBusinessInterface();
//    BusinessInterface intf = new XMLBusinessInterface();
    List<Vokabel> list = intf.getDeutscheVokabeln();      
    for(int i = 0, i < list.size(); i ++) {
        Vokabel vokabel = list.get(i);
        labels[i].setText(vokabel.gettext()); // labels in Array oder List oder so
    }
}

Aber wie oben gesagt, keine main() method machen.

usw. Dieses Interface benutzt Du dann, um auf die Daten zuzugreifen. Du hast dann die Auswahl, wie Du das Interface implementierst, also für datenbanken, eine entsprechende DB-Implementierung. Textdateien würde ich nicht empfehlen, wenns nicht anders geht, dann irgendwie Property-Format, XML geht auch, ist aber dann wieder etwas komplexer. Du kannst auch Serialisierung verwenden, ist nicht kompliziert.
 
Zuletzt bearbeitet:

qerzo

Mitglied
so ich bin fast fertig...
hab mich da mal durchgewühlt (was ne arbeit)
allerdings tritt jetzt doch noch ein (kleines?) problem auf
der test soll ja automatisch bewerten. Ich hab mir das so vorgestellt, dass bei jedem durchlauf geprüft wird ob die antwort richtig ist oder nicht. hab dafür schon ne if/else anweisung geschrieben die jeweils nette texte bzw. die richtige lösung ausgibt.
allerding sollte ganz am ende nochmal ne info erscheinen a la: sie haben 4 von 10 vokabeln richtig beantwortet...
da würde ja eigentlich ne integer in der if anweisung reichen die bei jeder richtigen antwort um 1 erhöht wird.
jetzt meine frage: wie erhöht man die variable um eins. is wohl mehr ne anfänger frage aber ich kann mich beim besten willen nicht erinnern
google ist auch nicht mein freund aber vll such ich ja auch nur nach den falschen begriffen
selbst mein treues java büchlein lässt mich im stich :(
aber vll kann mir ja hier jemand sagen wie ich das mach
 

frapo

Bekanntes Mitglied
jetzt meine frage: wie erhöht man die variable um eins. is wohl mehr ne anfänger frage aber ich kann mich beim besten willen nicht erinnern

Java:
// irgendwo am Anfang Deiner Methode Deine variable deklarieren:
int variable = 0;

// an gegebender Stelle dann um 1 erhöhen
variable += 1;
	
// oder 
variable = variable + 1;

Grüße
frapo
 
B

bone2

Gast
noch einfacher:
Java:
variable++;
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben