我有两个不同的数据库,Databse1和Database2,在这两个数据库中都包含相同的名称表" tblSubUnit"这个表有一个列名是"收藏夹",现在我想用Database2表列(收藏夹)替换Database1表列。所以请帮我解决更新/更新问题。
代码:
- (void)UpdateFavoriteData:(NSString*)query{
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
if(path==nil){
path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"];
}
NSString *l_DatabasePathFromApp = [path stringByAppendingPathComponent:self.m_DatabaseName];
sqlite3 *bookLoansDB;
if (sqlite3_open([self.m_DatabasePath UTF8String], &bookLoansDB) == SQLITE_OK) {
NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS FavoriteData", [l_DatabasePathFromApp UTF8String]];
char *errorMessage;
if (sqlite3_exec(bookLoansDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) {
sqlite3_stmt *selectStmt;
NSString *selectSQL = @"UPDATE [FavoriteData.SubUnit], [main.SubUnit] SET [FavoriteData.SubUnit].[Faverite] = [main.SubUnit].[Faverite]";
if (sqlite3_prepare_v2(bookLoansDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) {
if(sqlite3_step(selectStmt) == SQLITE_DONE) {
}
}
else {
NSLog(@"Error while Update statement: '%s'", sqlite3_errmsg(bookLoansDB));
}
}
else {
NSLog(@"Error while attaching databases: '%s'", errorMessage);
}
}
else {
sqlite3_close(bookLoansDB);
}
}
我正在尝试这么多的更新查询,但每次都得到相同的结果"更新语句错误"所以请帮助我如何使用另一个数据库表列数据更新一个数据库表列。
答案 0 :(得分:0)
我得到了解决方案,我终于得到了正确的查询。见下面的答案。
- (void)UpdateFavoriteData:(NSString*)query{
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
if(path==nil){
path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"];
}
NSString *l_DatabasePathFromApp = [path stringByAppendingPathComponent:self.m_DatabaseName];
sqlite3 *bookLoansDB;
if (sqlite3_open([self.m_DatabasePath UTF8String], &bookLoansDB) == SQLITE_OK) {
NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS FFavorite", [l_DatabasePathFromApp UTF8String]];
char *errorMessage;
if (sqlite3_exec(bookLoansDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) {
sqlite3_stmt *selectStmt;
NSString *selectSQL = @"update FFavorite.SubUnit set Faverite = (SELECT main.SubUnit.Faverite FROM main.SubUnit WHERE FFavorite.SubUnit.unit_id = main.SubUnit.unit_id)";
if (sqlite3_prepare_v2(bookLoansDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) {
if(sqlite3_step(selectStmt) == SQLITE_DONE) {
}
}
else {
NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(bookLoansDB));
}
}
else {
NSLog(@"Error while attaching databases: '%s'", errorMessage);
}
}
else {
sqlite3_close(bookLoansDB);
}
}