[ai]SQLite bulk Insert 500レコード制限が無くなってる!

2014年夏「ハンディーターミナルアプリが自作できないか?」とネットをウロウロし辿り着いたのが下記のページ。

[SQLite Bulk Data Load–Hossein Amerkashi’s Blog(2014/5/6)]


「AppyBuilder(旧名Ai2LiveComplete)」開発者Hossein Amerkashiさんのブログ。
僕のハンディーターミナルアプリは、このページを参考に開発しました。

その際、もっとも難しかったのがbulk insert 500レコードの上限。
このページの注意書き:

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行のファイルを複数用意しろ

数千単位「商品・得意先マスターインポート機能」の開発に、すご~く苦労しました。

500行ごとに分けbulk insertファイルを作る

今使ってるBulk Insertファイル生成プログラムがこれ(MS-Access製)
前処理完了後に次の処理を始める為、目視で確認しながら各工程のボタンを押すアナログな仕様。

20190321MS-Accessソフト「GoodMonringSQL」作成とテスト


このソフトで作られる数百個のimportファイルを取り込むハンディーターミナルアプリ側「マスタ取込機能」もかなり複雑なんですよ!

この500行の壁がなくなれば開発が楽になるのになと思っていたら・・

新しいSQLiteには500行制限が無いそうです!

google検索で見つけた投稿がこれ
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のバージョンの調べ方を検索

[SQLiteのバージョン情報を取得(sqlite_version関数)]

select sqlite_version();

SQLite version確認用アプリを作成
SQLite versionを調べるコマンド


では、確認

Android 4.4.2端末で実行するとSQLite 3.7.11(500行上限あり)
SQLiteのbulk Insert 最大500レコードの上限無くなったのね!Android4.4.2のSQLite versionは3.7.11


Android 5.1端末で実行するとSQLite 3.8.6.1(ぎりアウト、500行上限あり)
SQLiteのbulk Insert 最大500レコードの上限無くなったのね!Android5.1のSQLite versionは3.8.6.1(SILVERバージョンで確認)


Android 6.0.1端末(=Nexus7)で実行するとSQLite 3.8.10.2(500行上限なし!!!)
Android6.0.1のSQLiteは3.8.10.2


Android 7.0端末(=Zenfone AR)で実行するとSQLite 3.9.2(500行上限なし!!!)
SQLiteのbulk Insert 最大500レコードの上限無くなったのね!Android7のSQLite versionは3.9.2


うふ、僕の新スマホ「Pixel 3a」
Android 9.0端末で実行するとSQLite 3.22.0(500行上限なし!!!)
SQLiteのbulk Insert 最大500レコードの上限無くなったのね!Android9のSQLite versionは3.22.0


では、実験

生成プログラムで作られたbulk insert文の500行目を501行目にコピペ
PRIMARY KEYの商品CDは存在しない番号、商品名は分かりやすく「501行目だよ」に変更
bulk insert文に501行目を加え、いざテスト!


501行目、インポート出来るかな?

僕の元愛機Zenfone AR(=Android7.0(SQLite version3.9.2))でテスト!

すごーい、インポート出来た!
SQLite 500行が超えれるかのテスト。Android7(SQLite 3.9.2)は501行目が登録出来ました!


ちょっと感動

苦労させられた500行制限が無くなってる!

Android 5.1端末でギリだめだったので、社内のスマホが全てAndroid 6以上になれば500行リミテーションは完全に無視できる!

数十個の得意先マスタが、1ファイルに!
数百個の商品マスタも、1ファイルに!

インポート周りのプログラムを7割削れる

でも、使えてるAndroid 4.x、5.x端末を買い換えるのはもったいないか!
しばらくこのまま・・・

Author: かたべ

コメントを残す

メールアドレスが公開されることはありません。