歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

當C++遇到iOS應用開發---SQLite篇

大約是一年多前開始接觸OBJECT-C並進行IOS開發,一上來就被OBJECT裡那種近似於“丑陋”的方法命名及其[]調用方式給“強暴”了一把,所以在後來的開發過程中,開始思考如何能使用C++方式來混編開發。經過了近半年多的代碼積累和開發調試,開始有了這個系列的內容。本系列BLOG的主要方向是引導IOS開發者特別是之前用C#和C++的朋友,可以一步步搭建屬於擁有.net風格的基本類庫,並快速進行IOS應用的開發。不過前提是讀者和開發者有一定的C++開發經驗,以免遇到一些詭異問題時,能夠快速找出解決方案。

好了,開始今天的內容吧!

在XCODE開發時,可以很方便的引入SQLITE庫來開發基於支持本地數據庫的應用。但網上查到的大部分內容都只是介紹一個簡單的示例而已。眾所周知,微軟的ADO.NET很好很強大,且已發展多年,其使用方式也很靈活多樣。如果將其哪怕部分實現方式“移植”到IOS上,那即使是.NET新手也可以很快適應。在網上基於C++實現連接SQLITE的示例代碼多如牛毛,但封裝的卻不甚理想。最後筆者在CODEPROJECT上終於挖出一個老項目,裡面基本上定義了一些實現方式和框架且實現得短小精悍,且利於擴充,所以我就在其基礎上,逐步加入了一些新的功能。所以就有了今天的內容。

在ADO.NET中定義了一些基本的數據庫訪問組件,比如DataSet, DataTable,DataRow,以及事務等。下面就來看一下用C++實現這些對象的方式。

首先是DataSet:

  1. typedef class CppSQLite3DB 
  2. { 
  3. public: 
  4.  
  5.     CppSQLite3DB(); 
  6.      
  7.     CppSQLite3DB(const char* szFile); 
  8.  
  9.     virtual ~CppSQLite3DB(); 
  10.  
  11.     void open(const char* szFile); 
  12.  
  13.     void close(); 
  14.  
  15.     bool tableExists(const char* szTable); 
  16.  
  17.     int execDML(const char* szSQL); 
  18.        
  19.     //該方法為execNoQuery的封裝  
  20.     int execNoQuery(const char* szSQL); 
  21.  
  22.     CppSQLite3Query execQuery(const char* szSQL); 
  23.  
  24.     int execScalar(const char* szSQL); 
  25.  
  26.     CppSQLite3Table getTable(const char* szSQL); 
  27.  
  28.     CppSQLite3Statement compileStatement(const char* szSQL); 
  29.  
  30.     sqlite_int64 lastRowId(); 
  31.  
  32.     void interrupt() { sqlite3_interrupt(mpDB); } 
  33.  
  34.     void setBusyTimeout(int nMillisecs); 
  35.  
  36.     static const char* Version() { return SQLITE_VERSION; } 
  37.  
  38. public: 
  39.  
  40.     CppSQLite3DB(const CppSQLite3DB& db); 
  41.     CppSQLite3DB& operator=(const CppSQLite3DB& db); 
  42.  
  43.     sqlite3_stmt* compile(const char* szSQL); 
  44.  
  45.     void checkDB(); 
  46.  
  47.     sqlite3* mpDB; 
  48.     int mnBusyTimeoutMs; 
  49. } DB; 
Copyright © Linux教程網 All Rights Reserved