Announcement

Collapse
No announcement yet.

Hsqldb create table

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hsqldb create table

    Hy, ich habe nun alles so vorbereitet wie in der Beschreibung angegeben ( http://www.programmingforfuture.com/...ql-hsqldb.html) und die Connection funktioniert (zumindest kommt keine Fehlermeldung).

    Ich habe, wie angegeben, Eine Datenbank "meineDB" im Manager erstellt und kann auch im HSQLDB-Manager eine Tabelle erstellen.

    Wenn ich im Code eine Tabelle erstellen will dann leider ohne Erfolg.
    Die Dateien mit dem Code sind im Anhang.

    Der Rückmeldewert bei der Ausführung des Create Table ist 0.

    Auszug aus dem Code
    [highlight=java]
    ...
    Class.forName("org.hsqldb.jdbcDriver");
    con = DriverManager.getConnection(
    "jdbc:hsqldb:meineDB", "SA", "" );

    ....

    public static void createTables() throws SQLException
    {
    int i;
    boolean b;
    //Anlegen der Tabelle
    try
    {
    i = stmt.executeUpdate("CREATE TABLE test" +
    " (testid INT NOT NULL, feld VARCHAR(10) NULL," +
    " PRIMARY KEY (testid))");

    ab.Ab("CREATE TABLE dir ==> " + i);
    }
    catch (SQLException e){ab.Abl("Stop Error -" + e.getMessage());}
    }

    [/highlight]

    Wenn ich nun den Manager starte und die Datenbank aufrufen, dann erscheint nirgends die Tabelle test.

    Woran kann das liegen?

    Was für Infos benötigt Ihr noch?

    Gruß

    Lerando
    Attached Files

  • #2
    catch (SQLException e){ab.Abl("Stop Error -" + e.getMessage());}

    Was wird als Fehler geworfen?
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post

      Was wird als Fehler geworfen?
      [/COLOR]
      Das ist ja das witzige, kein Fehler.


      habe es durch diese Routine ersetzt
      [highlight=java]
      catch (SQLException e)
      {
      while (e != null) {
      System.err.println(e.toString());
      System.err.println("SQL-State: " + e.getSQLState());
      System.err.println("ErrorCode: " + e.getErrorCode());
      e = e.getNextException();
      }
      System.exit(1);
      } catch (Exception e) {
      System.err.println(e.toString());
      System.exit(1);
      }
      [/highlight]

      Kein Fehler.

      Meine Ausgabe:
      HSQLDB - Verbindung
      HSQLDB - Verbindung ==>> hergestellt

      Connection URL: jdbc:hsqldb:meineDB
      Driver Name: HSQL Database Engine Driver
      Driver Version: 2.2.8

      open
      CREATE TABLE ==> 0
      close

      Aber über den Manager sehe ich keine Tabelle test???

      Comment


      • #4
        Habe nun über den Manager eine neue DB angelegt "neueDB".

        Recent Setting: neueDB
        Setting Name: neue DB
        Type: HSQL Database Engine Server
        Driver: org.hsqldb.jdbcDriver
        URL: jdbc:hsqldb:hsql://localhost/neueDB
        user: SA
        Password:

        Das gleiche Spiel wieder.

        Beim debugging für die Zeile 90
        "Class.forName("org.hsqldb.jdbcDriver");"

        kam diese Meldung: (siehe Bild)
        Attached Files

        Comment


        • #5
          ab.Ab("CREATE TABLE dir ==> " + i);

          kann nur 0 ergeben, weil der Returnwert:

          either the row count for INSERT, UPDATE or DELETE statements, or 0 for SQL statements that return nothing


          Führe das Statement auf der Console aus

          http://opensourcetips.blogspot.de/20...b-console.html

          EDIT

          Beim debugging für die Zeile 90
          "Class.forName("org.hsqldb.jdbcDriver");"

          kam diese Meldung: (siehe Bild)
          Dann ist der DB-Treiber wohl nicht im Klassenpfad
          Zuletzt editiert von Christian Marquardt; 20.03.2012, 15:11.
          Christian

          Comment


          • #6
            Originally posted by Christian Marquardt View Post
            Dann ist der DB-Treiber wohl nicht im Klassenpfad
            Ich dachte, wenn ich "import java.sql.*;" habe, dann findet er Ihn automatisch??

            Ausserdem funktioniert MySQL wunderbar, nur HSQLDB nicht!!

            Ist echt seltsam. Leider habe ich keinen der mir an meinem Rechner hilft. Ich denke das würde mehr bringen.

            Vieeeeeelen Dank für Deine Hilfe.

            Werde (leider) mit MySQL weiter arbeiten müssen.

            Kannst Du mir evtl. noch einen "Ersatz" für die Beanbox nenne? Der Author hängt sich vollkommen an dieser Beanbox auf. Habe Ihm auch eine entsprechende Email zukommen lassen.

            Bzw. kannst Du mir ein Buch empfehlen dass die Beans verständlich durchnimmt?

            Danke

            Gruß

            Lerando

            Comment


            • #7
              Kannst Du mir evtl. noch einen "Ersatz" für die Beanbox nenne? Der Author hängt sich vollkommen an dieser Beanbox auf. Habe Ihm auch eine entsprechende Email zukommen lassen.
              http://de.wikipedia.org/wiki/JavaBeans

              Irgendwie gibt es nicht viel zu sagen, dazu. Ich weiss auch nicht wozu diese "Box" dienen könnte.

              Ich dachte, wenn ich "import java.sql.*;" habe, dann findet er Ihn automatisch??
              Nein, Projekt -> Build Path->....
              Christian

              Comment


              • #8
                Im BuildPath ist er nicht drin, und unter C:\tmp\hsqldb\src\org\hsqldb finde ich nur die jdbcDriver.java - Datei.

                Wo bekomme ich dann diesen Driver her? Die beiden jar-Dateien sind integriert (hsqldb.jar und sqltool.jar) Siehe Bild

                Gruß Lerando

                PS:: Bitte um etwas Geduld mit mir, bin halt am Verzweifeln mit HSQLDB. Aber ich komme der Lösung immer näher (hoffentlich):
                Attached Files

                Comment


                • #9
                  Die Klasse ist im hsqldb.jar enthalten
                  Christian

                  Comment


                  • #10
                    Dann verstehe ich nicht, warum das CREATE TABLE nicht funktioniert.

                    Hast Du vielleicht Zeit, mein Code bei Dir zu testen?

                    Würde mich interessieren, ob es evtl. an Windows liegt. Oder an der Version.

                    Danke für Deine Hilfe und Geduld

                    Gruß

                    Lerando

                    PS: MySQL funktioniert ohne Probleme!!!

                    Comment


                    • #11
                      Mal auf das Wesentliche gekürzt

                      Das Programm ist schneller zu Ende, als HSQL das in die *.log und dann in die *.script Datei schreiben kann. Eine Verzögerung von 2 Sek beseitigt das Problem


                      [highlight=java]

                      public class DB
                      {
                      static Connection con;
                      static Statement stmt;
                      static DatabaseMetaData dmd;

                      public static void main(String[] args) throws ClassNotFoundException,SQLException, InterruptedException
                      {
                      Class.forName("org.hsqldb.jdbcDriver");
                      con=DriverManager.getConnection("jdbc:hsqldb:meine DB","sa","");
                      stmt=con.createStatement();
                      int i=stmt.executeUpdate("CREATE TABLE test"
                      +" (testid INT NOT NULL, feld VARCHAR(10) NULL,"
                      +" PRIMARY KEY (testid))");
                      stmt.close();
                      con.close();
                      Thread.sleep(2000);
                      }

                      }



                      [/highlight]

                      Oder

                      das setzen von

                      SET FILES WRITE DELAY 500 MILLIS

                      auf 0 in der DB mit

                      ...executeUpdate("SET FILES WRITE DELAY 0 MILLIS");



                      SET DATABASE TRANSACTION CONTROL LOCKS
                      SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED
                      SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE
                      SET DATABASE TEXT TABLE DEFAULTS ''
                      SET FILES WRITE DELAY 500 MILLIS
                      SET FILES BACKUP INCREMENT TRUE
                      SET FILES CACHE SIZE 10000
                      SET FILES CACHE ROWS 50000
                      SET FILES SCALE 8
                      SET FILES LOB SCALE 32
                      SET FILES DEFRAG 0
                      SET FILES NIO TRUE
                      SET FILES NIO SIZE 256
                      Weiterhin
                      - nutze Modifizierer wie private, Public in deinen Klassen für die Variablen
                      - das Statement gilt nur für die Ausführung, wozu global und 2 davon?
                      - nutze die Objektorientierte Programmierung und mach nicht alles STATIC. Lagere das Klassen aus, und erzeuge Instanzen
                      Zuletzt editiert von Christian Marquardt; 20.03.2012, 17:46.
                      Christian

                      Comment


                      • #12
                        Originally posted by Christian Marquardt View Post
                        - nutze Modifizierer wie private, Public in deinen Klassen für die Variablen
                        - das Statement gilt nur für die Ausführung, wozu global und 2 davon?
                        - nutze die Objektorientierte Programmierung und mach nicht alles STATIC. Lagere das Klassen aus, und erzeuge Instanzen
                        Da es sich hier nur um einen Ausschnitt aus einer Übung handelt, ist diese Programmierung so entstanden.

                        Es fehlt noch Code für die weiteren Vorgänge.

                        Ich bin Dir sehr Dankbar für diese nützlichen Tips und werde Sie in meiner Laufbahn auch umsetzen.

                        Vielen Dank für Deine Antwort (und Geduld

                        Gruß
                        Leranod

                        Comment

                        Working...
                        X