Définition de user_version dans sqlite

J'ai vu d'autres questions ici sur la lecture de user_version, et cela semble fonctionner correctement pour moi. Cependant, j'essaie d'utiliser sqlite dans FMDB pour définir mon numéro de version et ce n'est pas le cas.

_db = [self openDatabase]; [_db executeUpdate:[StudentController creationSsortingng]]; [_db executeUpdate:[ReadingController creationSsortingng]]; [_db executeUpdate:[SessionController creationSsortingng]]; NSLog(@"User version is %i", userVersion); NSSsortingng *query = [NSSsortingng ssortingngWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; [_db executeQuery:query]; 

la sortie que je reçois est:

 2014-01-16 22:16:25.438 MyApp[2810:1c103] User version is 2 2014-01-16 22:16:25.439 MyApp[2810:1c103] Query is PRAGMA USER_VERSION = 2 2014-01-16 22:18:09.272 MyApp[2810:1c103] Database copyd and created 

et après l'exécution de l'application pour un peu, avec la sauvegarde de la database et le chargement très bien, je redémarre l'application et lire le numéro de version et je l'appelle pour vérifier le numéro de version:

 FMResultSet *ps = [_db executeQuery:@"PRAGMA USER_VERSION"]; NSDictionary *results = [[NSDictionary alloc] init]; while ([ps next]) { results = [NSDictionary dictionaryWithDictionary:[ps resultDictionary]]; } 

et les résultats sont un dictionary bien formé:

 (lldb) po results $0 = 0x09bf5770 { "user_version" = 0; } (lldb) 

Je voudrais savoir: pourquoi le numéro de version de l'user n'est pas paramétré pour moi?

    Si vous devez définir PRAGMA user_version, utilisez:

     [self.db setUserVersion:yourUserVersion]; // yourUserVersion is of uint32_t type 

    Pour lire l'user user_version en cours

     [self.db userVersion]; // returned value is of uint32_t type 

    FMDB l'encapsule depuis 2013, vous n'avez donc pas à vous en occuper vous-même.

    Documentation:

    http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html

    PS: @HalR Je pense que vous pouvez accepter ma réponse car elle est probablement plus utile pour les visiteurs qui searchnt "comment définir user_version PRAGMA" et cela résout également votre problème avec une solution plus propre.

    J'étais sur le point d'afficher une prime quand j'ai compris le problème. Et comme cela arrive souvent, j'étais juste une bonehead

    Je faisais executeQuery où j'aurais dû faire executeUpdate

     _db = [self openDatabase]; [_db executeUpdate:[StudentController creationSsortingng]]; [_db executeUpdate:[ReadingController creationSsortingng]]; [_db executeUpdate:[SessionController creationSsortingng]]; NSLog(@"User version is %i", userVersion); NSSsortingng *query = [NSSsortingng ssortingngWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; [_db executeQuery:query]; 

    devrait plutôt être:

     _db = [self openDatabase]; [_db executeUpdate:[StudentController creationSsortingng]]; [_db executeUpdate:[ReadingController creationSsortingng]]; [_db executeUpdate:[SessionController creationSsortingng]]; NSLog(@"User version is %i", userVersion); NSSsortingng *query = [NSSsortingng ssortingngWithFormat:@"PRAGMA USER_VERSION = %i", userVersion]; [_db executeUpdate:query]; 

    l'exécution d'un Pragma n'est PAS une requête, executeQuery ne fait rien avec. Il est plutôt dans la même catégorie que UPDATE , INSERT et DELETE .