Mac OS X Sqlite程式設計應用
Sqlite是一個輕量級的資料庫引擎,大概幾百K左右,所以在嵌入式裝置中應用廣泛;而且由於介面簡單,使其在非嵌入式領域中也被大量使用; 詳細內容請參考官方介紹:http://www.sqlite.org/about.html,這裡就不再贅述;
一、工程中引入sqlite3
資料庫建立前需要在程式中引入sqlite3庫檔案以及在程式碼中新增sqlite3標頭檔案;以XCode開發環境為例,需要在“Target->Build->Other Linker Flags”中加入“-lsqlite3”連結選項;程式碼檔案中加入#import <sqlite3.h>;
二、資料庫建立
資料庫建立類似檔案建立,使用sqlite3_open()函式,如果不存在就建立,如果存在就開啟;
- sqlite3 *db = NULL;
- int rc;
- char * dbPath = "myTest.db3";
- rc = sqlite3_open(dbPath, &db);
- if(rc)
- {
- printf("Open database failed!");
- sqlite3_close(db);
- return 1;
- }
使用sqlite3建立的資料庫檔名稱以db3作為檔案型別並非必需,而是和sqlite檔案有個區別;資料檔案首次建立後,還需要建立表;程式碼如下:
- //create or open Table
- char
- "ID INTEGER PRIMARY KEY,"/
- "Name VARCHAR(80),"/
- "TEL1 VARCHAR(20),"/
- "EMAIL VARCHAR(40)"/
- ");";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n"
網上有許多檢視和編輯sqlite3資料庫檔案的視覺化小工具,例如:SQLiteSpy.exe;這樣進行資料庫分析和修改時就不必每次都自己寫程式碼來操作了;
三、資料庫插入
向剛才新建的表中新增一個條目,由於sqlite網站中都是英文資料型別,我使用UTF8編碼格式的程式碼檔案(XCode預設程式碼檔案格式為UTF8編碼)直接輸入中文字元,能夠正常執行,其他編碼格式沒有試過,感覺應該不會有什麼問題,改天有時間嘗試一下;
- //insert three item
- sql = "INSERT INTO /"ContactTbl/" VALUES(NULL, '小康', '18602914000', '[email protected]');";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
四、資料庫查詢
使用sqlite3_get_table()進行資料查詢時,返回一個char **型別的字元陣列;返回的行列值分別是表中資料的行和列數目;需要注意的是,返回的字元陣列比實際資料多了一行表頭;所以在使用和輸出時需要注意;按照上面的資料格式,行、列值分別為1、4;而字元陣列的數目為(nRow+1)*nColumn;
- //query data, don't forget to free the result
- char **aResult = NULL;
- int nRow = 0;
- int nColumn = 0;
- sql = "SELECT * FROM ContactTbl";
- sqlite3_get_table(db, sql, &aResult, &nRow, &nColumn, &zErrMsg);
- printf("%s/n",zErrMsg);
下面是格式輸出程式碼:
- //printf("ID/t/t姓名/t/t電話/t/t電子郵件/t/t/n");
- //此處不需要輸出表頭,因為字元陣列中已經包括表頭
- int rowIndex;
- for(rowIndex=0; rowIndex<(nRow+1)*nColumn; rowIndex++)
- {
- printf("%s/t/t", aResult[rowIndex]);
- if(0==(rowIndex+1)%nColumn)
- {
- printf("/n");
- }
- }
- sqlite3_free_table(aResult);
例如下面這張表以及查詢結果資料格式列舉如下:
Name | Age
-----------------------
Alice | 43
Bob | 28
Cindy | 21
aResult[0] = "Name";
aResult[1] = "Age";
aResult[2] = "Alice";
aResult[3] = "43";
aResult[4] = "Bob";
aResult[5] = "28";
aResult[6] = "Cindy";
aResult[7] = "21";
簡單說,獲取到的字元陣列就是將表中某行某列(包括表頭),作為一個字串,這樣依次儲存下來,成為一個字串陣列,編碼格式為UTF8;
另外,由於查詢返回的字元陣列是在sqlite3_get_table()函式內部分配的記憶體空間,使用完成後需要使用sqlite3_free_table()函式進行釋放,此處不能簡單的通過sqlite3_free()函式釋放;
五、資料庫刪除
資料庫條目的刪除和插入類似,程式碼如下:
- //delete item
- sql = "DELETE FROM ContactTbl WHERE ID = 3;";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
下面附上整個main.m的原始碼:
- //
- // main.m
- // sqlite3Test
- //
- // Created by kh on 10-11-22.
- // Copyright 2010 cx. All rights reserved.
- //
- #import <sqlite3.h>
- #import <Cocoa/Cocoa.h>
- int main(int argc, char *argv[])
- {
- sqlite3 *db = NULL;
- int rc;
- char * zErrMsg = NULL;
- char * dbPath = "myTest.db3";
- //create or open database
- rc = sqlite3_open(dbPath, &db);
- if(rc)
- {
- printf("Open database failed!");
- sqlite3_close(db);
- return 1;
- }
- //create or open Table
- char *sql = " CREATE TABLE ContactTbl("/
- "ID INTEGER PRIMARY KEY,"/
- "Name VARCHAR(80),"/
- "TEL1 VARCHAR(20),"/
- "EMAIL VARCHAR(40)"/
- ");";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
- //insert three item
- sql = "INSERT INTO /"ContactTbl/" VALUES(NULL, '小康', '18602914000', '[email protected]');";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
- sql = "INSERT INTO /"ContactTbl/" VALUES(NULL, '小陳', '18602935000', '[email protected]');";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
- sql = "INSERT INTO /"ContactTbl/" VALUES(NULL, '小霞', '18602966000', '[email protected]');";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
- //query data, don't forget to free the result
- char **aResult = NULL;
- int nRow = 0;
- int nColumn = 0;
- sql = "SELECT * FROM ContactTbl";
- sqlite3_get_table(db, sql, &aResult, &nRow, &nColumn, &zErrMsg);
- printf("%s/n",zErrMsg);
- //printf("ID/t/t姓名/t/t電話/t/t電子郵件/t/t/n");
- int rowIndex;
- for(rowIndex=0; rowIndex<(nRow+1)*nColumn; rowIndex++)
- {
- printf("%s/t/t", aResult[rowIndex]);
- if(0==(rowIndex+1)%nColumn)
- {
- printf("/n");
- }
- }
- sqlite3_free_table(aResult);
- //delete item
- sql = "DELETE FROM ContactTbl WHERE ID = 3;";
- sqlite3_exec(db, sql, 0, 0, &zErrMsg);
- printf("%s/n",zErrMsg);
- //and requery the data
- sql = "SELECT * FROM ContactTbl";
- sqlite3_get_table(db, sql, &aResult, &nRow, &nColumn, &zErrMsg);
- printf("After delete the ID 3/n");
- for(rowIndex=0; rowIndex<(nRow+1)*nColumn; rowIndex++)
- {
- printf("%s/t/t", aResult[rowIndex]);
- if(0==(rowIndex+1)%nColumn)
- {
- printf("/n");
- }
- }
- sqlite3_close(db);
- char para[50] = {0};
- sprintf(para, "rm %s", dbPath);
- system(para);
- return 0;
- }
最後的刪除語句用於在測試後刪除資料庫檔案,避免重複執行後資料庫中有重複條目,呵呵;針對以上程式碼,Consel輸出如下:
- (null)
- (null)
- (null)
- (null)
- (null)
- ID Name TEL1 EMAIL
- 1 小康 18602914000 [email protected]
- 2 小陳 18602935000 [email protected]
- 3 小霞 18602966000 [email protected]
- (null)
- After delete the ID 3
- ID Name TEL1 EMAIL
- 1 小康 18602914000 [email protected]
- 2 小陳 18602935000 [email protected]
相關推薦
Mac OS X Sqlite程式設計應用
Sqlite是一個輕量級的資料庫引擎,大概幾百K左右,所以在嵌入式裝置中應用廣泛;而且由於介面簡單,使其在非嵌入式領域中也被大量使用; 詳細內容請參考官方介紹:http://www.sqlite.org/about.html,這裡就不再贅述; 一、工程中引入sqlite
Mac OS X核心程式設計,MAC驅動開發資源彙總
一.Mac OS X核心程式設計開發官方文件: I/O Kit Fundamentals: I/O Kit基礎 - Mac OS X系統核心程式設計 Threading Programming Guide:MAC OS X 執行緒程式設計指南 - Mac OS
Qt在Mac OS X下的程式設計環境搭建
在Mac OS X下使用Qt開發,需要配置Qt庫和編譯器。編譯器只能使用蘋果公司自主研發的Clang。 1、分別下載並安裝XCode和Command Line Tools(必須安裝),安裝完畢後,Clang就有了。 2、下載Qt並預設安裝 http://dow
U 盤全新安裝 Mac OS X 提示【這個“安裝 OS X ……”應用程式副本不能驗證】的解決方法
如果網路好,也嫌如下安裝是 10.10 系統,可以使用 option + R 進行網路恢復。不過好像大部分人都會死於半路…… 如果 OS X 系統廢了,需要重新安裝,則在另一臺 Windows 系統上用 TransMac 製作啟動盤 在製作好了以後,按住
通過ADB操作/檢視SQLite資料庫以及Mac OS X下adb shell配置與啟動
在Android系統中的資料持久化方案常用的有如下三種: 檔案儲存 – 檔案儲存路徑為:data/data/包名/files SharedPreferences儲存 – SharedPrefere
Mac OS X下從服務程序中啟動另一個應用程式(Cocoa Application)
- (void) launchAppliction: (NSString*) appPath{ //appPath指向可執行檔案的絕對地址 NSTask *softTask = [[NSTask alloc]init]; [softTask setLaunchPath:appPath]; [softTask
Mac 軟件專題之:OS X Yosemite 精彩應用軟件推薦
文章 server -h 學習工具 查詢 mat 對象 軟件開發 用戶界面 目前,很多軟件都已經發布了針對Yosemite系統的版本,今天和大家分享專題:「OS X Yosemite 精彩應用」,主要分享適配Yosemite系統全新的扁平化界面和新功能的軟件,但要知道未在此
在Mac OS X中下載Android源代碼的一些經驗
總結 同步 uil 空白 googl 新版 -h 教程 files 首先說明。隨著最近(2014年6月開始)GFW的升級。這個站點:http://www.android.com/ 已經不能正常訪問了,以下的這些操作均是在我連接VPN的時候進行的。 首先,須要做一些準
Mac OS X ntp服務
mac os x ntp服務 Mac OS X系統默認是開啟ntp服務的,也就是你可以使用任意一臺安裝了Mac OS的計算機作為ntp服務器,如果沒有開啟請參考我之前的這篇博文將其開啟:http://asherwang.blog.51cto.com/11255017/1855135;我之前所在的
VMware Workstation安裝Mac OS X
os x一、虛擬機安裝Mac系統的前期準備工作1.下載並安裝VMware Workstation Pro 122.下載Mac OS X Unlocker3.下載Mac OS X 10.10的cdr鏡像建議所有程序的安裝路徑為英文。二、Mac OS X安裝1. services.msc停止所有VMware的服務
How to Install wget in OS X如何在Mac OS X下安裝wget並解決configure: error:
configure openssl usr local 解壓 fix 官網下載 .org get 1.ftp://ftp.gnu.org/gnu/wget/官網下載最新的安裝包 wget-1.19.tar.gz 2.打開終端輸入 tar zxvf wget-1.9.1.ta
FinalShell服務器管理軟件,SSH客戶端下載,支持Windows,Mac OS X,Linux
關註 批量 主機 ren manage ask 速度 運維 分享 FinalShell是一體化的的服務器,網絡管理軟件,不僅是ssh客戶端,還是功能強大的開發,運維工具,充分滿足開發,運維需求.用戶QQ群 342045988Windows版
Mac os x 下配置Intellij IDEA + Tomcat
apply tor project 出現 打開終端 miss 1-1 doc 問題 IDEA 建工程 1. 首先是 new project--->create project from scratch---> 取個名字 --->next--->
Mac OS X取消Apache(httpd)開機啟動
daemon class sys processor plist load 關閉 開機 ces 關閉http開機啟動 sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
VMware虛擬機安裝Mac OS X
定義 輸入 http 選項 mac system -h macos 導致 安裝mac系統學習網站來源:http://blog.csdn.net/hamber_bao/article/details/51335834 1.下載安裝VMware workstation (1)首
Sublime Text 2 實用快捷鍵[Mac OS X]
tags ref gis href hive ati 書簽 自動縮進 os x lucasfais 總結了一些非常實用的 Sublime Text 2 快捷鍵,Lucifr 將它們翻譯成了中文,以方便查閱。 註意:修飾鍵(如?)後跟多個按鍵的情況表示在按住修飾鍵的情況
Mac OS X文件系統的附加屬性@如何徹底刪除
刪除 mir end xtend 轉載 顯示 txt xxx inf 有時候在 Mac 系統下讀寫 NTFS 分區時,會發現一些文件不能打開。 顯示錯誤為: 項目“XXX”已被 OS X 使用,不能打開。 如果再終端 ls -al
Mac OS X中Launchpad的圖標添加刪除方法(添加方法別試了,和Linux很大區別)
com nsh usr folders 單純 ron bsp blank 結構 說明:在Mac下的Launchpad圖標添加和刪除都與應用程序的app文件有關,如果單純的只想在Launchpad添加自定義的圖標,然後指定要某條命令運行時,建議不要這麽幹,Launchpad的
python 在mac os x的環境
.cn img 成功 spa char mac 最新 pan 完成 1 python 1.1.在python的官網下載python的最新版本 1.2 直接安裝,安裝完成後可以在終端輸入python3驗證安裝是否成功。 2 pycharm
Golang (Go語言) Mac OS X下環境搭建 環境變量配置 開發工具配置 Sublime Text 2 【轉】
trick blog mac os https 系統 document cnblogs strong os x 一、安裝Golang的SDK 在官網 http://golang.org/ 直接下載安裝包安裝即可。下載pkg格式的最新安裝包,直接雙擊運行,一路按照提示操作