数据未插入到sqliteDB iOS中

时间:2015-08-26 06:34:48

标签: ios objective-c iphone sqlite

我在现有数据库中创建了一个表(REPORTDATA)。我试图将值插入表中。但它没有插入。我使用以下代码。

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
databasePath = [docsDir stringByAppendingPathComponent:@"Album.db"];
const char *dbpath = [databasePath UTF8String];
NSString *insertSQL;
if (sqlite3_open(dbpath, & albumDB) == SQLITE_OK)
{
    int rowCount = [self GetArticlesCount];
    rowCount += 1;
    NSString *tempcount = [NSString stringWithFormat:@"%d", rowCount];
    insertSQL = [NSString stringWithFormat: @"INSERT INTO REPORTDATA (Num, Json) VALUES ('%@','%@')", tempcount, tempcount];
    char *errmsg=nil;
    if(sqlite3_exec(albumDB, [insertSQL UTF8String], NULL, NULL, &errmsg)==SQLITE_OK)
    {
    }
    else
    {
        NSLog(@"Error Message is =%s",errmsg);
    }
}
sqlite3_close(albumDB);

获取表格中的行数:

- (int) GetArticlesCount
{
 int count = 0;
 dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 docsDir = dirPaths[0];
 databasePath = [docsDir stringByAppendingPathComponent:@"Album.db"];
 if (sqlite3_open([self.databasePath UTF8String], &albumDB) == SQLITE_OK)
{
    const char* sqlStatement = "SELECT COUNT(*) FROM REPORTDATA";
    sqlite3_stmt *statement;
    if( sqlite3_prepare_v2(albumDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK )
    {
        //Loop through all the returned rows (should be just one)
        while( sqlite3_step(statement) == SQLITE_ROW )
        {
            count = sqlite3_column_int(statement, 0);
        }
    }
    else
    {
        NSLog( @"Failed from sqlite3_prepare_v2. Error is:  %s", sqlite3_errmsg(albumDB) );
    }
    sqlite3_finalize(statement);
    sqlite3_close(albumDB);
 }
 return count;
}

我正在

Error Message is =(null).

2 个答案:

答案 0 :(得分:1)

尝试使用以下代码查找错误。

const char *sql = "INSERT INTO REPORTDATA (Num, Json) VALUES VALUES (?,?)"
if (sqlite3_prepare_v2(albumDB, sql, -1, &statement, NULL) != SQLITE_OK) 
{
  NSLog(@"Prepare failure: %s", sqlite3_errmsg(albumDB));
}
if (sqlite3_bind_text(statement, 1, [commentString UTF8String], -1, NULL) != SQLITE_OK) 
{
  NSLog(@"Bind 1 failure: %s", sqlite3_errmsg(albumDB));
}
if (sqlite3_step(statement) != SQLITE_DONE) {
  NSLog(@"Step failure: %s", sqlite3_errmsg(albumDB));
}
sqlite3_finalize(statement);

答案 1 :(得分:0)

正如其他人所说,我还建议您检查实际的错误消息。

9 of 10,我相信这是因为数据库文件Album.db不在文档目录中。

尝试添加断点并检查databasePath值,打开该目录并确认文件在那里。

如果文件的大小为 0字节,请务必将其删除并将正确的文件添加到Bundle Resources中:

  

项目 - >目标 - > 正确的目标 - >构建阶段 - >复制捆绑资源

编辑:在您的情况下,您在GetArticlesCount中关闭了数据库,并在关闭数据库后尝试使用数据库指针。所以我相信Rob's answer是正确的解决方案。