Как вставить в WebSQL/Phonegap SQLite с автоинкрементом?

Я работаю над небольшим проектом Phonegap, и у меня проблемы с поиском правильного синтаксиса для вставки в базу данных WebSQL. Я читаю ответ jSON от API и пытаюсь кэшировать его в базе данных WebSQL/SQLite, но всегда получаю сообщение об ошибке. База создана, таблица тоже... проблема вставки. Для вставки разных строк в базу данных я перебираю свой JSON. Все переменные устанавливаются и отображаются, когда я отображаю их с помощью console.log. Что я делаю не так?

данные песни = JSON.parse (данные песни); // JSON Gespielte Songs for ALLE Clubs abfragen, in SQLite speichern, und bei "success" weiter an den clubboxstyler weiterleiten

        db = window.openDatabase("database.db", "1.0", "Demo", -1);
        db.transaction(function(tx){
             tx.executeSql('CREATE TABLE IF NOT EXISTS activity_stream (id integer primary key autoincrement, band text, clubID integer, time text, title text)');
             for (var kay in songdata) 
                {
                var Xband = songdata[kay].band;
                var XclubID = songdata[kay].clubID;
                var Xtime = songdata[kay].time;
                var Xtitle = songdata[kay].title;
                console.log(Xtitle);
                tx.executeSql('INSERT INTO activity_stream (id, band, clubID, time, title) VALUES (1, ?, ?, ?, ?), [1, Xband, XclubID, Xtime, Xtitle]');
                }

        }, function(e) {
            console.log("ERROR: " + e.message);
        });

Спасибо за помощь! Очень признателен.


person lightwaver    schedule 02.03.2015    source источник


Ответы (1)


Что ж, в вашем фрагменте кода вы явно устанавливаете один и тот же идентификатор (равный «1») для каждой вставляемой строки. Это не может работать, так как первичные ключи должны отличаться, верно? :)

Суть автоинкрементных столбцов заключается в том, что вы не предоставляете для них значения, они настраиваются автоматически. Поэтому просто опустите столбец «id» при вставке, например:

tx.executeSql('INSERT INTO activity_stream (band, clubID, time, title) VALUES (?, ?, ?, ?), [Xband, XclubID, Xtime, Xtitle]');
person M Kowalski    schedule 02.03.2015
comment
Большое спасибо,molderek - кроме того, у меня была глупая синтаксическая ошибка. tx.executeSql('INSERT INTO activity_stream (band, clubID, time, title) VALUES (?, ?, ?, ?)', [Xband, XclubID, Xtime, Xtitle]); - person lightwaver; 05.03.2015