テーブルを変更できる場合は、タイプTIMESTAMPの新しい列'modified_time'を追加します。行が更新されるたびにこの列を更新します。
ここで、どの行が更新されたかを知りたい場合は、次のSQLクエリを実行します。
select _id from table2 where modified_time = (select max(modified_time) from table2)
このクエリの結果は、最新に更新されたすべての行のIDを示します。
編集:
コメントで述べたように、「...サーバーは変更された値でデータをテーブルにプッシュします。更新値を取得して他のテーブルに更新する必要があります」、あなたにとって最良のオプションは、DBにトリガーを作成することです。最初のテーブルの更新に基づいて2番目のテーブルを更新します。これがアプローチです。
サーバーがデータを「table1」にプッシュし、更新された行を監視するとします。自動的に更新される別のテーブル2を作成します(または既存のものを使用します)。
次に、次のようにトリガーを作成します。
CREATE TRIGGER trigger1 AFTER UPDATE ON table1
BEGIN
update table2 SET modified_time = datetime('now') WHERE row_id = old._id;
END;
もちろん、table2は異なりますが、トリガーを使用してtable2の行を自動的に挿入または更新できるという考え方です。詳細については、次のSO投稿を参照してください。
sqlite3は「updated_on」日時フィールドを自動的に更新するトリガーをサポートしていますか?
SQLiteトリガーを使用して「LastModified」フィールドを更新する
サンプルアプリケーション:
説明したシナリオに基づいて、Androidアプリケーションでのトリガーの使用を示すサンプルアプリケーションを作成しました。Eclipseプロジェクトはここからダウンロードできます--trigger_example_eclipse_project.zip
簡単に言うと、サンプルアプリケーションには、製品価格の更新を受け取る製品テーブルがあります。そのため、トリガーを介して製品テーブルの更新に基づいて自動的に更新される別の更新テーブルを作成します。
EditTextフィールドとボタンによって製品テーブルの更新をシミュレートするUIがあります。また、最近の更新を表示するために、カーソルを使用して更新テーブルからデータをフェッチするListViewがあります。
ここにDbHelper.javaからのいくつかの関連するコードスニペットがあります
public class DbHelper extends SQLiteOpenHelper {
public static final String TABLE1 = "product";
public static final String TABLE2 = "updates";
public static final String COL_ID = "_id";
public static final String COL_NAME = "name";
public static final String COL_PRICE = "price";
public static final String COL_MODIFIED_TIME = "modified_time";
public static final String KINDLE = "Kindle";
private static final String SQL_CREATE_TABLE1 =
"CREATE TABLE product (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price INTEGER);";
private static final String SQL_CREATE_TABLE2 =
"CREATE TABLE updates (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price INTEGER, modified_time TIMESTAMP);";
private static final String SQL_CREATE_TRIGGER =
"CREATE TRIGGER price_update AFTER UPDATE OF price ON product"+
" BEGIN" +
" INSERT INTO updates(name,price,modified_time) VALUES(old.name,new.price,datetime('NOW'));"+
" END;";
public DbHelper(Context context) {
super(context, "sampledb", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_TABLE1);
db.execSQL(SQL_CREATE_TABLE2);
db.execSQL(SQL_CREATE_TRIGGER);
ContentValues cv = new ContentValues();
cv.put(COL_NAME, KINDLE);
cv.put(COL_PRICE, 99);
db.insert(TABLE1, null, cv);
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
}
}