私は2つのsqliteファイルを持っています.1つは古いもので、もう1つは最初のものと比べて新しいデータです。 2つのsqliteファイルを1つのコマンドと比較することは可能ですか?違いがあれば更新しますか?2つのsqliteファイルを比較することは可能ですか?
あなたは、彼らが異なっているか否かを決定するために、行の数を数えることができる任意のコメントに
おかげ
私は2つのsqliteファイルを持っています.1つは古いもので、もう1つは最初のものと比べて新しいデータです。 2つのsqliteファイルを1つのコマンドと比較することは可能ですか?違いがあれば更新しますか?2つのsqliteファイルを比較することは可能ですか?
あなたは、彼らが異なっているか否かを決定するために、行の数を数えることができる任意のコメントに
おかげ
単一コマンドはありません。しかし、いくつかはSQLite DB comparision toolsです。そして、あなた自身で似たようなことを達成することができます。私は2つの基本的な方法を見る。
SQLの方法。 Xデータベースを開き、Yデータベースにアタッチします。 SELECT ... FROM X.sqlite_masterを使用して、Xデータベースのテーブルリストを取得します。リストを見て、クエリを実行します。
SELECT * FROM x.tab
EXCEPT
SELECT * FROM y.tab
UNION ALL
SELECT * FROM y.tab
EXCEPT
SELECT * FROM x.tab
これは、各テーブルのテーブル内容の違いを返します。この問合せで戻された行ごとに、REPLACE SQLコマンドを実行できます。
ツールの方法。むしろ面白いですが、アプローチは手動同期にも使用されるかもしれません。 SQLite.exeツールを使用します。 Xデータベースを開き、.outputコマンドと.dumpコマンドを実行します。 Xデータベースに対しても同じ操作を繰り返します。両方の出力を比較するには、Beyond Compareのようなツールを使用します。
"SQL方法"コードを書こうとしてくれてありがとう。しかし実際には、すべてのデータが両方のテーブルから複数回(少なくとも4回)取り出され、デフォルトの照合を使用して列ごとに比較されるため、大きなテーブルではこれが遅くなると思います。 http://www.sqlite.org/lang_select.htmlを参照してください。 –
を歓迎、しかし、「古いものを」更新する方法を決定するために非自明です。 2つのファイルにアクセスできるので、最も簡単な方法は、古いテーブルを新しいテーブルと同じにする場合です。
1)行を数えます。古い場合<新規: 2)古いテーブルを切り捨てます 3)新しいテーブルのすべての行を選択し、古いテーブルに挿入します。
行数の変更のみを処理する場合は、行を処理しませんコンテンツの変更。 UPDATEステートメントが実行されていると、変更が失われます。だからIMHOは良い解決策ではありません。 –
このような機能のための直接コマンドはありません。
トリガーを使用して、データベースに加えられたすべての変更(INSERT/UPDATE/DELETE)の「ジャーナル」を含む別のリストを作成し、古いものに対して実行することができます。
しかし、このようなトリガをインストールする可能性がない場合は、すべてのファイル行を読み込み、新しい行が古いテーブル内で同じかどうかをテストし、UPDATE/INSERT/DELETE。
2番目の解決策は遅くなります。新しいコンテンツをすべて読み込んだ後、古いテーブルのすべての行コンテンツを検索する必要があります。
は非常に速く解決のために、私は3つのだけの可能性を参照してください:
高速バイナリ差分の場合、our source code repositoryにはデルファイ最適化ユニット(FOSSもあります)があります。
誰もコメントなしでこの-1を作ったのは誰ですか? ;) –
私はあなたが望むものはバイナリdiffingだと思います。 [この回答を参照してください](http://stackoverflow.com/questions/4580368/how-can-i-diff-2-sqlite-files) – bpercevic