我在 SQLITE 和 View 中有两个表,我尝试在其中合并这两个表(我的想法是从 table1 中获取所有行,其中 table1.field1 和 table2.field99 具有相同的值。
Tables and View are Table1,Table2 and View1
View code is "SELECT * FROM Table1 JOIN Table2 ON UPPER(Field1) LIKE UPPER(Table2.Field99)"
如果我跑
SELECT * FROM View1;
或者如果我跑
SELECT * FROM Table1 JOIN Table2 ON UPPER(Field1) LIKE UPPER(Field99);
它从 sqlite shell 返回行就好了。
但是如果我尝试使用以下代码在 C++ 中运行这些 SQL 语句:
if(sqlite3_prepare_v2(database,SQLStr,-1,&stmt,0)==SQLITE_OK){
int cols = sqlite3_column_count(stmt);
printf("Query OK: %s \nColumns: %i\n", SQLStr, cols);
while(1) {
status = sqlite3_step(stmt);
if(status == SQLITE_ROW) {
printf("This is a row!\n");
} else if(status == SQLITE_DONE) {
printf("Rows handled!\n");
break;
} else {
printf("Other status!\n");
break;
}
}
}
它只是返回:
Rows handled: SELECT * FROM View1;
Columns: 7
Rows handled!
但它不像 shell 那样返回任何行。 (应该为查询中的每一行打印“这是一行!”。我试图将表名添加到查询中但没有帮助。我还尝试运行例如 SELECT * FROM Table1; 然后 C++ 返回行。是不是 C++ 中的 SQLITE 无法处理 JOINS 或 Views?
最佳答案
如果你想收集行然后使用 Sqlite3_exec() API 或列 API.sqlite3_step() 只评估准备好的语句它不获取结果,因为你必须使用不同的可用 api 或者你可以使用 sqlite3_exec which是一个包装器。
检查以下链接 http://www.sqlite.org/c3ref/funclist.html http://www.sqlite.org/cintro.html
祝一切顺利
关于c++ - C++ 中的 SQLite SELECT JOIN 和 VIEWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308640/