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