2012-08-24 29 views
11

Bu hatalarla ilgili pek çok yazı aramak zorunda kaldım, ancak yine de sorunu çözemiyorum. İşte benim kodum, neyin yanlış gittiğini görmek için bana yardım edebilir mi? Ben veritabanı sorunları (Bu durumda, Oracle) varken benim DBA söylüyorBöyle bir Tablo hatası yok

- (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 "); 
    } 
} 

cevap

21

SQL.sqlite hiçbir tablo Coffee yoktur.

SQLite, mevcut değilse veritabanı dosyasını sessizce oluşturur. Yani path yanlış varsa, boş bir veritabanı dosyası açıyorsunuz, tabii ki herhangi bir tablo içermiyor. Veritabanı dosyasının orada bulunduğundan ve boş olmadığından emin olun.

Sen SELECT * FROM sqlite_master; sorguyu çalıştırarak veritabanında orada ne tabloları görebilirsiniz.

+0

Ben "sqlite_master SELECT * FROM" SQL yürüterek Kahve tablosunu bulabilirsiniz ve veritabanı güncellenmesi konusunda sadece zaman, başarıyla açıldı Eğer SQLite tarayıcı veya komutu vardır: ile kontrol ediyoruz, hata – Sunny

+1

@Sunny meydana satır aracı, farklı dosya açıyor olabilirsiniz. 'UPDATE' yapmadan önce 'code '' log'unu log 've' sqlite_master 'ile aynı kod ile sorgulayın. – hamstergene

+0

tamam .. o şimdi çalışıyor :) Ayrıca veritabanı içindeki her tablonun adını göstermek için SQLite komut satırı aracı '.tables' seçeneğini kullanabilirsiniz size – Sunny

1

Bir şey, komut satırı araçlarını kullanarak sorguyu denemektir. böylece veritabanı oluşturulur iPhone Simülatörü

  1. Run Uygulama/Belgeler dizininde kopyalanan:

    Bu sqlite3 ve iPhone simülatörü ile ilgili sorunları teşhis şekli şöyledir.

  2. Başlat Terminali
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. Simülatörde yüklü olan tek bir Uygulamanın olması en iyisidir, bu yüzden Uygulamanın ne olduğu açık.
  4. sqlite3 SQL.sqlite ve sorgunuzu buradan deneyin. Şemanın neye benzediğini görmek için .schema komutunu da kullanabilirsiniz.

Sorgu orada çalışıyorsa ve uygulamanızda çalışmıyorsa, bir hatanın olduğunu biliyorsunuzdur, başka bir sqlite sorgu sorununuz veya bozuk şemanınız vardır.

+0

Garip oluşturuldu ancak değildir çünkü gerçekleşebilir app.sometimes yükleme sırasında oluşturulan app.the tabloları yeniden yüklemeyi deneyin o değil. Yeni tablo ekledim ve bu hata oluşur. Bazen çalıştığı zaman bir durumum var ve aniden kırılmış. – mr5

0

tablolar benim sorgu çalışıyor komut satırından ama Objective-C,

İlgili konular