在專案中遇到需要判斷sqlite資料庫中某個表是否存在,上網搜尋一些資料後,解決了問題,如下:
首先,在每個sqlite資料庫中,都有乙個名為sqlite_master的表,它定義了資料庫的模式,它的結構如下:
sqlite_master (type text, //專案的型別,如table、index、view、trigger
name text, //專案的名稱,如表名、索引名等
tbl_name text, //所從屬的表名,如索引所在的表名。對於表來說,該列就是表名本身
rootpage integer, //專案在資料庫頁中儲存的編號。對於檢視和觸發器,該列值為0或者null
sql text //建立該項目的sql語句
);
char strfindtable[128];sprintf_s(strfindtable, "select * from where type ='table' and name ='%s'", tabletname); //tablename為表名
sqlite3_stmt* stmt0 =null;
if (sqlite3_prepare_v2(conn, strfindtable, strlen(strfindtable), &stmt0, null) !=sqlite_ok)
int r =sqlite3_step(stmt0);
//判斷表存在,結果集是否已到末尾
//通過sqlite3_step命令執行建立表的語句。對於ddl和dml語句而言, sqlite3_step執行正確的返回值
//只有sqlite_done,對於select查詢而言,如果有資料返回sqlite_row,當到達結果集末尾時則返回sqlite_done。
if (r == sqlite_done)
else if (r == sqlite_row)
這裡要注意的是,當sqlite_master表中沒有我們查詢的表時,它返回的結果集並不會為空,它先返回表項,所以需要使用sqlite3_step。該函式用於評估sqlite3_prepare函式返回的prepared_statement物件,在執行完該函式之後,prepared_statement物件的內部指標將指向其返回的結果集的第一行。如果打算進一步迭代其後的資料行就需要不斷的呼叫該函式,直到所有的資料行都遍歷完畢。在這裡,使用了sqlite3_step之後,如果返回的是sqlite_done,就說明結果集到了末尾,也就是說沒有找到我們判斷存在與否的表,即表不存在;如果返回的是sqlite_row,說明在sqlite_master中找到了表相關的資訊,即表存在。
C 中SQLITE3 判斷表是否存在
在網上搜了好多關於 在c 中操作sqlite3 如何判斷表是否存在,但是要麼集中在 select count from sqlite master where type table and name abc 下,要麼是根據 select from abc 下,根據返回值來判斷。今天經試驗,可使用如下...
Sqlite 判斷表是否存在
最近的專案有在vc環境下使用sqlite,常常在建立表之前需要知道這個表是否存在。一開始用create table if not exists 這條sql語句,但是會報出錯誤提示 sqlite misuse 這種方法行不通,只好自己寫個函式判斷表是否存在。思路是寫乙個查詢語句,接著判斷列的個數,如果...
SQL Server 中如何判斷表是否存在
sql server資料庫中表等物件都儲存在sysobjects資料表中,臨時表被儲存於tempdb資料庫中 1.判斷普通表是否存在,可以使用object id函式,它可以根據物件名稱返回物件的id if select object id tablename is notnull select tr...