ウェブアプリで使用していたSqliteデータベースをiOSで使う方法
lamp環境などのウェブアプリで使用していたSqliteデータベースをiOSで使いたいという場合がある。
Sqliteデータベースに入っているデータをそのまま使いたいという場合などがそれにあたる。
ウェブアプリで使っていた xxx.sqlite ファイルをxcodeプロジェクトに追加しただけでは操作できないのだ。
その場合の解決方法は次の通りだ。
その前に、なぜsqliteファイルを操作できないのかというとiOSでSqliteを扱う場合には、CoreDataという仕組みを使ってプログラムからデータベースを操作することになるため、CoreDataの仕様に合わせる必要がある。
CoreData用のSqliteは、通常のSqliteと異なる部分がある。
1. テーブル名とカラム名のプレフィックスとして「Z」を先頭につける必要があること。
2. Z_ENT, Z_OPT という2つのカラムが各テーブルに必要となること。
-
既存のSqliteファイルをiOSで使うためには、この変換をする必要があるのだ。
具体的には
1. Xcodeプロジェクト作成時にCoreDataを使うをチェックする。
これを行うことで、CoreDataスタックと呼ばれるCoreDataを使うためのメソッドが準備される。
2. xxx.xcdatamodel にテーブルスキーマを定義する。
スキーマ定義ではカラム名やテーブル名にはZプレフィックスは付けない。
3. 既存のSqliteファイルをプロジェクトに追加する。
4. CoreDataスタック中に記述されているSqliteファイル名とxcdatamodelファイル名をプロジェクトに存在しているファイル名に合わせる。
5. プロジェクトの.plist に Application supports iTunes file sharing YES を定義する。
6. iPhoneをUSB接続し、プロジェクトを一度実行し、SqliteファイルにCoreData用テーブルを作成する。
テーブル名とカラム名の先頭にZがついて、Z_ENT, Z_OPT カラムが追加されたテーブルが作成されている。
7. itunesのデバイス画面中のアプリ画面からsqliteファイルを取得する。(コンピュータに保存する。)
8. ターミナルを起動し、sqlite3 xxx.sqlite を実行する。
プロジェクトフォルダを直接操作せず、事前に作業用フォルダにsqliteファイルをコピーしておく。
9. 既存のテーブルからCoreData用のテーブルにデータをコピーする。
ZなしからZありテーブルへコピーする。
insert文はメモ帳で作成してからコピぺした方が良い。
例:
既存テーブル名:table
CoreData用テーブル:Ztable
insert into Ztable (zcolumnA, zcolumnB) select columnA, columnB from table;
\* 大文字小文字は区別されない。
10. 次のsql文を実行して正常にコピーされたことを確認する。
select * from Ztable;
11. .q と入力しsqliteを終了する。
12. Finderで、プロジェクトフォルダのsqliteファイルをsqlite3コマンドで変更したもので上書きコピーする。
これでCoreDataから既存のSqliteファイルを扱えるようになる。
2023年12月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   |   | 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 |
31 |   |   |   |   |   |   |
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち