• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 无法将数据添加到本地数据库 sqlite IOS

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:15:37 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这是我的代码:

为了创建数据库,在我的 ViewDidLoad 中:

 NSString *docsDir;
    NSArray *dirPaths;

    dirPaths=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];

    NSFileManager *filemgr=[NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath:databasePath]==NO)
    {
        NSLog(@"Creating DB");
        const char *dbpath=[databasePath UTF8String];

        if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
        {
            char *error_msg;
            const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, URL TEXT, EMAIL TEXT, CODE TEXT, FULL TEXT)";

            if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &error_msg) != SQLITE_OK)
            {
               NSLog(@"Failed to create table");
            }

            sqlite3_close(contactDB);

        } else {
            NSLog(@"Failed to open/create database");
        }
    } else {
        NSLog(@"DB exists");
    }

我可以看到输出消息"Creating DB"

然后我必须在其中添加我的数据:

sqlite3_stmt    *statement;

                const char *dbpath = [databasePath UTF8String];

                if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
                {
                    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO CONTACTS (url, email, code, full) VALUES (\"%@\", \"%@\", \"%@\", \"%@\")", url_2, mail, keycode,full_2 ];

                    const char *insert_stmt = [insertSQL UTF8String];

                    sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);
                    if (sqlite3_step(statement) == SQLITE_DONE)
                    {
                        NSLog(@"Contact added");
                    } else {
                        NSLog(@"Failed to add contact");
                    }
                    sqlite3_finalize(statement);
                    sqlite3_close(contactDB);
                } else {
                    NSLog(@"ROBLEM - CONTACT NOT ADDED");
                }

我看到 “问题 - 未添加联系人” 消息。

有什么帮助吗?



Best Answer-推荐答案


问题在于您在 NSDocumentationDirectory 中打开数据库,而不是在 NSDocumentDirectory 中。

一些不相关的观察:

  1. 如果 sqlite3_open() 失败,您应该查看有助于诊断问题根源的数字返回码。您可以在 sqlite3.h 头文件中查找值。

  2. 与您的代码示例无关的观察结果:您应该检查您的 sqlite3_prepare_v2() 返回代码,因为 SQL 错误通常在此处被识别,而不是在 sqlite3_step() .如果它返回 SQLITE_OK 以外的内容,则立即调用 sqlite3_errmsg() 以准确确定失败的原因。

  3. 您不应使用 stringWithFormatINSERT SQL 语句添加值。而是使用 ? 占位符,然后使用 sqlite3_bind_XXX()将值绑定(bind)到这些 SQL 值的函数。事实上,如果您插入的任何值包含引号,您的 SQL 就会失败(并且容易受到 SQL 注入(inject)攻击)。

关于ios - 无法将数据添加到本地数据库 sqlite IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149431/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap