2014年夏「ハンディーターミナルアプリが自作できないか?」とネットをウロウロし辿り着いたのが下記のページ。
[SQLite Bulk Data Load–Hossein Amerkashi’s Blog(2014/5/6)]
「AppyBuilder(旧名Ai2LiveComplete)」開発者Hossein Amerkashiさんのブログ。
僕のハンディーターミナルアプリは、このページを参考に開発しました。
このページの注意書き:
Bulk insert into SQLite database has a limit of 500 rows. If you intend to insert over 500 rows, you’ll have to break your insert statements.
1度にインポート出来るのは500行。
それ以上なら、500行のファイルを複数用意しろ
レコード数1万行超の「商品・得意先マスターインポート機能」開発に、すご~く苦労しました。
500行ごとに分けbulk insertファイルを作る
今使ってるBulk Insertファイル生成プログラムがこれ(MS-Access製)
前処理完了後に次の処理を始める為、目視で確認しながら各工程のボタンを押すアナログな仕様。
1000個近いbulkファイルを取り込むハンディーターミナルアプリ側プログラムもかなり複雑。
この500行の壁がなくなれば開発が楽になるのになと思っていたら・・
新しいSQLiteには500行制限が無いそうです!
since version 3.8.8,the number of rows in a VALUES clause is no longer limited by SQLITE_LIMIT_COMPOUND_SELECT.
version 3.8.8以降、行数での制限は無くなった!
早速、確認
まず、SQLiteのバージョンの調べ方を検索
select sqlite_version();
では、確認
Android 4.4.2端末で実行するとSQLite 3.7.11(500行上限あり)
Android 5.1端末で実行するとSQLite 3.8.6.1(ぎりアウト、500行上限あり)
Android 6.0.1端末(=Nexus7)で実行するとSQLite 3.8.10.2(500行上限なし!!!)
Android 7.0端末(=Zenfone AR)で実行するとSQLite 3.9.2(500行上限なし!!!)
うふ、僕の新スマホ「Pixel 3a」
Android 9.0端末で実行するとSQLite 3.22.0(500行上限なし!!!)
追記2020/5/23:Andoid10アップグレード後再実行してもSQLite 3.22.0でした。
では、実験
生成プログラムで作られたbulk insert文の500行目を501行目にコピペ
PRIMARY KEYの商品CDは存在しない番号、商品名は分かりやすく「501行目だよ」に変更
501行目、インポート出来るかな?
僕の元愛機Zenfone AR(=Android7.0(SQLite version3.9.2))でテスト!
ちょっと感動
苦労させられた500行制限が無くなってる!
Android 5.1端末でギリだめだったので、社内のスマホが全てAndroid 6以上になれば500行リミテーションは完全に無視できる!
数十個の得意先マスタが、1ファイルに!
数百個の商品マスタも、1ファイルに!
インポート周りのプログラムを7割削れる
でも、使えてるAndroid 4.x、5.x端末を買い換えるのはもったいないか!
しばらくこのまま・・・