2012-02-16 69 views
0

我在SQLITE和View中有兩個表,我嘗試編譯這兩個表(我的想法是從table1獲取所有行,其中table1.field1和table2.field99具有相同的值。在C++中SQLite SELECT JOIN和VIEWS

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; 

,或者如果我從sqlite的SHEL運行

SELECT * FROM Table1 JOIN Table2 ON UPPER(Field1) LIKE UPPER(Field99); 

它返回行很好。

但是,如果我嘗試運行用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! 

但像貝殼做它不返回任何行。 (這裏應該是「This is a row!」,爲查詢中的每一行打印,我嘗試將表名添加到查詢中,但沒有幫助,我也試着運行SELECT * FROM Table1;然後C++返回行。它是如此的C++是SQLITE不能處理的加入或意見?

回答

1

如果u要收集的行然後使用Sqlite3_exec()API或列API.sqlite3_step()只評估準備好的語句不獲取結果,對於u必須使用不同的API訪問或U可以使用sqlite3_exec這是一個包裝。

查看以下鏈接 http://www.sqlite.org/c3ref/funclist.html http://www.sqlite.org/cintro.html

一切順利。

+0

嗯,其實我試過使用sqlite3_exec。一切順利,如果我做SELECT * FROM表WHERE Col1 ='1';但如果我做SELECT * FROM Table WHERE Col2 LIKE'Text%';回調函數沒有得到任何記錄。另外如果我嘗試選擇*從View1;它不返回任何行。儘管數據庫引擎似乎在做某些事情,因爲查詢似乎需要一些時間才能運行。 – varjis 2012-02-27 01:05:03