【问题标题】:SQLite SELECT JOIN and VIEWS in C++C++ 中的 SQLite SELECT JOIN 和 VIEWS
【发布时间】:2012-03-07 16:41:12
【问题描述】:

我在 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?

【问题讨论】:

    标签: c++ sql sqlite select


    【解决方案1】:

    如果你想收集行然后使用 Sqlite3_exec() API 或列 API.sqlite3_step() 只评估准备好的语句它不获取结果,因为你必须使用不同的可用 api 或者你可以使用 sqlite3_exec 哪个是一个包装器。

    检查以下链接 http://www.sqlite.org/c3ref/funclist.html http://www.sqlite.org/cintro.html

    一切顺利。

    【讨论】:

    • 好吧,我实际上尝试使用 sqlite3_exec。如果我 SELECT * FROM Table WHERE Col1='1'; 一切顺利但如果我 SELECT * FROM Table WHERE Col2 LIKE 'Text%';回调函数没有得到任何记录。另外,如果我尝试 SELECT * FROM View1;它不返回任何行。虽然看起来数据库引擎正在做一些事情,因为查询似乎需要时间来运行。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 2017-07-23
    • 2021-09-24
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多