日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

sqlite バージョン 2 から 3に変換する方法

2010-11-02
公式サイトのformatchng.htmlには、2と3は、完全に互換性がないと書いてあります。
ということで、変換が必要になります。

公式サイトから、sqlite.exe sqlite3.exeをダウンロードします
(※sqlite.exe(sqlite-2_8_17.zip): ソース sqlite-2.8.17.tar.gz


コマンドプロンプトなどで
変換するコマンド
直接生成する場合
sqlite.exe old.db .dump | sqlite3.exe new.db

一度テキストに保存したい場合
sqlite.exe old.db .dump > old_db_dump.sql
ここで、必要に応じて、old_db_dump.sqlを修正します
sqlite3.exe new.db < old_db_dump.sql

※問題点
sqlite.exe(2.8.17) のダンプがキーワードをエスケープしない欠陥があるので
定義済みキーワードを使ったテーブル、列名などがある場合、
取り込みでエラーを起こす可能性があります
その場合、一度テキストにダンプして一括修正後、取り込みが必要になります
sqlite3.exeのダンプでは、問題ないようです。

例 sqlite.exe のダンプ: INSERT INTO item VALUES(1);
例 sqlite3.exe のダンプ: INSERT INTO "item" VALUES(1);

例: create table "where" (id text);
INSERT INTO "where" VALUES(1);

追記
sqlite.exe(sqlite 2.8.17)のパッチ

sqlite-2.8.17-47fee16ba9bd8ab2.diff
--- SQLite-47fee16ba9bd8ab2/src/shell.c 2007-01-08 16:20:28.000000000 +0900
+++ SQLite-47fee16ba9bd8ab2/src/shell.c 2010-11-04 23:00:00.000000000 +0900
@@ -421,7 +421,7 @@
p->zDestTable = 0;
}
if( zName==0 ) return;
- needQuote = !isalpha(*zName) && *zName!='_';
+ needQuote = *zName!='_';
for(i=n=0; zName[i]; i++, n++){
if( !isalnum(zName[i]) && zName[i]!='_' ){
needQuote = 1;

追記: 2011.12
バイナリデータを含んでいた場合、DUMPに失敗することがわかりました。
patch2を作りました。
別記事になります。
sqlite patch p2
で検索してください。



PR

[PR]