[Java] Java - Hsql

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Calyx, 5. Juni 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 5. Juni 2011
    Java - Hsql

    Moin,

    muss ein paar Zugriffe auf eine Hsql-Datenbank realisieren und habe hier einen SQL-Fehler, den ich nicht verstehe. Danke schonmal falls sich jemand die Zeit nimmt

    So lege ich die Tabelle an:
    Spoiler
    PHP:
    private static final  String bewertungsSchema  " "  +
            
    COL_ID       " INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY," 
            
    +
            
    COL_DATE     " VARCHAR(20),"  +
            
    COL_ANBT_ID  " INTEGER,"  +
            
    COL_BWRT_ID  " INTEGER,"  +
            
    COL_KMNT     " VARCHAR(300)," 
            
    COL_PREIS     " INTEGER,"  +
            
    COL_BSCHR     " INTEGER,"  +
            
    COL_ZUST     " INTEGER,"  +
            
    COL_ABL         " INTEGER,"  +
            
    COL_DRSCHN   " DOUBLE" ;

    public 
    HsqldbBewertungDAO () {
            
    loadDriver ();
            
    con  startSession ();
            if (!
    tableExists ()) {
                
    createTable ();
            }
        }

        private 
    void loadDriver () {
            try {
                Class.
    forName ( DRIVER );
            } catch (
    ClassNotFoundException e ) {
                
    System . err . println ( DRIVER
                        
    " konnte nicht explizit geladen werden." );
            }
        }

    private 
    Connection startSession () {
            
    Connection con  null ;
            try {
                
    con  DriverManager . getConnection ( URLDBwithShutdown USR ,
                        
    PSWD );
                return 
    con ;
            } catch (
    SQLException e ) {
                
    System . out . println ( "Fehler beim Verbindungsaufbau!" );
                
    e . printStackTrace ();
                return 
    null ;
            }
        }

    boolean tableExists () {
            
    DatabaseMetaData databaseMetaData ;
            try {
                
    databaseMetaData  con . getMetaData ();
                
    ResultSet resultSet  databaseMetaData . getTables ( null null ,
                        
    BW_TABLE , new  String [] {  "TABLE"  });
                return 
    resultSet . first ();
            } catch (
    SQLException e1 ) {
                
    e1 . printStackTrace ();
                return 
    false ;
            }
        }

    boolean createTable () {
            
    Statement stmt  null ;
            try {
                
    stmt  con . createStatement ();
                
    stmt . executeUpdate ( "CREATE TABLE "  BW_TABLE  " ("
                        
    bewertungsSchema  " )" );
                return 
    true ;
            } catch (
    SQLException e ) {
                
    System . out . println ( "Fehler beim Create-Statement!" );
                
    e . printStackTrace ();
                return 
    false ;
            }
        }

    Beim createTable() schmeißt er mir immer diese Exception:
    Code:
    java.sql.SQLSyntaxErrorException: object name already exists: BEWERTUNGEN in statement [CREATE TABLE Bewertungen ( id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,datum VARCHAR(20),anbieterID INTEGER,bewerterID INTEGER,kommentar VARCHAR(300),preis INTEGER,beschreibung INTEGER,zustand INTEGER,ablauf INTEGER,durchschnitt DOUBLE )]
    Die Tabelle existiert nicht, ich kann sie vorher droppen oder direkt im Hsql-Client ein SELECT ausführen. da ist sicher nix...oder womit hat dieses "object name already exists" zu tun? google schon seit Stunden und finde einfach keine Lösung

    // Ok, also wenn ich zuerst im Hsql-Client Tabellen anlege und dann vom Programm aus darauf zugreife funktioniert es. Was aber die Exception oben dann soll begreif ich nicht ^^ Find das so auch unschön, es muss doch einen Weg geben vom Code aus Tabellen zu erzeugen...wäre über Hilfe dazu dankbar.
     
  2. 6. Juni 2011
    AW: Java - Hsql

    Vielleicht mit dem falschen User/in den falschen Namespace eingeloggt?
     
  3. 19. Juni 2011
    AW: Java - Hsql

    so, nach langem mal wieder dran versucht und den Fehler endlich gefunden.

    HSQL wandelt Tabellennamen automatisch in Großbuchstaben(!!!!) um. Somit hat tableExists() die Tabelle nicht gefunden, weil ich nach Kleinbuchstaben gesucht habe...dann soll daraufhin die Tabelle erstellt werden, was natürlich failed weils die schon gibt.

    Was für ein Scheiß!
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.