2

我在 sqlite 中手动创建了一个名为“dept”的表,其中包含用户名(作为 Varchar)和密码(作为整数)。

我使用以下代码更新表

NSString *database2=[[NSBundle mainBundle]pathForResource:@"deptDatabase" ofType:@"sqlite"];
NSString *databasePath2=[NSString stringWithFormat:@"%@",database2];

const char *dbPath=[databasePath2 UTF8String];
if (sqlite3_open(dbPath, &dbHandler)==SQLITE_OK) {
    NSLog(@"database Opened");
    const char* updateQuery="update dept set password=1234 where username='suren'";
    sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(dbHandler, updateQuery, -1, &stmt, NULL)==SQLITE_OK) {
        NSLog(@"Query Executed");
    }
}

sqlite3_close(dbHandler);

但表格似乎没有更新。谁能告诉我如何通过更改上述代码来更新表格。提前致谢

4

2 回答 2

3

您不能不更新 mainBundle 中的文件,这些文件是只读的。

要更改数据库,您必须将其复制到文档目录。并使用文档目录中的数据库,而不是主包中的数据库。如果没有文件,则仅将主包中的一个用作要复制到文档目录的有效负载文件。


为什么在这里创建一个新字符串:

NSString *database2=[[NSBundle mainBundle]pathForResource:@"deptDatabase" ofType:@"sqlite"];
NSString *databasePath2=[NSString stringWithFormat:@"%@",database2];

database2相同databasePath2。你只是在这里用尽内存。

于 2012-05-22T09:18:40.253 回答
3

将文件从捆绑包复制到文档目录

NSString *databaseName = @"YOUR DB NAME WITH EXTENSION";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];

NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success=[fileManager fileExistsAtPath:databasePath];

if (!success) {

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];

    // Copy the database from the package to the users filesystem
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];  
}

然后你可以在路径 databasePath (文档目录)中工作

const char *dbPath=[databasePath UTF8String];
if (sqlite3_open(dbPath, &dbHandler)==SQLITE_OK) {
    NSLog(@"database Opened");
    const char* updateQuery="update dept set password=1234 where username='suren'";
    sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(dbHandler, updateQuery, -1, &stmt, NULL)==SQLITE_OK) {
        NSLog(@"Query Executed");
    }
}

sqlite3_close(dbHandler);

希望它有帮助..快乐编码:)

于 2012-05-22T10:17:02.160 回答