2014-09-24 92 views
0

我正在使用SQLite3的东西,我不能准确找出为什么我得到一个错误。我已经看过其他SO帖子,没有人能够真正相当的指责这个错误,我已经尝试了一些东西。该代码在此行上失败(sqlite3_open(dbPath, &itemDB)==SQLITE_OK)。 我曾尝试:sqlite3查询不被执行

  • 注释该行并说sqlite3_open(dbPath, &itemDB),当我这样做,我的代码excecutes,但没有文件夹中从NSLog的
  • 错误“无法打开数据库文件”,所以我创建的datbase并将其放置在路径中以查看是否有帮助,但没有区别
  • 通过使用断点验证路径,路径是正确的,但数据库只是从未创建。

     -(void)openDatabase 
        { 
          NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
          NSString *docPath=[path objectAtIndex:0]; 
    
          // dbPathString=[docPath stringByAppendingPathComponent:@"items.db"]; 
          dbPathString = [docPath stringByAppendingPathComponent:@"items.sqlite"]; 
          char *error; 
          NSFileManager *fileManager=[NSFileManager defaultManager]; 
          if (![fileManager fileExistsAtPath:dbPathString]) { 
           const char *dbPath=[dbPathString UTF8String]; 
           //Create DB 
           if (sqlite3_open(dbPath, &items)==SQLITE_OK) 
    
            // sqlite3_open(dbPath, &items); 
    
         { 
        const char *sql_stmt= " CREATE TABLE IF NOT EXIST PERSON (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PRICE INTEGER)"; 
        sqlite3_exec(items, sql_stmt, NULL, NULL, &error); 
        sqlite3_close(items); 
        NSLog(@"Db Created"); 
         } 
           NSLog(@"%s", sqlite3_errmsg(items)); 
          } 
        } 
    

回答

0

您正在尝试写文档目录,而不是文件目录。
NSDocumentDirectory代替NSDocumentationDirectory

+0

哇......只是哇。从来没有看到过,问题是当我键入“NSD”我只是因为智能卡出现,并刚刚完成它。很简单 – 2014-09-24 11:16:15

-1

试试这个tutorial

NSString *docsDir; 
NSArray *dirPaths; 

// Get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0]; 

// Build the path to the database file 
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]]; 

NSFileManager *filemgr = [NSFileManager defaultManager]; 

if ([filemgr fileExistsAtPath: databasePath ] == NO) { 
    const char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) { 
     char *errMsg; 
     const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"; 

     if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) { 
      status.text = @"Failed to create table"; 
     } 
     sqlite3_close(contactDB); 
    } 
    else { 
     status.text = @"Failed to open/create database"; 
    } 
} 
+0

如何做一些*不同的代码*应该是一个答案? – 2014-09-24 07:32:32

-1

这将帮助ü

#import<sqlite3.h> 

    -(BOOL)createTable 
    { 
     NSArray *yourArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *filePath=[yourArray objectAtIndex:0]; 

    filePath =[filePath stringByAppendingPathComponent:@"yourdatabase.sqlite"]; 

    NSFileManager *manager=[NSFileManager defaultManager]; 

    BOOL success = NO; 
    if ([manager fileExistsAtPath:filePath]) 
    { 
     success =YES; 
    } 
    if (!success) 
    { 
     NSString *path2=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"yourdatabase.sqlite"]; 
     success =[manager copyItemAtPath:path2 toPath:filePath error:nil]; 
    } 
    createStmt = nil; 
    NSString *[email protected]"SecondTable"; 
    if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) { 
     if (createStmt == nil) { 

      NSString *query=[NSString stringWithFormat:@"create table (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PRICE INTEGER)]; 

      if (sqlite3_prepare_v2(database, [query UTF8String], -1, &createStmt, NULL) != SQLITE_OK) { 
       return NO; 
      } 
      sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL); 
      return YES; 
     } 
    } 
    return YES; 
    } 
+0

这既不是有效的Objective-C代码,也不是有效的SQL代码。 – 2014-09-24 07:31:30