当我在SQLite数据库中插入数据时,我的应用程序崩溃了。
我在SQLite数据库中插入数据的代码是
for (int i=0; i<[arrNewFriendsId count]; i++) {
NSString *stQuery=[NSString stringWithFormat:@"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('%@','%@')",[arrNewFriendsId objectAtIndex:i],[arrNewFriendsFullName objectAtIndex:i]];
NSLog(@"Query registered NewFriendsTable : %@",stQuery);
if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK) {
const char *sql =[stQuery cStringUsingEncoding:NSASCIIStringEncoding];
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
sqlite3_bind_text(selectstmt, 1, [[arrNewFriendsId objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(selectstmt, 3, [[arrNewFriendsFullName objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
NSLog(@"insert successfully NewFriendsTable ");
}
else
{
NSLog(@"insert not successfully NewFriendsTable ");
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
}}
在上面的代码中,应用程序在此行崩溃了
sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
插入的数据来自FaceBook,插入查询是
INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('100000564063540','Rãhüł Pâtęł')
我没有遇到问题
我认为这与Rãhüł Pâtęł
有关。因为它不是常规角色。
但后来也不知道这是确切的问题 任何建议,教程,代码,链接都会有很大的帮助。
答案 0 :(得分:1)
NSASCIIStringEncoding
,尤其是非ASCII字符。
与SQLite 一起使用的所有字符串必须为UTF-8。要使用参数,您实际上必须在查询中包含参数标记:
"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES (?,?)"
(这会自动消除格式问题。)
sqlite3_prepare_v2
。1
和2
,而不是1
和3
。sqlite3_bind_text
之前,您必须致电sqlite3_step
。答案 1 :(得分:1)
问题在您的代码中。
您正在使用的原因:
sqlite3_bind_text(selectstmt, 1, [[arrNewFriendsId objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(selectstmt, 3, [[arrNewFriendsFullName objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
因为您已在查询中拥有值。
您需要删除这些陈述。
使用类似:
for (int i=0; i<[arrNewFriendsId count]; i++)
{
NSString *stQuery=[NSString stringWithFormat:@"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('%@','%@')",[arrNewFriendsId objectAtIndex:i],[arrNewFriendsFullName objectAtIndex:i]];
NSLog(@"Query registered NewFriendsTable : %@",stQuery);
if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK)
{
const char *sql =[stQuery UTF8String];
if(sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL) == SQLITE_OK)
{
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"insert successfully NewFriendsTable ");
}
else
{
NSLog(@"insert not successfully NewFriendsTable ");
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
}
}
答案 2 :(得分:1)
将cStringUsingEncoding:NSASCIIStringEncoding
替换为UTF8String
。
const char *sql =[stQuery UTF8String];
数据库
上的好Tutorial答案 3 :(得分:0)
您正在{@ 1}}获取下面一行的Facebook ID,而且是%@
。我希望,您在数据库中的facebook id字段类型不是String
。
integer
如果您的脸谱ID字段不是 NSString *stQuery=[NSString stringWithFormat:@"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('%@','%@')",[arrNewFriendsId objectAtIndex:i],[arrNewFriendsFullName objectAtIndex:i]];
,则可以尝试以下。
integer