gpt4 book ai didi

IOS错误在sqlite上插入数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:35 24 4
gpt4 key购买 nike

我正在进行为 iOS 制作 GOLyrics 应用程序的期末项目。我的应用程序可以搜索歌词并收藏它。但是我在添加最喜欢的歌词时遇到了问题,我不知道为什么,我是 Objective C 的新手,尤其是在 ios 编程方面。请帮助我。

这是我添加到最喜欢的方法:

  -(void)insertFav:(Favorite*)favssssdsd{

fileMgrs = [NSFileManager defaultManager];
sqlite3_stmt *stmt=nil;

NSString *sqlQuery=[NSString stringWithFormat:@"INSERT or REPLACE INTO fav (username,title,artist,image,song,lyric) VALUES ('%@','%@','%@','%@','%@','%@');",favssssdsd.username,favssssdsd.lirikTitle,favssssdsd.lirikArtist,favssssdsd.lirikImage,favssssdsd.lirikSong,favssssdsd.lirik];
NSLog(@"query:%@",sqlQuery);
const char *sql =[sqlQuery cStringUsingEncoding:NSUTF8StringEncoding];

//NSLog(@"row:%d",row);
//Open db
NSString *cruddatabase = [self.GetCacheDirectory stringByAppendingPathComponent:@"TB.sqlite"];
sqlite3_open([cruddatabase UTF8String], &db);
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
@try
{
if(sqlite3_step(stmt)==SQLITE_DONE)
{
NSLog(@"Succes insert fav");
}
else NSLog(@"failed insert fav");


}
@catch (NSException *exception) {
NSLog(@"An exception occured: %@", [exception reason]);
}

sqlite3_reset(stmt);

sqlite3_finalize(stmt);
sqlite3_close(db);
}

输出是:

TestYey[1505:47536] query:INSERT or REPLACE INTO fav      (username,title,artist,image,song,lyric) VALUES ('shasapo','Stay','Rihanna','18.jpg','Stay.mp3','the lyrics in here');

TestYey[1505:47536] failed insert fav

请有人帮助我 :")我不知道为什么它没有插入

最佳答案

  1. 您应该在 else 子句中检查从 sqlite3_step(stmt) 返回的代码。这将帮助您找出问题所在。

  2. 第二次改进-

我建议你使用 sqlite3_bind_ 函数:

SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
and check if sqlite3_prepare_v2 returns 'OK' result.

并将你的方法重写为

-(void)insertFav:(Favorite*)favssssdsd{

fileMgrs = [NSFileManager defaultManager];
sqlite3_stmt *stmt=nil;


char sql[] ="INSERT or REPLACE INTO fav (username,title,artist,image,song,lyric) VALUES (?,?,?,?,?,?);";

NSString *cruddatabase = [self.GetCacheDirectory stringByAppendingPathComponent:@"TB.sqlite"];

if (sqlite3_open([cruddatabase UTF8String], &db) != SQLITE_OK)
{
NSLog(@"Failed to open database");
return;
}

if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK)
{

int bindRes = 0;
bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.username UTF8String],-1, SQLITE_TRANSIENT);
bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.lirikTitle UTF8String],-1, SQLITE_TRANSIENT);

bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.lirikArtist UTF8String],-1, SQLITE_TRANSIENT);
bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.lirikImage UTF8String],-1, SQLITE_TRANSIENT);

bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.lirikSong UTF8String],-1, SQLITE_TRANSIENT);
bindRes = sqlite3_bind_text(statement, 1, [favssssdsd.lirik UTF8String],-1, SQLITE_TRANSIENT);

if(sqlite3_step(stmt)==SQLITE_DONE)
{
NSLog(@"Succes insert fav");
}
else NSLog(@"failed insert fav");


}


sqlite3_reset(stmt);

sqlite3_finalize(stmt);
sqlite3_close(db);
}

在你的 bindRes 上设置断点并检查问题出在哪里。

注意 我不确切知道哪种类型具有您的属性,因此如果需要,您应该重写绑定(bind)函数。我使用 bind_text(用于 NSString 绑定(bind))

希望对你有帮助

关于IOS错误在sqlite上插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31161756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com