菜鸟教程小白 发表于 2022-12-13 13:00:27

objective-c - 无法从 sqlite3 数据库中选择


                                            <p><p>我在读取 sqlite3 数据库时遇到了一些问题。</p>

<pre><code>-(void) readMessengesFromDatabase {
    sqlite3 *database;

    messenges = [ init];

    if(sqlite3_open(, &amp;database) == SQLITE_OK) {
      NSLog(@&#34;Connection OK&#34;);
      const char *sqlStatement = &#34;select * from MessagesData&#34;;
      sqlite3_stmt *compiledStatement;
      if(sqlite3_prepare_v2(database, sqlStatement, -1, &amp;compiledStatement, NULL) == SQLITE_OK) NSLog(@&#34;connect to table OK&#34;);    else NSLog(@&#34;connect to table FALSE&#34;);
      if(sqlite3_prepare_v2(database, sqlStatement, -1, &amp;compiledStatement, NULL) == SQLITE_OK) { //не проходит условие
            NSLog(@&#34;Connection to table OK&#34;);
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                NSLog(@&#34;Read rows OK&#34;);
                NSString *dbMessageID = ;
                NSString *dbMessageText = ;
                NSString *dbMessageDate = ;
                NSString *dbMediaOrNot = ;

                Message *messege = [ initWithName:dbMessageText messageID:dbMessageID messageDate:dbMessageDate mediaOrNot:dbMediaOrNot];

                ;

                ;
            }
      }
      sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);   
}
</code></pre>

<p>我的第一个 NSLog 显示了与数据库的连接是否正常。但下一步“select * from MessagesData”和 <code>if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) NSLog(@"connect to table OK"); else NSLog(@"connect to table FALSE");</code> 显示“连接到 FALSE 表”。尝试使用终端从我的数据库表中选择并得到错误 <strong>"unable to open database file"</strong> 。我的错误在哪里?我的代码中没有发现任何问题...</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您打印 <code>sqlite3_prepare_v2</code> 返回的错误代码,诊断问题会容易得多。数值可在 <a href="http://www.sqlite.org/c3ref/c_abort.html" rel="noreferrer noopener nofollow">this page</a> 上找到.</p>

<pre><code>int errorCode = sqlite3_prepare_v2(database, sqlStatement, -1, &amp;compiledStatement, NULL);
if(errorCode != SQLITE_OK) {
    NSLog(@&#34;Connect to table failed: %d&#34;, errorCode);
}
</code></pre>

<p>但是,如果您甚至无法在 <code>sqlite3</code> 命令行工具中从数据库中进行选择,我建议您检查该文件是否存在、是否可读且格式是否正确。</p>

<p>尝试在您的模拟器中重现错误(如果失败,请将数据库文件复制到您的计算机,例如使用 Organizer)。尝试使用 <code>sqlite3</code> 运行查询(我知道您确实尝试过,但请确保您正在检查以下内容)。</p>

<p>如果您收到消息 <code>Error: file is encrypted or is not a database</code>,则表示数据库文件已损坏。如果你得到<code>Error: no such table:</code>,这意味着你的数据库不存在,<strong>是空的</strong>,或者根本没有得到这个表。如果你得到(如你的问题):<code>Error: unable to open database</code>(你在打开sqlite时得到这个,而不是在执行查询时得到),这意味着sqlite无法读取文件(对于示例权限)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 无法从 sqlite3 数据库中选择,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10072646/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10072646/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 无法从 sqlite3 数据库中选择