0

単一の列を持つデータベースがあり、このように作成します

function populateDB(tx){
   tx.executeSql('CREATE TABLE IF NOT EXISTS RESULT(result, UNIQUE(result))');  
}

ただし、オブジェクトをテーブルに書き込もうとすると、次のエラーが発生します。

ステートメントを実行できませんでした (19 制約が失敗しました)

このエラーは、NOT NULL および PRIMARY KEY をセットアップに追加した場合にのみ表示されます。それがないと、データベースに重複を書き込み続けます(phonegap iOSアプリケーションの起動時にデータベースにWebサービスからのデータを入力するため、データベースレベルで重複行をキャッチしたい)

最初は「PRIMARY KEY」しかありませんでしたが、エラーは制約について何かを示しているため、主キーは「NOT NULL」でなければならないと想定していましたが、コードに追加しても同じエラーが発生しました。

どうすればこれを解決できますか。前もって感謝します

編集:おそらく、文字列化された JSON オブジェクトを結果列に書き込むことを知っておくことが重要です。

edit : この関数にオブジェクトを挿入します。基本的に私はそれを一つずつ行います:

this.save = function(){
    db.transaction (function(transaction){
        object = $.toJSON(self);
        object = encodeURI(object);
        transaction.executeSql('INSERT INTO RESULT (result) VALUES ("'+object+'")');
        },
        errorCB, 
        successCB
    );
}

編集: セットアップ テーブル コードを更新しました。エラーはすべての行で発生するわけではありませんが、オブジェクトは実際には一意です。

4

1 に答える 1

0

「IF NOT EXISTS」がここでのキャッチです。SQLite クエリで「IF NOT EXISTS」、「REPLACE」、「IGNORE」などの条件を使用すると、制約が失敗します。

既に存在するテーブルを作成しようとすると、制約 (ここでは、テーブルが既に存在する場合はテーブルを再度作成しない) が失敗し、クエリが失敗します (これは実際に必要です。テーブルを複製したくありませんよね? ) エラー制約が失敗したことを示します。

INSERT または REPLACE、INSERT または IGNORE などで同様のエラーが発生する場合があります。

于 2013-06-26T06:38:24.123 に答える