2012-08-24 42 views
11

Tuve que buscar muchas publicaciones relacionadas con estos errores, pero aun así no puedo solucionar el problema. Aquí está mi código, ¿alguien puede ayudarme a ver qué está pasando?No Such Table error

- (void) copyDatabaseIfNeeded { 


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"]; 

    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) 
    { 
     NSLog(@"Database opened successfully"); 

if(updateStmt == nil) { 
      NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"]; 
    const char *mupdate_stmt = [updStmt UTF8String]; 

if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){ 
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection)); 
      } else { 
       NSLog(@"Update successful"); 
      } 

     } 
     if(SQLITE_DONE != sqlite3_step(updateStmt)) 
      NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection)); 
     else { 
      sqlite3_reset(updateStmt); 
      NSLog(@"Step successful"); 

     } 
    } 
    else 
    { 
     NSLog(@"Error in opening database "); 
    } 
} 

Respuesta

21

No hay tabla Coffee en SQL.sqlite.

SQLite crea silenciosamente el archivo de base de datos si no existe. Por lo tanto, si tiene el path incorrecto, está abriendo un archivo de base de datos vacío, que por supuesto no contiene ninguna tabla. Asegúrese de que el archivo de la base de datos exista allí y que no esté vacío.

Puede ver qué tablas hay en la base de datos ejecutando la consulta SELECT * FROM sqlite_master;.

+0

Puedo encontrar la mesa de centro ejecutando el SQL "SELECT * FROM sqlite_master", y la base de datos se abre con éxito, justo cuando se trata de actualizar, el error ocurre – Sunny

+1

@Sunny Si lo está comprobando con el navegador SQLite o comando- herramienta de línea, puede abrir un archivo diferente. Vierta 'ruta' en el registro y consulte' sqlite_master' con el mismo código justo antes de hacer 'UPDATE'. – hamstergene

+0

bien .. está funcionando ahora :) muchas gracias – Sunny

1

Una cosa que mi DBA me dice cuando tengo problemas de bases de datos Oracle (en este caso), es tratar la consulta utilizando las herramientas de línea de comandos.

Ésta es la forma en que le diagnosticar problemas con sqlite3 y el simulador de iPhone:

  1. ejecutar la aplicación en el simulador de iPhone por lo que se crea la base de datos/copiado en el directorio de documentos.
  2. Terminal de inicio
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. Lo mejor es tener solo una aplicación instalada en el simulador, así que es obvio qué aplicación es qué.
  4. sqlite3 SQL.sqlite y pruebe su consulta desde allí. También puede usar el comando .schema para ver cómo se ve el esquema.

Si la consulta funciona allí y no en su aplicación, entonces sabe que tiene un error, de lo contrario, tiene un problema de consulta sqlite o un esquema defectuoso.

+0

Extraño pero, desde la línea de comandos mi consulta está trabajando, pero a partir de Objective-C, no es Acabo de agregar una nueva tabla y este error ocurre. Incluso tengo una situación en la que funciona a veces y de repente se rompe. – mr5

0

intente volver a instalar las mesas app.the se crean en el momento de la instalación de los app.sometimes puede ocurrir porque las tablas no se crean

Cuestiones relacionadas