为什么Table不是在ios中的sqlite中创建的

时间:2014-07-07 08:10:15

标签: ios objective-c database sqlite

这是我在现有数据库中添加表的代码。我的代码到达成功回调sqlite3_prepare_v2并给出日志table created,但是当我使用终端打开我的sqlite数据库时,我看到没有创建表。我的数据库表名是由{pragma}声明的fz1.sqlite#define kDBName @"fz1.sqlite"

-(sqlite3 *)mydb:(NSString *)query{



static sqlite3 *database;
static sqlite3_stmt *enableForeignKey;



if (database == NULL) {
    sqlite3 *newDBconnection;


    // first get the path for the document directory of the application
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dbpath = [paths objectAtIndex:0];
    NSString *path = [dbpath stringByAppendingPathComponent:kDBName];


    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) {
        NSLog(@"Database Successfully Opened :)");
        database = newDBconnection;

        if (sqlite3_prepare_v2(database,[query UTF8String], -1, &enableForeignKey, NULL) != SQLITE_OK) {
            NSLog(@"ERROR IN PRAGMA!");
        }
        else{

            sqlite3_exec(database, [query UTF8String], NULL, NULL, NULL);

            NSLog(@"faiz's table created");
        }

        sqlite3_finalize(enableForeignKey);

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

return database;
  }

2 个答案:

答案 0 :(得分:1)

您的实施似乎没有错误。我认为您正在打开放置在Application包中的db文件,它将根据您执行的查询进行更新。

启动应用程序后,数据库文件将被复制到设备/模拟器的文档目录中。因此,如果您在iOS模拟器中运行应用程序,请检查文档目录文件夹中的数据库。

打开它并检查是否更新。

带有db文件iOS Simulator的Document Dir的文件夹结构示例

  

/ Users / XYZ / Library / Application Support / iPhone   模拟器/ 7.1 /应用/ B5EC1893-B38F-4AB4-AE7C-48EF685EE35F /文档/ db.sqlite

答案 1 :(得分:1)

如果您在调用[NSString stringWithFormat:@"YourSqlStatement %@ %@",parameter1,parameter2];之前使用-(sqlite3 *)mydb:(NSString *)query或类似内容将参数放入查询中,则可能是SQL自己注入。如果您这样做,请尝试使用sqlite_bind_text加载参数,然后sqlite_step执行。

如果这与您的实施不相关,请尝试记录sqlite_exec的输出并查看您的错误消息。