2010-08-17 111 views
7

我正在打開一個數據庫文件,如果它不存在,可能會創建它。如何檢查sqlite3 C++ API中是否存在表?

但由於某種原因,這不會創建表。有任何想法嗎?

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric)"; 

sqlite3_stmt *stmt; 
rc = sqlite3_prepare_v2(db_, create_table_sql, -1, &stmt, NULL); 
rc = sqlite3_step(stmt); 

我還沒有在這裏通過是我檢查每個點的返回碼。 沒有錯誤。

也許有更好的方法來完成這個?

+1

哇,你認爲是本地化的?給5個以上名譽的人5個答案,這是令人驚訝的。無論如何...... – Matt 2013-03-03 20:18:33

回答

9

變化對另一給出答案:

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK'; 

將返回0是表不存在,1,如果它。

2

看起來你錯過了SQL中的右括號。它應該是:

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric);"; 
+0

對不起,上面的例子與隱藏我工作的人的實際略有不同。在實際的代碼中,create table不起作用。 – Matt 2010-08-17 04:32:29

0

回答我自己的問題。

它並沒有真正反映在上面的代碼中。它實際上一直在工作。但是我在使用的數據庫上有一個錯字。因此,當我使用命令行sqlite3工具檢查它時,它沒有包含表或任何預期的數據。

但是,我很好奇是否有一個函數可以讓我測試一個表是否存在。

5

執行下面的SQL:

select 1 from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK' 

如果你得到一個行則表存在。如果結果集是空的,那麼它不會。