当我尝试从 sqlite 数据库表中获取数据时,NSArray 的容量为 100,count 数组的容量为 9。count[5] 返回给我的垃圾数据根本不在表中。甚至前 5 条记录也正确返回。
if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK){
const char* sql2= " select * from Bcars";
sqlite3_stmt *selectstatment;
if(sqlite3_prepare_v2(database,sql2,-1,&selectstatment,Nil)==SQLITE_OK){
while(sqlite3_step(selectstatment)==SQLITE_ROW){
// fetch the id
count[i++]=sqlite3_column_int(selectstatment, 0);
carobject.primarykey=sqlite3_column_int(selectstatment, 0);
[ar addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(selectstatment, 1)]];
[ar1 addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(selectstatment, 2)]];
}
}
}
else
{
sqlite3_close(database);
self.statustext.text=@" database closed";
}
self.statustext.text=[[NSString alloc]initWithFormat:@"%d",count[4]];/* when I try to return count[5] it gives me rabbish value !!*/
self.searchtext.text=(NSString*)[ar objectAtIndex:5];//here is an error occurred !!
最佳答案
您的代码存在几个问题:
- 您尚未初始化
i
计数器,所以我假设它已在代码片段之外初始化,或者? - 您如何知道数据库中实际有多少数据可用?
count
数组必须足够大才能容纳所有行,否则您将覆盖一些未分配的内存。也许您事先知道这一点,否则您应该找出例如通过执行一些 SQL 语句,又名"SELECT COUNT(*) FROM Bcars"
. - 您绝对确定数据库包含超过 5 个条目吗?代码只是假设这一点,但不会对
i
的值进行任何检查。或[ar count]
您是否真的收到了这些条目? - 确保在执行后通过调用
sqlite3_finalize()
进行清理
关于iphone - 我的 iPhone 项目无法获取超过 5 行的 sqlite 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672287/