【问题标题】:How to get data from Sqlite database?如何从 Sqlite 数据库中获取数据?
【发布时间】:2018-01-30 07:52:33
【问题描述】:

我已经创建了如下的 sqlite db Table

NSString * sqlStmt =@"CREATE TABLE IF NOT EXISTS SONGS (ID INTEGER PRIMARY KEY AUTOINCREMENT, SONGNAME TEXT UNIQUE NOT NULL,ALBUMNAME TEXT ,ARTIST TEXT ,SIZE FLOAT ,IMAGE BLOB)";

当我试图从这个表中获取数据时,一无所获

NSString *sqlQuery = [NSString stringWithFormat:
                @"SELECT ARTIST ,IMAGE FROM SONGS WHERE SONGNAME=kannulada"];

但是当我试图通过 id 获取数据时,我正在获取数据。

NSString *sqlQuery = [NSString stringWithFormat:
                @"SELECT ARTIST ,IMAGE FROM SONGS WHERE id=1"];

当我调试它时不执行准备循环

-(NSMutableArray*)retrieveDataArrayWHICHISequql
{
  [dataArray removeAllObjects];
 sqlite3_stmt  *statement;

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &_SQliteDB) == SQLITE_OK)
{

    const char * selectQuery =[sqlQuery UTF8String];

    if (sqlite3_prepare_v2(_SQliteDB, selectQuery, -1, &statement, NULL)== SQLITE_OK)
    {
        while (sqlite3_step(statement)== SQLITE_ROW)
        {
            NSString * addressStr = [[NSString alloc]initWithUTF8String:(const char*)sqlite3_column_text(statement, 0)];

            NSString * phNumStr = [[NSString alloc]initWithUTF8String:(const char*)sqlite3_column_text(statement, 1)];

            //  NSString * nameStr = [[NSString alloc]initWithUTF8String:(const char*)sqlite3_column_text(statement, 2)];

            NSMutableDictionary * dataDict = [[NSMutableDictionary alloc]init];
            [dataDict setObject:addressStr forKey:@"getaddress"];
            [dataDict setObject:phNumStr forKey:@"getphone"];
            // [dataDict setObject:nameStr forKey:@"getname"];

            [dataArray addObject:dataDict];

        }
        sqlite3_finalize(statement);
        sqlite3_close(_SQliteDB);

    }

}
return dataArray;

【问题讨论】:

  • 您是否使用过与此kannulada相关的任何区分大小写的内容@
  • 我使用与歌曲名称完全相同的 NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO SONGS (SONGNAME ,ALBUMNAME ,ARTIST ,SIZE ,IMAGE) VALUES (\"%@\", \"%@\",\"%@\",\"%@\",\"%@\")",self.currentSongTitleName,self.currentSongAlbum,self.currentSongArtistName,display,self.imageDataFromMusic];
  • 使用'kannulada'
  • @Anbu.Karthik 谢谢兄弟它的工作
  • 欢迎我的姐妹/兄弟

标签: ios objective-c sqlite


【解决方案1】:
NSString *sqlQuery = [NSString 

    stringWithFormat:
                    @"SELECT ARTIST ,IMAGE FROM SONGS WHERE SONGNAME='kannulada'"]

;

kannulada 是字符串,所以必须使用单引号

【讨论】:

  • 我在 sqlite db kick (2009) 中有字符串,但我得到 kick(2009) 名称空间正在跳过,但我需要在 sqlite db 中完全相同?
【解决方案2】:

问题是,如果您在sqlite3_prepare_v2 中有错误(它没有返回SQLITE_OK)。因此,如果发生这种情况,您应该查看 sqlite3_errmsg 返回的内容,它会准确地告诉您失败的原因。如果您不查看 SQLite 返回的有意义的错误消息,那么您就瞎了眼。

if (sqlite3_prepare_v2(_SQliteDB, selectQuery, -1, &statement, NULL)== SQLITE_OK)
{
    ...
} else {
    NSLog(@"SQL Error: %s", sqlite3_errmsg(_SQliteDB));
}

关于它失败的原因,这是因为您必须引用字符串文字 'kannulada',或者更好的是,使用 SQL 占位符 ?,然后使用 sqlite3_bind_text

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2020-11-01
  • 2018-05-28
相关资源
最近更新 更多