为什么不在ios中的sqlite中创建表

为什么不在ios中的sqlite中创建表,ios,objective-c,database,sqlite,Ios,Objective C,Database,Sqlite,这是我在现有数据库中添加表的代码。我的代码成功回调了sqlite3\u prepare\u v2,并给出了创建的日志表,但当我使用终端打开sqlite数据库时,我看到没有创建表。我的数据库表名是由pragma声明的fz1.sqlite:#define kDBName@“fz1.sqlite” 您的实现似乎没有错误。我认为您正在打开放置在应用程序包中的db文件,它将不会随着您执行的查询而更新 启动应用程序后,数据库文件将复制到设备/模拟器的文档目录。因此,如果您在iOS模拟器中运行应用程序,请检查

这是我在现有数据库中添加表的代码。我的代码成功回调了
sqlite3\u prepare\u v2
,并给出了创建的日志
,但当我使用终端打开sqlite数据库时,我看到没有创建表。我的数据库表名是由pragma声明的
fz1.sqlite
#define kDBName@“fz1.sqlite”


您的实现似乎没有错误。我认为您正在打开放置在应用程序包中的db文件,它将不会随着您执行的查询而更新

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

打开它并检查是否已更新

使用db file iOS Simulator的Document Dir文件夹结构示例

/用户/XYZ/库/应用程序支持/iPhone 模拟器/7.1/Applications/B5EC1893-B38F-4AB4-AE7C-48EF685EE35F/Documents/db.sqlite


如果使用
[nsstringwithformat:@“YourSqlStatement%@%@”,参数1,参数2]将参数放入查询中-(sqlite3*)mydb:(NSString*)query
之前,您可能正在进行SQL注入。如果要执行此操作,请尝试使用
sqlite\u bind\u text
加载参数,然后执行
sqlite\u step


如果这与您的实现无关,请尝试记录
sqlite\u exec
的输出,并查看错误消息。

sqlite3会告诉您问题出在哪里。开始这样做,您将更接近于解决您的问题。打印出打开数据库的位置。对于一个SQLite新手来说,你没有打开你认为应该打开的文件的几率要大于50:50。OP打开的是文档目录中的数据库,而不是应用程序包。
-(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;
  }