↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > GRDB

GRDBでSqlLiteを扱う(Swift3.0)

サンプル画像

Swift 3.0になってSQLiteを触るために、以前まで利用していたSwiftData.swiftを 移管していたのですが、Swift3にはサポートされておらず 探していていきついたのがGRDB.swift。SQL構文を直接実行できるものを探していて、githubでもかなりアクティブに更新されていて頭一つぬいた存在に感じましたバージョンアップが早い。

SQLite.swiftやFMDBに比べても、GRDBは引けをとりません。Core DataやRealmを検討している人もGRDBは簡易的にマルチスレッドな アプリケーションを開発することができるので検討してもよいかもしれません。私自身はこの名前のGRDBがシンプルで気にいっています。

インストールや利用時に関してメモを記載してまいります。

参考:groue/GRDB.swift

やってみた

■ 準備の為にCocoaPodsをインストールする


まず私はCocoaPodにてインストールしました。このCocoaPodも使っていない人は慣れないパッケージ管理のソフトですので、 こちらの以前書いた記事(CocoaPodsとは何なのか? )を参考にして、まずはCocoaPodをインストールして下さい。

CocoaPod経由以外でもインストールは可能(Carthageや手動でのプルジェクトへの取り込み)なので、 GRDBのインストールページをご参照ください。※私はこの方法でしか成功できませんでした、、、。


■ CocoaPodsでプロジェクトディレクトリでpod処理を実行してxcworkspaceを作成する。


ここで私はハマりました、、、、、以下CocoaPodsでハマった箇所を共有です



# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'pocketbible' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!
  pod 'GRDB.swift'

  # Pods for pocketbible

  target 'pocketbibleTests' do
    inherit! :search_paths
    # Pods for testing
  end

end

↑こちらが私のPodfile(CocoaPodsが利用する設定ファイル)の中身。黒字の部分をデフォルトの設定ファイルに追加して下さい。 その後CocoaPods経由でインストール。注意!既にCocoaPodsを利用している人は、CocoaPodsを最新にするためにpod updateするのを忘れずに!私は 気づかずに古いGRDBをインストールしてしまってハマってしまいました。GRDBのページにあるバージョンを確認してSwift3.0のバージョン(恐らく0.101.1以上)か をご確認ください。そして、xcodeprojではなくxcworkspaceを実行してXCodeを起動してください。


■ 実際に利用する方法

必ずimport GRDB して下さい!これをしないと中途半端にコンパイルが通る場合がありましたので、 必ず明記的にimort GRDBを最初に追記することが必要です。

↓準備。以下ではGlobalDataのdbQueueというグローバル変数に仮にセットして説明しています。

databasePathにはアクセスしたいsqliteのデータファイルのパスをセットして下さい


        do{
            GlobalData.dbQueue = try DatabaseQueue(path: databasePath);
        }catch{
        	//ERROR
        }
		

↓UPDATEの場合(レスポンス不要でSQLのみ実行の場合)



        do{
            try GlobalData.dbQueue.inDatabase { db in
                try db.execute("UPDATE hogehoge_table SET hogehoge_field = 'test'")
            }
        }catch{
        	//ERROR
        }
			

↓SELECTの場合(レスポンス必要な場合)



do{
            try GlobalData.dbQueue.inDatabase { db in
                let rows = try Row.fetchCursor(db, "SELECT * FROM hogehoge_table")
                
                while let row = try rows.next() {
                    if row.value(named: "hogehoge_field1") != nil {
                        let hogehoge_int = row.value(named: "hogehoge_field1") as Int
                        let hogehoge_string = row.value(named: "hogehoge_field2") as String
                        ...
                    }
                }
            }
        }catch{
            //ERROR
        }

			

上記がGRDBを利用してsqlLiteのデータベースファイルにSQLを用いてアクセスしてデータをとる方法です。SQLが苦手な方は別の方法で取得も可能なようですのでGRDBのRecordページをご確認下さい。 私は直接SQLが書かれていた方が理解しやすかったので↑の方法を利用しています。

まとめ

このGRDBから今後は移管しませんように、、、、

↓こんな記事もありますよ!


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!