我在现有数据库中创建了一个表(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).
答案 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是正确的解决方案。