【发布时间】:2016-06-08 13:55:02
【问题描述】:
是否可以在 SQLite 的一个查询中执行两个或多个 select 语句?例如,
我们可以执行创建或插入查询,
NSString *create_query = @"create table if not exists Employee (id integer primary key, firstName text, lastName text);create table if not exists Department (id integer primary key, department text, devision text)";
通过使用,
sqlite3_exec(self.contactDB,[create_query UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK)
我们可以执行它。
但如果查询类似于,
NSString *select_query = @"select * from Employee;select * from Department";
那么可以执行吗?如果是,那么如何区分数据和sqlite3_step?
通常我们会获取类似的数据,
if (sqlite3_prepare_v2(self.contactDB, [select_query UTF8String], -1, &statement, NULL) == SQLITE_OK) {
NSLog(@"prepared from data get");
while (sqlite3_step(statement) == SQLITE_ROW) {
NSString *department = [[NSString alloc]initWithUTF8String:(const char*)sqlite3_column_text(statement, 1)];
NSString *devision = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 2)];
NSLog(@"Department : %@, Devision : %@",department,devision);
}
NSLog(@"errror1 is %s",sqlite3_errmsg(self.contactDB));
}
但是如果有两个select语句那么如何识别sqlite3_step中的列和行呢?
我们可以在终端中同时执行两个 select 语句(即 select * from Employee;select * from Department ),所以我认为它应该在 iOS 中以某种方式。
【问题讨论】:
-
每个语句都应该用双引号括起来 For ex; const char *sql_stmt = "选择 1 .....;" “选择 2……;” ;
-
您可以使用
sqlite3_exec并使用回调函数。或者,如果两个查询中的列计数/类型相同,您可以执行单个UNION查询。但为什么呢? -
1) 永远不要使用
select * from ...。始终明确列出您希望选择的列。 2) 为什么要像这样组合两个select语句?它们各自返回完全不同的值。 -
@rob :是的,回调有效。谢谢...... :) 我刚刚要求知识。我没有要求这样做。
-
@rmaddy :我刚刚询问了知识,因为我很困惑,如果在终端中可以,那么在 ios 中也应该可以。!
标签: ios objective-c sqlite