1 打開數(shù)據(jù)庫文件
? sqlite3* m_db = NULL;
? int ret = sqlite3_open_v2("test.db", &db, SQLITE_OPEN_READWRITE, NULL);
? if (ret != SQLITE_OK)
? {
??? return;
? }
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站托管、服務器托管、企業(yè)網(wǎng)站設計、上猶網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
2 如果表不存在,創(chuàng)建表
char szCreateUserDataSql[1024] = "create table if not exists tb_user (id INTEGER ,\
??? type INTEGER,\
??? kind INTEGER)";
3 創(chuàng)建唯一的主鍵ID
char szCreateUserDataSql[1024] = "create table if not exists tb_user (id INTEGER PRIMARY KEY AUTOINCREMENT,\
??? type INTEGER,\
??? kind INTEGER)";
4 查詢
? char szSql[1024] = {0};
? sprintf(szSql, "select distinct * from tb_test");
? sqlite3_stmt* stmt = NULL;
? sqlite3_prepare(m_db, szSql, -1, &stmt, 0);
? while (sqlite3_step(stmt) == SQLITE_ROW)
? {
??? const unsigned char*? szPOIName = sqlite3_column_text(stmt, 0);
??? char szName[128] = {0};
??? if (szPOIName)
??? {
????? sprintf(szName, "%s", szPOIName);
??? }
??? int kx = sqlite3_column_int(stmt, 3);
??? float x = sqlite3_column_double(stmt, 5);
? }
? sqlite3_finalize(stmt);
5 獲取sql執(zhí)行失敗的錯誤信息
char* errMsg = NULL;
char* szSql = "select * from address";
nRet = sqlite3_exec(pDB, szSql, NULL, NULL ,&errMsg);
if (nRet != SQLITE_OK)
{
?? cout<<errMsg<<endl;
?? sqlite3_free(errMsg);
}
注意:釋放errMsg指向的內存
6 關閉數(shù)據(jù)庫
? sqlite3_close(db);
7迭代查詢
char* pszSql = "select * from tableA where id >= ?"
當出現(xiàn)上面的sql語句的情況下,需要對?進行填充,這個時候就會
調用sqlite3_bind_int函數(shù)對該?進行填充
sqlite3_bind_int(stmt, 1, 2);
詳細的說明:第二個參數(shù)表示對第一個?(可能有多個?),2表示填充到?
的值
對于使用回調和預編譯語句獲取記錄集的方式比較
回調:一次性讀取所有的記錄集
預編譯語句:每次使用sqlite3_step獲取到一條記錄了數(shù)據(jù)
代碼:
??? sqlite3_stmt *stmt = NULL;
??? int ret = sqlite3_prepare();
??? ret = sqlite3_bind_int(stmt, 1, id);
??? ret = sqlite3_step(stmt);
??? const char *mst = sqlite3_errstr(ret);
分析:
1)
??? mst的錯誤提示:library routine called out of sequence
通過網(wǎng)上搜索是多線程訪問數(shù)據(jù)庫導致的問題,結果通讀代碼,發(fā)現(xiàn)沒有多線程訪問數(shù)據(jù)庫,并且正常銷毀stmt對象
2)
??? 嘗試手動執(zhí)行命令語句,出錯提示如下:no such column:admin
說明SQL語句有問題,測試sqlite3_prepare函數(shù)的返回值,出錯提示如下:SQL logic error or missing database。通過修改SQL語句,終于可以正常查詢。
總結:sqlite3_prepare函數(shù)會分析SQL語句是否編寫正確,如果不正確就會返回錯誤,導致下面的查詢失敗
分享名稱:SQLite第三課使用例子
網(wǎng)站URL:http://chinadenli.net/article16/ihodgg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、網(wǎng)站營銷、網(wǎng)站內鏈、動態(tài)網(wǎng)站、網(wǎng)站設計公司、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)