-1

私はsqliteローカルデータベースを持っています。リモート サーバーからローカル データベースに新しいデータのみを挿入したいのですが、時刻フィールドがないため、新しいレコードのみを挿入するのは困難です。どうすればこれを実現できますか? ハイブリッド モバイル アプリにはこれが必要です。事前に感謝します。

2 つのテーブル:

私のローカルdbテーブルは

tbl_orders
 id      name      age
  1       yyy       30
  2       xxx       20

私のリモートdbテーブルは

tbl_orders
 id      name      age
 1       yyy       36
 2       xxx       20
 3       vvv       40
 4       zzz       37

上記では、リモート テーブルにさらに 2 つのレコードが含まれており、最初のレコード (age 列) の値も変更されています。テーブル全体。

4

2 に答える 2

0

あなたのテーブルは 2 つの DB に複製されていますか?

はいの場合、WHERE 条件で NOT EXISTS 句を使用して INSERT を実行できます。または、ソース テーブルに日時フィールドを追加します。

別の方法: ソース DB (fl_sent) にブール値フィールドを追加し、DB に新しい行を作成するか、それらを更新するときにトリガーによって入力されます。デフォルト値は false です。DB を同期する場合は、このフィールドに基づいて選択します

SELECT * FROM myTable WHERE fl_sent = 0

より完全な回答については、テーブルを投稿してください。

コメント後に編集:

解決策 1: リモート テーブル (ソース) にフィールドの日付を追加し (必要に応じて、このフィールドのトグルに関するトリガーを記述します)、この日付に基づいて送信可能なクエリを実行します。

解決策 2: ゼロに設定されたフィールド フラグ (fl_sent) を追加し (必要に応じて、このフィールドのトグルに関するトリガーを記述します)、このフラグに基づいて送信可能なクエリを実行します。

于 2013-08-29T09:29:05.350 に答える
0

UNIQUEに制約を追加する必要がありますid

ローカル テーブルの再定義:

CREATE TABLE tbl_orders(UNIQUE id, name, age);

またはテーブルを再定義せずに

CREATE UNIQUE INDEX tbl_orders_id ON tbl_orders(id);

制約を使用すると、更新は単一のステートメントになります。

INSERT OR REPLACE INTO local.tbl_orders SELECT * FROM remote.tbl_orders;
于 2013-08-29T10:25:19.060 に答える