歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 當C++遇到iOS應用開發---SQLite篇

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

日期:2017/3/1 10:07:36   编辑:Linux編程

大約是一年多前開始接觸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. CppSQLite3DB();
  5. CppSQLite3DB(const char* szFile);
  6. virtual ~CppSQLite3DB();
  7. void open(const char* szFile);
  8. void close();
  9. bool tableExists(const char* szTable);
  10. int execDML(const char* szSQL);
  11. //該方法為execNoQuery的封裝
  12. int execNoQuery(const char* szSQL);
  13. CppSQLite3Query execQuery(const char* szSQL);
  14. int execScalar(const char* szSQL);
  15. CppSQLite3Table getTable(const char* szSQL);
  16. CppSQLite3Statement compileStatement(const char* szSQL);
  17. sqlite_int64 lastRowId();
  18. void interrupt() { sqlite3_interrupt(mpDB); }
  19. void setBusyTimeout(int nMillisecs);
  20. static const char* Version() { return SQLITE_VERSION; }
  21. public:
  22. CppSQLite3DB(const CppSQLite3DB& db);
  23. CppSQLite3DB& operator=(const CppSQLite3DB& db);
  24. sqlite3_stmt* compile(const char* szSQL);
  25. void checkDB();
  26. sqlite3* mpDB;
  27. int mnBusyTimeoutMs;
  28. } DB;
Copyright © Linux教程網 All Rights Reserved