Heinrich J.: HTML5 - WebSQL - Auto Increment Primary Key

Hallo Selfer,

ich versuche mit folgender Anweisung

tx.executeSql(
                'CREATE TABLE IF NOT EXISTS Test ('
                    + 'id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,'
                    + 'number INT NOT NULL '
                + ')'

eine Tabelle anzulegen.

Mit dem Chromium Debugger Toll kann ich erkennen, dass das ganze nur klappt, wenn ich auf AUTO_INCREMENT verzichte. Dann entfällt der Fehler und ich kann meine Tabelle wie gewünscht im Debugger Tool finden.

Nun möchte ich jedoch, dass automatisch jedem neuen Wert eine einduetige ID zugewiesen wird - dafür wollte ich ja schließlich den Auto-Increment.

Wie bekomme ich das in WebSql hin, dass die Spalte id ein Auto Increment hat?

Grüße
Heinrich J.

  1. Hi,

    Wie bekomme ich das in WebSql hin, dass die Spalte id ein Auto Increment hat?

    eine *sehr* kurze Recherche ließ mich das Keyword "AUTOINCREMENT" finden.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      also

      tx.executeSql(
                      'CREATE TABLE IF NOT EXISTS Test ('
                          + 'id INT NOT NULL AUTOINCREMENT PRIMARY KEY,'
                          + 'number INT NOT NULL '
                      + ')'

      führt bei mir im Chromium Debugger genau zur selben Meldung:

      Error near "AUTOINCREMENT": syntax error

      Lasse ich AUTOINCREMENT weg, wird die Tabelle ordnungsgemäß angelegt - aber halt ohne den AUTOINCREMENT.

      Gruß

      Heinrich J.

      1. Hi,

        tx.executeSql(
                        'CREATE TABLE IF NOT EXISTS Test ('
                            + 'id INT NOT NULL AUTOINCREMENT PRIMARY KEY,'
                            + 'number INT NOT NULL '
                        + ')'

        führt bei mir im Chromium Debugger genau zur selben Meldung:

        Error near "AUTOINCREMENT": syntax error

        Wie molily in deinem anderen Thread schon sagte, sind das im Grunde SQLite-Datenbanken.
        Und wenn ich mir das Syntaxdiagramm http://www.sqlite.org/syntaxdiagrams.html#column-constraint ansehe, dann ist die Reihenfolge der Keywörter wohl in anderer Weise vorgegeben, als du sie notiert hast.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hallo,

        WebSQL ist eine SQLite-Datenbank, wenn ich Mathias glauben darf:

        tx.executeSql(
                        'CREATE TABLE IF NOT EXISTS Test ('
                            + 'id INT NOT NULL AUTOINCREMENT PRIMARY KEY,'
                            + 'number INT NOT NULL '
                        + ')'

        führt bei mir im Chromium Debugger genau zur selben Meldung:

        ja, das ist zu erwarten. SQLite ist da penibel und verlangt eine ganz bestimmte Reihenfolge der Schlüsselwörter, die Du verletzt.

        Lasse ich AUTOINCREMENT weg, wird die Tabelle ordnungsgemäß angelegt - aber halt ohne den AUTOINCREMENT.

        Du irrst, ganz besonders der Beitrag von EisFux und natürlich mein erster verlinkter Beitrag :-)

        Freundliche Grüße

        Vinzenz

        1. WebSQL ist eine SQLite-Datenbank, wenn ich Mathias glauben darf

          Zur Erklärung, WebSQL ist nicht notwendig SQLite, aber es ist derzeit im Safari, Chrome und Opera mit SQLite implementiert.
          Im Zuge der Standardisierung wollte man WebSQL von SQLite lösen, dabei ist aber nichts herumgekommen. SQLite ist proprietär im Sinne von nicht vollständig einem unabhängigen Standard folgend. Was SQLite ist, bestimmt das SQLite-Projekt, ist jederzeit änderbar und unterliegt keinem Standardisierungsprozess. Daher wollte die formale Spezifikation von SQLite nicht einfach als normativ in WebSQL übernehmen, andererseits aber auch keine eigenes Set an SQL-Befehlen erfinden. Infolgedessen hat man die Standardisierung von WebSQL erst einmal auf Eis gelegt. Die anderen Browserhersteller haben sich auch geweigert, WebSQL zu implementieren, daher wird diese API zwar von drei Browsern unterstützt, aber hat derzeit keine Zukunft.
          Eine Alternative mit Zukunft ist IndexedDB, eine Art Key-Value-Store ähnlich CouchDB und MongoDB (wenn ich das richtig einschätze). Diese ist zwar noch nicht in Release-Browsern implementiert, aber hat breiten Zuspruch und wird standardisiert werden.
          Für das simple Key-Value-Speichern von z.B. JSON-serialisierten Objekten reicht wie gesagt localStorage aus.

          Mathias