2

複数のレコードを更新したい(DBAccess ORM)。特定のフィールドの条件によって。name = "atul" の set city = "Goa" のように。

次の迅速なコードを確認してください。正常に動作しています。しかし、for ループを使用せずに単一のクエリでこれを行う方法。

func updateRecordsByName(userName: String) {

    //like userName = atul;
    let userArr : DBResultSet = User.query().whereWithFormat("name = %@", withParameters:[userName]).fetch();

    for data in userArr {

        (data as! User).city = "Goa";

        (data as! User).commit();
    }
}

行/ループの数を減らし、上記のクエリ コードを改善するための完璧なソリューションを提案してください。

4

1 に答える 1

0

特に、キャッシュされたオブジェクトと開いているオブジェクトは、SQLite で更新された値がわからないため、本質的に危険な生の SQL を実行する以外に方法はありません。

オブジェクトのループに問題はありますか? パフォーマンスの場合は、更新をトランザクション内にラップすると、速度が向上します。

    DBTransaction.transaction({ 
         // put all your writes here

         for data in userArr {
             (data as! User).city = "Goa";
             (data as! User).commit();
         }
    }) { 
         // rollback
    }

また、DBAccess から引き継がれたため、SharkORM にアップグレードします。

http://sharkorm.comhttps://github.com/sharksync/sharkorm

必要に応じて、更新機能をいつでもクエリ モジュールに追加できます。または、Issue 経由で機能リクエストを提出してください。

于 2016-07-20T13:27:47.427 に答える