2016-05-12 6 views
0

初期データを取り込みたいSQLiteデータベースがあります。 SQLite.swiftを使用してSQLite.swiftでデータベースを作成した後に初期データを挿入する

、この方法では動作しているようだ:

do { 
    let _ = try db.run(userDictionary.create(ifNotExists: false) {t in 
     t.column(wordId, primaryKey: true) 
     t.column(word, unique: true) 
     t.column(frequency, defaultValue: 1) 
     t.column(following, defaultValue: "") 
     }) 

} catch _ { 
    print("table already exists") 
    return 
} 

// Add some initial data for a new database 
print("adding new data") 
myMethodToInsertInitialData() 

これが機能する方法、私はエラーに初期データベースの作成後に毎回スローするifNotExists: falseを使用していますということですが。 (trueに設定しても、エラーは発生しません(または早期復帰を許可します)。)私は実際にはエラーとしてそれを意味しません。私はちょうど新しく作成されたデータベースにいくつかのデータを挿入したい。これを行う良い方法はありますか?これは誰もがやっていることですか?

+0

にあなたはそれがアプリケーションを実行している最初の時間であるかどうかをチェックするために 'NSUserDefaults'またはプロパティリスト' plist'にブールを設定することができません。 – TPlet

+0

@TPlet、私はそれを考えて、それは有効なオプションです。私がそれから離れている理由は、データベーステーブルを削除し、最初の実行後にそれを再作成することができるからです。上記の方法では、データベーステーブルが作成されるとき(およびそのときのみ)に初期データを追加します。 – Suragch

+0

まあまあです。私はSQLite.swiftを使用しなかったので、ここで質問があります。ドキュメントでは、たとえば、次のようなテーブルにアクセスできます。 'let users =テーブル( 'users')'。このテーブルが存在しない場合はどうなりますか?それはまったく無名ですか、それともクラッシュしますか? ' – TPlet

答えて

1

データがテーブルに利用可能であるかどうかをチェックしたり、SQLite.swift

do 
{ 
    db = try Connection(YOUR_DB_PATH) 
    let intCount : Int64 = db.scalar("SELECT count(*) FROM yourTableName") as! Int64 
    if (intCount == 0) 
    { 
     //callWebServiceCall() 
    } 
    else 
    { 
     //getDataFromDB() 
    } 
} 
catch 
{ 
    print("error") 
} 
+0

私がドキュメントを読むと、私はスカラーをよく理解できませんでした。したがって、テーブルが非常に大きくなる場合でも、これは高速な検索になります。 – Suragch

+0

@Suragchはいそれは数えるだけです! –

関連する問題