【发布时间】:2015-09-26 13:56:53
【问题描述】:
我将逐步引导您完成我的流程,请耐心等待。所以首先我将一个同步 SQLITE 数据库附加到我的主 SQLITE 数据库。附加完成后,我将选择主数据库中可用的所有列(此处的此步骤是为了避免同步 SQLITE 数据库可能具有主 SQLITE 数据库没有的任何其他列。)强>
PRAGMA table_info('%@')
然后我遍历所有列并将它们格式化为字符串。
NSString * pragmaInfo = [NSString stringWithFormat:@"PRAGMA table_info('%@')",currentTable];
const char *tableInfo = [pragmaInfo UTF8String];
NSString * columns;
[columnString setString:@""];
NSString * lastColumn;
sqlite3_stmt * colStatement;
if (sqlite3_prepare(threadedMAINDB, tableInfo, -1, &colStatement, NULL)==SQLITE_OK) {
while (sqlite3_step(colStatement)== SQLITE_ROW) {
if (sqlite3_column_text(colStatement, 1)) {
columns = [NSString stringWithUTF8String:(char *)sqlite3_column_text(colStatement, 1)];
[columnString appendString:[NSString stringWithFormat:@"%@,",columns]];
lastColumn = columns;
}
}
sqlite3_finalize(colStatement);
这是我当前的插入或更新查询。请注意,它有效。
//Where columnString is a prepared mutable string of all the columns available in the main SQLITE database
NSString *tblUpdate = [NSString stringWithFormat:@"INSERT or REPLACE INTO main.%@ (%@) SELECT %@ FROM sync_db.%@",currentTable, columnString,columnString,currentTable];
现在这是我的问题。有没有一种方法可以获取表中所有可用的列名,而无需执行 AND 循环并准备一个字符串以最终插入 INSERT 或 REPLACE 查询?我在考虑这个查询的内容:
select column_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'table';
我在我的 SELECT 语句中尝试过这个,但 SQLITE 抱怨我的“。”期间。
INSERT or REPLACE INTO main.table_name SELECT column_name FROM main.INFORMATION_SCHEMA.COLUMNS where sync.table_name = '%@'
希望我对此很清楚。
【问题讨论】:
标签: ios sql objective-c database sqlite