这是我在现有数据库中添加表的代码。我的代码到达成功回调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;
}
答案 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
的输出并查看您的错误消息。