首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行select语句时出现未知错误

执行select语句时出现未知错误
EN

Stack Overflow用户
提问于 2012-04-17 07:51:18
回答 4查看 2.4K关注 0票数 1

在AppDelegate中,我检索了数据库的路径:

代码语言:javascript
运行
复制
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory=[paths objectAtIndex:0];
self.sqlFile=[[NSString alloc]init];
self.sqlFile=[documentDirectory stringByAppendingPathComponent:@"AnimalData.sqlite"];

在我的一个视图控制器中,我必须从数据库中选择值,代码:

代码语言:javascript
运行
复制
NSString *trimString=[appDelegate.mainBreedSelected stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSString *selectSQL=[NSString stringWithFormat:@"select breed from AnimalsTable where mainBreed=\"%@\"",trimString];
sqlite3_stmt *selectStatement;
const char *select_stmt=[selectSQL UTF8String];
if (sqlite3_open([appDelegate.sqlFile UTF8String],&database)==SQLITE_OK)
{
    sqlite3_prepare_v2(database,select_stmt,-1,&selectStatement,NULL);
    if (sqlite3_step(selectStatement)==SQLITE_DONE)
    {
        while(sqlite3_step(selectStatement) == SQLITE_ROW)
        {
            NSString *animalBreed = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 2)];
            NSLog(@"Breed:%@",animalBreed);
        }
    }
    else
        NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database));
    sqlite3_finalize(selectStatement);
    sqlite3_close(database);
}
else
    NSLog(@"Database cannot be opened");

我犯了错误,因为:

*终止应用程序由于非正常异常“NSInternalInconsistencyException”,原因:“选择时出错。”

如何解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-17 09:44:49

我改变了密码:

代码语言:javascript
运行
复制
if (sqlite3_open([appDelegate.sqlFile UTF8String], &database) == SQLITE_OK) {
    NSLog(@"%@",appDelegate.sqlFile);
    NSString *trimString=[appDelegate.mainBreedSelected stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSString *select_sql=[NSString stringWithFormat:@"select breed from AnimalsTable where mainBreed='%@'",trimString];
    const char *sql = [select_sql UTF8String];
    sqlite3_stmt *selectstmt;
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

        while(sqlite3_step(selectstmt) == SQLITE_ROW) {

            NSString *animalBreed = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
            NSLog(@"Breed:%@",animalBreed);
        }
    }
}
else
    sqlite3_close(database); 

而且起作用了!感谢上帝!

票数 1
EN

Stack Overflow用户

发布于 2012-04-17 08:14:29

代码语言:javascript
运行
复制
    select breed from AnimalsTable where mainBreed=\"%@\"",trimString

在表中选择一列,但是

代码语言:javascript
运行
复制
    NSString *animalBreed = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 2);

在这里,您希望得到第3列,因此将2更改为0,如下所示:

代码语言:javascript
运行
复制
    NSString *animalBreed = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 0);
票数 2
EN

Stack Overflow用户

发布于 2012-04-17 08:21:38

不应该是

代码语言:javascript
运行
复制
sqlite3_prepare_v2(database,select_stmt,-1,&selectStatement,NULL);

它应该是

代码语言:javascript
运行
复制
sqlite3_prepare_v2(database,[selectSQL UTF8String],-1,&selectStatement,NULL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10187236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档