代码之家  ›  专栏  ›  技术社区  ›  arachide

sqlite错误:/*SQL错误或缺少数据库*/

  •  0
  • arachide  · 技术社区  · 15 年前

    我有一个项目,我在其中存储了sqlite数据库文件“data.sqlite3”到 '组'&files'-'资源'

    以下是我的视图控制器源代码

    //-myviewcontroller.h
    #import "sqlite3.h"
    #define kFilename @"data.sqlite3"
    
    //myviewcontroller.m
    
    -(NSString *)dataFilePath
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        return [documentsDirectory stringByAppendingPathComponent:kFilename];
    }
    
    -(void)f
    {
        if (sqlite3_open([[self dataFilePath] UTF8String],&database)!=SQLITE_OK)
        //dataFilePath returns
        ///Users/interdev/Library/Application Support/iPhone Simulator/User/Applications/095C6E05-4EAE-4817-883E-A72E39D439E0/Documents/data.sqlite3 
        {
            sqlite3_close(database);
            NSAssert(0,@"Failed to open database");//no problem
        }    
    
        NSString *query = @"SELECT * FROM table1 ORDER BY ROW";//table1 is table name
        sqlite3_stmt *statement;
        NSInteger v=sqlite3_prepare_v2( database, [query UTF8String],
                                       -1, &statement, nil);
        NSString *zs= [NSString stringWithFormat:@"%d",v];
        NSLog(@" The buttontitile is %@ ",zs);
        if ( v == SQLITE_OK) { // ...
    }
    

    我在日志中检查了v的值,它总是1

    #define SQLITE_ERROR        1   /* SQL error or missing database */
    

    我不知道为什么会这样。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Lenny    15 年前

    您的代码似乎正在应用程序的“文档”文件夹中查找数据库。

    NSArray *paths = NSSearchPathForDirectoriesInDomains(
        NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    

    因此,如果data.sqlite3文件在您的resources文件夹中,应用程序将找不到数据库。最好是在applicaton的“documents”文件夹中创建和存储sqliteDatabase。例如/users/interdev/library/application support/iphone模拟器/user/applications/095C6E05-4EAE-4817-883E-A72E39D439E0/documents/data.sqlite3