c 獲取sqlite3資料庫表中所有欄位的方法

2022-08-09 09:09:07 字數 2169 閱讀 9495

常用方法:

1.使用sqlite3_get_table函式

2.獲取sqlite建立表的

sql語句字串,然後進行解析獲取到相應的字段

3.採用配置檔案的方式,將所有欄位名寫入配置檔案

方法1:使用

sqlite3_get_table

函式**:

char *dbname =「test.db」;

int rc = sqlite3_open(dbname, &db);

if (rc ==sqlite_ok)

}sqlite3_free_table(presult);

}sqlite3_close(db);

分析:nrow返回的是查詢到的記錄的行數

(不包括欄位名那一行),

ncol

返回的記錄的列數,通過

presult

可以訪問所有返回的資料報括所有的欄位名。如下圖:

nrow=7,ncol=6,則

presult[0-5]

返回的為當前這張表的欄位名,每個欄位名都是乙個字串陣列。

該方法缺點:如果當前表中不存在記錄時,將無法訪問presult[0 - ncol-1],這樣就無法獲取到表中字段。實際應用中經常需要在程式剛啟動時就一次性先獲取表中所有的欄位名以便之後的插入刪除更新等操作,所以該方法實用性不強。

方法2:獲取

sqlite

建立表的

sql語句字串

過程分析:sqlite3在建立乙個資料庫以及對應的表之後會自動生成乙個

table

,該table

格式如下:

其中欄位sql為建立表的

create

語句,通過

sqlite3_get_table

可以獲取到指定表的

create sql

語句,然後解析字串就可以得到指定表中所有欄位名。

**:

//

獲取上圖figures表中create sql語句

string

db_getfigurecreatesql()

}sqlite3_free_table(presult);

}sqlite3_close(db);

return

res;}//

解析字串函式

std::vector split(string str, string

separator)

str = str.substr(cutat + 1

); }

if (str.length() > 0

)

return

result;}//

獲取表中欄位名

std::vector db_getkeyfieldname(string

res)

else

if (tp.size() == 3

)

}return

keyfield;

}

使用方法

std::vector fieldname = db_getkeyfieldname(db_getfigurecreatesql());
結果分析:如果表中隨時有可能新增新的字段,新增欄位的sql語句,如下:

alter table x add column "new_col",

其中new_col為欄位名,雙引號必須加上,因為上面解析的過程以雙引號「 \」」為分隔字元。(注意:

sql語句中加雙引號,單引號或者不加引號都可以成功的向指定表中新增字段

)方法3:採用配置檔案的方式,將所有欄位名寫入配置檔案

對於某些具體複雜的應用場景,可以採用配置檔案的方式將所有欄位名寫入對應的配置檔案中,每次進入應用程式時讀取配置檔案即可。另外如果某些欄位有指定中可選的值,也可以將這些可選值也寫入配置檔案中。本人自己用的不規範的配置檔案寫法就不分享了,近期好好研究配置檔案的規範寫法。

Sqlite3 資料庫使用

iphone本身是支援 sqlite3 資料庫的,在專案中匯入libsqlite3.dylib。並建立資料庫,在終端,建立資料庫的方式 mkdir sql 建立sql資料夾 cd sql 進入sql目錄下 sqlite3 student.sql 建立名為 student.sql的資料庫 建立表 插入...

sqlite3資料庫操作

1 開啟資料庫 1 需要制定資料庫的路徑 nsstring filepath nshomedirectory documents data.sqlite 2 建立資料庫的物件 sqlite3 qingyundb null 3 開啟命令 sqlite3 open dbfilepath utf8stri...

SQLite3資料庫操作

簡單的sqlite3語句,通過字串拼接執行資料庫操作。1.建立資料庫格式 db.execsql create table if not exists sharp id integer primary key,name varchar,level integer,high integer 其真正的有效...