Datenbank in Java

Improof

Erfahrenes Mitglied
Wow :eek:
Dann hat sich da aber wohl einiges getan. Mein erstes Eclipse war Indigo und selbst mit dem konnte man eigentlich richtig gut arbeiten (ja, das Problem mit den Startzeiten kenn ich...aber da ich hauptsächlich mit GWT und dem zugehörigen Eclipse Plugin arbeite, ist das wohl vertretbar). Aber ansonsten gibts da eigentlich keine Probleme. Seit ein paar Monaten verwende ich jetzt Juno und das läuft stabil und schnell.
 

Aloisia

Mitglied
So, ich habe mir das jetzt durchgelesen.
Wie bekomme ich die entsprechenden Strings für

Java:
Class.forName("oracle.jdbc.driver.OracleDriver")
und
Java:
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@dbaprod1:1544:SHR1_PRD", username, passwd);

Wenn ich mit dem HSQLDB und einer Stand-Alone DB arbeite...
 

Improof

Erfahrenes Mitglied
Hi,

also den vollqualifizierten Klassennamen und die Connection-URL??
Kannst du doch googlen...such nach "hsqldb class name" und "hsqldb connection url". Ich wette in den ersten 3-5 Ergebnissen findest du die Lösung (evtl. mehrfach)..

Und nächstes Mal bitte etwas mehr Eigeninitiative. Ich kann ja verstehen, dass du im Programmieren evtl. (noch) deine Schwächen hast, aber sowas gehört zu den Grundkenntnissen. Wenn ich dabei aber doch irgendwas falsch verstanden hab: Sorry!

Gruß
Daniel
 

Aloisia

Mitglied
Zuerst einmal ein großes Dankeschön, dass ihr euch so viel Zeit nehmt mir zu helfen! Ich weiß, dass das nicht jeder tun würde, und schätze eure Geduld mit mir.

Bevor ich jetzt wieder Mist baue, vielleicht noch einen Schritt zurück...

Ich habe 300 Objekte, bestehend aus
int(=id),String,String,String,String,String,String,int,int
Momentan speichere ich so ein Objekt in einem .txt File (also für jedes ein eigenes)
1.txt enthält also alles für das "Objekt 1".
Ich lese dann das Objekt ein(load-Methode), habe dafür eine Klasse (mit Gettern und Settern usw.)
Wenn ich etwas bearbeitet habe, kann ich das Objekt mit einer write-Methode wieder als .txt schreiben. (Das alte wird ersetzt)
Somit bleiben die Daten gespeichert, wenn das Programm beendet ist, und stehen beim nächsten Start wieder zur Verfügung.

Mir wurde dann damals (als ich das geschrieben habe) gesagt, dass eine Datenbank eine elegantere Lösung für dieses Problem ist.
Das erscheint mir realistisch,...ich habe aber keine Erfahrungen und wollte mich mit diesem Projekt jetzt ein bisschen einarbeiten bei diesem Thema.
Das Programm sollte auch auf einem anderen Rechner als meinem laufen, wenn möglich mit so wenig "Zusatzinstallationen" wie möglich. Ist die Datenbanklösung da die(oder eine) richtige Herangehensweise?


und ja, Ergebnis #1:
http://hsqldb.org/doc/src/org/hsqldb/jdbc/JDBCDriver.html
 

sheel

I love Asm
Mir wurde dann damals (als ich das geschrieben habe) gesagt, dass eine Datenbank eine elegantere Lösung für dieses Problem ist.
Ja, eine DB ist da sicher nicht verkehrt

Das Programm sollte auch auf einem anderen Rechner als meinem laufen, wenn möglich mit so wenig "Zusatzinstallationen" wie möglich. Ist die Datenbanklösung da die(oder eine) richtige Herangehensweise?
Als Stand-Alone-Variante eher nicht, aber komplett nur nur über die Jar-Datei ins eigene Programm eingebunden,
wie das bei HSQL (auch) möglich ist (wie auch das Buch beschreibt), ja, kein Problem.
 

Improof

Erfahrenes Mitglied
Hi,

Das Programm sollte auch auf einem anderen Rechner als meinem laufen, wenn möglich mit so wenig "Zusatzinstallationen" wie möglich. Ist die Datenbanklösung da die(oder eine) richtige Herangehensweise?
Also die Herangehensweise ist schon mal super, wenn man sich das so anhört, alles in .txt Dateien...da ist eine Datenbank dann schon besser. Außerdem, falls man in Zukunft mal andere Daten mit denen von dir Verknüpfen will / muss, kann man das dann auch über die DB sauber und einfach lösen.

Aber wenn du sagst das Programm sollte auf einem anderen Rechner auch laufen, bedeutet das dann, dass jeder nur seine eigenen Daten hat? Oder braucht jeder alle Daten? Das ist hier extrem wichtig, denn - wie sheel schon gesagt hat - einbinden in die Jar ist ja an sich kein Problem, aber dann bleiben die Daten auch da wo die Jar ist.

Soll heißen: User A hat PC 1 und User B hat PC 2. Auf beiden PCs ist die Jar "installiert". Wenn nun User A etwas ändert, ist diese Änderung logischerweise nur auf PC 1 verfügbar. Wenn die User also zusammenarbeiten sollen bzw. müssen, dann musst du eine der folgenden Lösungen verwenden:

  1. Installation der Datenbank auf einem zentralen Server oder (etwas unschöner) auf einem Arbeitsplatz PC und dann für die anderen freigeben
  2. Die Jar nicht jedes mal neu installieren, sondern einmal auf einen Server legen und dann nur per Verknüpfung starten. Somit verwendet jeder exakt dieselbe Jar (ABER: Nicht so schön wie Lösung 1, außerdem bin ich mir nicht ganz sicher, ob dass dann immer reibungslos klappt bei z.B. gleichzeitigen Zugriffen etc. etc.!

Gruß
Daniel
 

Aloisia

Mitglied
Hallo, das Programm sollte 1x mit "Standard Daten" ausgeliefert werden. Wenn Benutzer A etwas ändert muss B das jedoch NICHT wissen (Jeder hat dann seine eigene Version).
Da das ganze für mich als Übung gedacht ist, könnte ich das in Zukunft vielleicht ändern, und die Datenbank zentral auf einem Server speichern.
Ich habe die entsprechenden Funktionen in eine eigene Klasse geschrieben, daher müssen die dann nur an einer Stelle angepasst werden. (Dem restlichen Programm ist es egal wie diese Klasse an die Daten kommt, bzw. diese speichert es arbeitet nur damit).

Ich werde jetzt versuchen ein Minimalbeispiel zusammen zu bekommen, und melde mich dann nochmal ;)
 

Aloisia

Mitglied
So, mein Minimalbeispiel, das funktioniert erst mal! Coole Sache! Vielen Dank euch beiden!!!!!
Java:
import java.sql.*;

public class Person {

    private int id;
    private String first_name;
    private String last_name;

    Person(int i,String n, String s){
        this.id=i;
        this.first_name=n;
        this.last_name=s;
    }

    public static void main(String[] args) {
       
        Person p0=new Person(0,"Alex","Ammerer");
        Person p1=new Person(1,"Bernd","Brot");
       
        Connection con=null;
        try {
            con = DriverManager.getConnection( "jdbc:hsqldb:file:c:/Java/Mein_Workspace/Test area/TutegoDB;shutdown=true",
                    "sa","" );
           
            Statement stmt = con.createStatement();
            String CreateTable= "CREATE TABLE Person (ID int, first_name char(50), last_name char(50),PRIMARY KEY(ID))";
            stmt.executeUpdate(CreateTable);
            stmt.executeUpdate(writePerson(p0));
            stmt.executeUpdate(writePerson(p1));
            stmt.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            if ( con != null )
                try {
                    con.close();
                } catch ( SQLException e ) { 
                    e.printStackTrace(); 
                }
        }

    }

    static String writePerson(Person p){
        String s;
        s= "INSERT INTO Person (ID, first_name, last_name) VALUES (";
        s+=p.id+", '"+p.first_name+"', '"+p.last_name+"')";
        return s;

    }
}

Jetzt wird beim Start die Tabelle erzeugt, und die Daten der Personen eingefügt.

Wie würdet ihr weiter vorgehen?
1) Die Datenbank mit ausliefern
2)Beim ersten Programmstart die Datenbank erzeugen und danach bei jedem weiteren Start überprüfen ob die DB noch da ist.

Mir gefällt jetzt Nummer 2 besser, da ich glaube, dass sich dadurch eine Änderung auf Server basiert leichter realisieren lässt.
 

Improof

Erfahrenes Mitglied
Hi,

gut dass es bisher so funktioniert! :)

Wie du das mit der Datenbank lösen willst kommt ganz darauf an, welchen Aufwand du betreiben willst. Du sagst es ist ein Übungsprogramm? Dann sind die zwei Punkte beide gute Lösungsmöglichkeiten (wobei ich auch eher zu Nr. 2 tendiere). Du solltest nur eine Warning ausgeben, wenn er keine Datenbank findet, um den User mitzuteilen, dass die Datenbank erzeugt wird (auch beim ersten Erzeugen).

Wenn es jedoch irgendwann mal um ein professionelles Tool geht, dann kannst bzw. solltest du das Erzeugen der Datenbank und füllen der Tabellen mit Default-Werten in der Installationsroutine schon machen. Dafür ist sowas wie eine Installation ja da. Insbesondere, wenn das Programm verschiedenste Dateien benötigt usw. bietet sich eine solche Routine an.

Gruß
Daniel
 

Neue Beiträge